android runtime.exec 权限,[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权限执行多条指令?

每日一贴,今天的内容关键字为权限执行 RunTime.exec()这个接口可以说是给我们开发者供给了一个很好的直观操纵底层操纵系统的机遇,但是这个接口的使用还有很多需要注意的问题.由于要完全的分析这个 ...

Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制

Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=&quot ...

Android开发第一讲之目录结构和程序的执行流程

1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...

android 应用使用Root权限执行linux命令

要让Android应用使用Root权限,首先Android设备必须已经获得Root权限.之后可以通过下面的代码取得process对象. Process process = Runtime.getRun ...

&lbrack;Android开发常见问题-11&rsqb; Unable to execute dex&colon; Multiple dex files define 解决方法

最近在开发一个工程,其中用到了一个开源的库项目Android-ViewPagerIndicator. 这个项目是作为一个库出现的,如下图: 这个项目中包含了android-support-v4.jar ...

&lbrack;Android开发常见问题-12&rsqb; Android开发中debug&period;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 /就行不需要附加多余的东西 就上面两行,解决 ...

随机推荐

表单验证神器——jquery&period;validate插件

jquery.validate.js插件应用举例,ajax方式提交数据. html代码: /p>

C&plus;&plus;,利用链式栈实现括号匹配,界面友好,操作方便,运行流畅

#include #include using namespace std; struct Node { char ch; Node* ne ...

Uber新功能:隐藏司机乘客们的手机号码

滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

POCO C&plus;&plus; lib开发环境构建

Welcome Thank you for downloading the POCO C++ Libraries and welcome to the growing community of POC ...

coding菜鸟养成记

http://www.cnblogs.com/xdp-gacl/category/563690.html http://www.cnblogs.com/vincent-blog/p/4402327.h ...

CharacterEncodingFilter -处理字符格式

package com.pb.news.web.filter; import java.io.IOException;import javax.servlet.Filter;import javax. ...

《java&period;util&period;concurrent 包源码阅读》05 BlockingQueue

想必大家都很熟悉生产者-消费者队列,生产者负责添加元素到队列,如果队列已满则会进入阻塞状态直到有消费者拿走元素.相反,消费者负责从队列中拿走元素,如果队列为空则会进入阻塞状态直到有生产者添加元素到队列 ...

Accounting Calendar template

SELECT INITCAP (TO_CHAR (TO_DATE (&year || '-' || LPAD (ROWNUM, 2, '0'), 'yyyy-mm'), 'MON', 'NLS ...

Python基础之Python的变量、常量

变量 看下面这个输出 print('整数达斯柯达敬爱的卡斯加大受打击啊') 变量:就是将运算的中间结果暂时存到内存中,以便后续代码调用 res = '整数达斯柯达敬爱的卡斯加大受打击啊') print ...

r&period;js打包

久闻r.js的大名,但实际没有用它做过任何东西.今天用它时,发现网上许多教程都不对.研究一下,把我的实际经验分享给大家. 例子1 先是HTML页面 < ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值