[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
来源:互联网 发布:shmmax linux kernel 编辑:程序博客网 时间:2024/06/09 18:53
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.让所有指令处在一个进程中
Runtime runtime = Runtime.getRuntime();Process proc = runtime.exec("su;cmd1;cmd2");我满怀欢喜地执行上述代码,首先我是知道“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权限执行多条指令?
- RunTime.exec()如何以root权限执行多条指令?
- RunTime.exec()如何以root权限执行多条指令?
- 设置让php能够以root权限来执行exec() 或者 shell_exec()
- Runtime.getRuntime().exec如何执行多行命令
- 如何让PHP以root权限执行系统命令
- 如何让PHP以root权限执行系统命令
- java runtime.exec常见问题
- 『Bash Script』以root权限执行最近一条指令
- 多线程Runtime.getRuntime().exec常见问题
- 多线程Runtime.getRuntime().exec常见问题
- shell: 普通用户如何以root权限执行远程服务器上的命令_20160706_七侠镇莫尛貝
- 通过adb以root权限登录android开发板,并修改system目录为读写权限
- 权限 shareuser certificat Runtime.exec
- 权限 shareuser certificat Runtime.exec
- Android应用程序执行shell指令(包含执行root指令)
- Runtime.exec()执行linux shell
- Runtime.exec()执行linux shell
- 检查linux是否安装java、tomcat、mysql
- [资源]_清华大学计算机视频教程_31门_种子ed2k_BT下载
- 测试看有没有积分
- 黑马程序员-------(高新技术)内省、JavaBean
- hbase的内容查询
- [Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
- 黑马程序员--.NET笔记--HTML基础
- U-boot在S3C2440上的移植详解(二)
- 数据结构--单链表
- 黑马程序员-------(高新技术)注解
- 物联网操作系统系列文章之-软件平台的力量
- js网页滚动条滚动事件
- 【Windows 8系统下如何创建图片密码?】
- 练习2.6