Android 程序执行Linux命令的解决方法及注意事项

一:问题描述

    在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些android主板下会出现异常, Command: [su] Working Directory: null Environment: null,代码如下:

private void execLinuxCommand(String cmd){
  Runtime runtime = Runtime.getRuntime();
  try {
   Process localProcess = runtime.exec("su");
   OutputStream localOutputStream = localProcess.getOutputStream();
   DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream);
   localDataOutputStream.writeBytes(cmd);
   localDataOutputStream.flush();
  } catch (IOException e) {
   Logger.i(TAG+"strLine:"+e.getMessage());
   e.printStackTrace();
  }
 }

  由于确认设备已经root,并且上个月测试的时候,没有任何问题,然后今天换新设备测试时(新设备,旧设备android版本一致,均为5.1,并且都已经root),却出现如下异常:

java.io.IOException: Error running exec(). Command: [su] Working Directory: null Environment: null
12-02 10:00:08.685 W/System.err: Caused by: java.io.IOException: Permission denied
12-02 10:00:08.686 W/System.err:  at java.lang.ProcessManager.exec(Native Method)
12-02 10:00:08.686 W/System.err:  at java.lang.ProcessManager.exec(ProcessManager.java:209)
12-02 10:00:08.687 W/System.err:  ... 17 more

通过异常信息判断,Process localProcess = runtime.exec("su");执行这句代码,没有权限,都root了还没权限,我去。。。ls -al  /system/xbin/su信息如下:

二:解决办法

  出现这种问题,一般有三个原因

  1 /system/xbin/su   不存在

root@rk3288:/system/xbin # ls -al su
-rwsr-x--- root  shell  67160 2017-10-16 15:01 su

   通过adb命令,看到是有su这个文件的,所以排除这个原因。

2 /system/xbin/su 权限问题, 

 

  解决办法是执行如下命令,前提是android主板给予了执行chmod 06755命令的权限

chmod 06755 /system/xbin/su

  如果执行以上命令,出现如下问题,请联系设备厂商

root@rk3288:/system/xbin # chmod 06755 /system/xbin/su
Unable to chmod /system/xbin/su: Read-only file system

  3 /system/xbin/su 不允许第三方应用获取root权限

网上的解决办法是:

root@android:/ $ su
su: uid 10061 not allowed to su
root@android:/

总结

以上所述是小编给大家介绍的Android 程序执行Linux命令的解决方法及注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持! 

您可能感兴趣的文章:

  • Linux系统下安装android sdk的方法步骤
  • Android在linux下刷机教程
  • 利用adt-bundle轻松搭建Android开发环境与Hello world(Linux)
  • 基于Android SDK-在64位Linux中使用需要注意的问题
(0)

