[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
转:http://blog.csdn.net/alexander_xfl/article/details/9150971
RunTime.exec()这个接口可以说是给我们开发者提供了一个很好的直观操作底层操作系统的机会,但是这个接口的使用还有很多需要注意的问题。由于要完整的介绍这个接口需要较大的篇幅,我在这里只针对一点进行介绍“如何以root权限执行多条指令”
1.这里首先面对的是root权限,这个需要将手机进行root,具体方法可以通过360一键root来搞定。
2.先来看一下这段代码
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("su");
runtime.exec("cmd1");
runtime.exec("cmd2");
这里,执行su是向系统请求root权限,proc是返回执行su的这个独立进程。
下面来看一下cmd1和cmd2,我们假设这两个命令都需要root权限,那么按照上述方法写的话会发现cmd1和cmd2都会出现permission denied。
这是为什么呢?
因为su命令只会使得当前的进程获得root权限,也就是使得proc获得root权限,而不是让整个应用都具有root权限,又由于后面cmd1和cmd2进行runtime.exec的时候又各自存在于一个独立的进程中,所以不具备root权限。
那么应该怎么来解决呢?往下看
3.让所有指令处在一个进程中
我满怀欢喜地执行上述代码,首先我是知道“cmd_a;cmd_b;cmd_c”这样的写法是正确的,而且经过诸如runtime("cd /mnt;ls -l") 这样的测试证明是可以执行的。
但是上述代码执行后就卡住了,貌似是进程挂起了,个人觉得是su指令的问题,但是确切原因还不清楚,在这里希望哪位大牛知道原因可以告知一下~先谢过!
4.继续探寻
既然proc这个进程已经具有了root权限,那么我们就要想办法怎么在这个线程的前提下进行一些操作,经过查询,终于求的真经,如下:
Process proc = runtime.exec("su");
DataOutputStream os = new DataOutputStream(proc.getOutputStream());
os.writeBytes("cmd1\n");
os.writeBytes("cmd2\n");
os.writeBytes("exit\n");
os.flush();
这里一定要注意cmd1和cmd2后面的“\n”是不可缺少的,由于DataOutputStream这个接口并不能直接操作底层shell,所以需要"\n"来标志一条命令的结束。
ok,搞定。
[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?的更多相关文章
- 权限执行[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
每日一贴,今天的内容关键字为权限执行 RunTime.exec()这个接口可以说是给我们开发者供给了一个很好的直观操纵底层操纵系统的机遇,但是这个接口的使用还有很多需要注意的问题.由于要完全的分析这个 ...
- Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制
Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...
- Android开发第一讲之目录结构和程序的执行流程
1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...
- android 应用使用Root权限执行linux命令
要让Android应用使用Root权限,首先Android设备必须已经获得Root权限.之后可以通过下面的代码取得process对象. Process process = Runtime.getRun ...
- [Android开发常见问题-11] Unable to execute dex: Multiple dex files define 解决方法
最近在开发一个工程,其中用到了一个开源的库项目Android-ViewPagerIndicator. 这个项目是作为一个库出现的,如下图: 这个项目中包含了android-support-v4.jar ...
- [Android开发常见问题-12] Android开发中debug.keystore如何使用。
有些团度在开发较大的项目的时候会用到debug.keystore这种debug签名,那么这个东西怎么用呢?之前在导出签名包的时候只需要android tools -> export signed ...
- Android开发常见问题小结
1.布局文件 自己写的布局文件无得使用 原因:导入了系统的R文件 修改:将android.R 这句注释 或者删除 2.Activity作为主窗口设置 Activity无法启动,或者要设置Activit ...
- Android开发常见问题
1. android模拟机上不能加文件提示read only file system 先:adb shell 后:mount -o remount ,rw /就行不需要附加多余的东西 就上面两行,解决 ...
- [Android开发常见问题-14] Unexpected namespace prefix "abc" found for tag SomeThing
很多开发者朋友可能会自己定义一些控件,以此来扩展现有控件的功能,在扩展空间的时候通常会自己定义一些属性,例如: [html] view plain copy <android.alex.v ...
随机推荐
- Java IO之处理流
一.处理流: 增强功能,提供性能,在节点流之上. 二.节点流与处理流的关系 节点流(字节流.字符流)处于IO操作的第一线,所有操作必须通过它们进行: 处理流可以对其他流进行处理(提高效率或操作灵活性) ...
- Python爬虫实战—— Request对象之header伪装策略
在header当中,我们经常会添加两个参数--cookie 和 User-Agent,来模拟浏览器登录,以此提高绕过后台服务器反爬策略的可能性. User-Agent获取 User-Agent可通过随 ...
- delphi TTcpClient TTcpServer分析(转)
delphi TTcpClient TTcpServer分析(转) 只描述windows socket部分. sockets.pas中各个类得继承关系: TBaseSocket | --------- ...
- (转)OpenFire源码学习之一:XMPP基础知识
转:http://blog.csdn.net/huwenfeng_2011/article/details/43412919 前面两张主要讲基础部分.XMPP与Mina有部分抄写于互联网的其他大事 X ...
- php开发面试题---2、php常用面试题二(表单提交方式中的get和post有什么区别)
php开发面试题---2.php常用面试题二(表单提交方式中的get和post有什么区别) 一.总结 一句话总结: 数据位置:get参数在url里面,post在主体里面 数据大小:get几kb,pos ...
- 删除maven项目后eclipse无法启动
An internal error occurred during: "reload maven project". java.lang.NullPointerExceptio ...
- CSS template
ylbtech-CSS3: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cn ...
- 区分slice,splice,split
原文:https://www.cnblogs.com/webjoker/p/5218114.html 1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进 ...
- leetcode.哈希表.594最长和谐子序列-Java
1. 具体题目: 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1.现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度. 示例 1: 输入: [1,3,2,2,5 ...
- creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
在creat-react-app搭建的项目环境中按需引入antd以及配置less,首先需要暴露出来webpack文件.(此操作不可逆). create-react-app myapp 创建同一个rea ...