相关推荐

  • 基于Android SDK-在64位Linux中使用需要注意的问题

    由于机器内存坏了,换了个内存,重新安装了一个64位的Fedora16,把原来的32位的Fedora15格掉了.于是在重新安装Android SDK时遇到了非常好玩的事情,先是SDK的安装文件和ADT无法下载,我家用的移动的宽带,就是无法下载,跟朋友联系了发现移动和联通的宽带无法下载,中国电信是可以正常下载的,真是诡异啊!没有办法,到朋友那下了一个.回来安装时就一直停在Fetching状态,用了<解决Android SDK下载和更新失败的方法详解>提供的方法才成功下载!谁知,下载完成后建了一个项

  • Android在linux下刷机教程

    只需要下载相应的zip包,不需装什么手机助手. 1.下载相应zip包(ROM) http://download.mokeedev.com/ 比如我在上述网站下的魔趣的对应机型的ROM包. 2.linux下载adb 直接一条命令: apt-get install android-tools-adb 3.进入手机的recovery,一般是开机键+音量上,进入sideload模式,等待发送zip包 4.将电脑上的zip包发送到手机里面去,发送完成会自动刷. 5.刷完会自动重启的,选择禁止恢复 6.重启

  • 利用adt-bundle轻松搭建Android开发环境与Hello world(Linux)

    本文与<利用adt-bundle轻松搭建Android开发环境与Hello world(Windows) >是姊妹篇,只是这次操作换成了Linux .拿Ubuntu做例子.还是与Windows一样.由于JDK+Eclipse+ADT+SDK或者JDK+Android Studio在安装的过程中非得联网不可.因此也选用了JDK1.7+解压即用的官方绿色版Android开发环境adt-bundle20131030去安装. 一.基本准备 首先还是与<Debian配置JDK1.7 与Linux

  • Linux系统下安装android sdk的方法步骤

    本文阐述的是如何在Linux系统中安装Android SDK 环境,下面话不多说,来看看详细的介绍吧. 直接下载解压: wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz 修改对应的版本号即可. 关于后续的sdk更新,可以使用命令行版本的sdkmanager 直接更新到最新的sdk: tools/android update sdk --no-ui 显示所有的sdk版本 android list sdk --all 会得

  • Android 程序执行Linux命令的解决方法及注意事项

    一:问题描述    在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些android主板下会出现异常, Command: [su] Working Directory: null Environment: null,代码如下: private void execLinuxCommand(String cmd){ Runtime runtime = Runtime.getRuntime(); try { Process localProcess =

  • pyqt远程批量执行Linux命令程序的方法

    写了个小程序: 功能 1.测试远程ssh连接是否成功, 2.批量执行远程ssh命令 效果如下: 代码如下: #-*- coding:utf-8 -*- import sys from PyQt4 import QtCore, QtGui, uic import locale import re import os from PyQt4.QtCore import * from PyQt4.QtGui import * import paramiko qtCreatorFile = "test.u

  • Android中执行java命令的方法及java代码执行并解析shell命令

    android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析. android的程序基于java开发,当我们接上调试器,执行adb shell,就可以执行linux命令,但是却并不能执行java命令. 那么在android的shell中是否就不能执行java程序了呢. 答案是否定的.我们可以通过app_process来执行java程序. 写一个hello world吧,就是刚开始学java的时候 写得那个hello world,这次要在android上运行. 用记事本新建

  • 详解win7 cmd执行vue不是内部命令的解决方法

    详解win7 cmd执行vue不是内部命令的解决方法 通过全局安装vue-cli npm install --global vue-cli 在cmd中运行vue提示不是内部命令,原因是环境变量没有加上 找到npm的位置:(不在这个位置的全局搜索vue.cmd即可) C:\Users\Administrator\AppData\Roaming\npm 打开我的电脑-->右键属性-->高级系统设置-->环境变量-->Path-->添加获得npm的位置,保存,重启cmd命令工具即可

  • java执行Linux命令的方法

    本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: public class StreamGobbler extends Thread {            InputStream is;      String type;        public StreamGobbler(InputStream is, String type) {          this.is = is;          this.type = ty

  • java在linux本地执行shell命令的实现方法

    目录 一.以springboot为例,建立代码 1.IExecCommandServer: 2.ExecCommandServerImp: 3.ExecCommandController: 二,执行示例 一.以springboot为例,建立代码 1.IExecCommandServer: public interface IExecCommandServer { void execCommand(String cmd); } 2.ExecCommandServerImp: @Service pu

  • 关于PCL出现"无法找到 pcl_commond.dll 文件程序无法执行"的问题及解决方法

    环境:win10+vs2019+pcl1.12.0 问题详情:在vs中编译过程中,出现了无法找到 pcl_commond.dll 文件,程序无法执行...但是在pcl安装路径的bin文件夹下找到了pcl_commond.dll文件. 解决办法:问题出现的原因是未在windows中添加环境变量,需要重新在path中添加环境变量,添加格式为:‘(你的安装路径)\PCL 1.12.0\bin’ 第一步:点击,我的电脑----属性---高级系统设置---环境变量 第二步:在系统变量栏中选中PATH--创

  • Android 7.0行为变更 FileUriExposedException解决方法

    Android 7.0行为变更 FileUriExposedException解决方法 当我们开发关于[在应用间共享文件]相关功能的时候,在Android 7.0上经常会报出此运行时异常,那么Android 7.0以下没问题的代码,为什么跑到Android 7.0+的设备上运行就出问题了呢?,这主要来自于Android 7.0的一项[行为变更]! 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI

  • 6ull加载linux驱动模块失败解决方法

    目录 0x01 加载驱动模块失败 0x02 解决方法 总结 0x01 加载驱动模块失败 加载驱动失败描述信息如下,错误信息提示板卡中运行的 linux 内核版本是 4.1.15-g49efdaa ,架构是 ARMv7 :而编译驱动使用的内核源码版本为 4.1.15 ,架构是 ARMv6 .说明编译驱动使用的内核版本名和架构与板卡中运行的均不一致. root@ALIENTEK-IMX6U:~/get# insmod led.ko [ 1634.442887] led: version magic

  • HTTP 错误 403.1禁止访问:禁止执行访问的完美解决方法

    HTTP 错误 403.1 - 禁止访问:执行访问被拒绝. 解决方法该页无法显示 您试图从目录中执行 CGI.ISAPI 或其他可执行程序,但该目录不允许执行程序. 请尝试以下操作: 如果您认为该目录应该允许执行访问权限,请与网站管理员联系. HTTP 错误 403.1 - 禁止访问:执行访问被拒绝. 技术信息(为技术支持人员提供) 转到 Microsoft 产品支持服务并搜索包括"HTTP"和"403"的标题. 打开"IIS 帮助"(可在 II

随机推荐