关于Android程序获取Root权限的一点问题

前几天在group上看到有人问这么个问题:

Hi guys,
I'm working on a G1 rooted. I have to implement program that execute "Root
explorer".
I have write this code :

Process p;
try {
p = Runtime.getRuntime().exec("su");
// OK
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"HELLO!!!!!!!!\" >/system/test.txt\n");
os.writeBytes("exit\n");
os.flush();
//
// ERROR
File dir = new File("/data");
String [] list = dir.list();
Log.v("TEST]", String.valueOf(list.length));

try {
p.waitFor();
int exit = p.exitValue();
if (exit != 255) {
Log.v("TEST]", "ok");
}
else {
Log.v("TEST]", "Error");
}
} catch (Exception e) {
Log.v("TEST]",e.getMessage());
}
} catch (Exception e) {
Log.v("TEST]",e.getMessage());
}


I use Superuser.apk for execute "su" command. My program write file test.txt
in /system but statement Log.v("TEST]", String.valueOf(list.length)); return
value 0.
Please, can anyone help me?
Thanks,
Francesco


这段代码的执行结果是/system/test.txt这个文件的确被创建并写入了HELLO!!!!!那个字符串,但是却无法ls /data这个目录(这两个操作都需要root权限才可以的)

其实答案很简单:以root权限运行的只是那个叫p的进程,而Android程序本身并不是以root身份在运行

p = Runtime.getRuntime().exec("su");



这就不难理解为什么通过命令行可以执行root权限才执行的操作,而在Android程序中却不可以。


下面这段代码很好的说明了在那个叫p的进程里面的确可以执行root权限才能执行的操作

Process p = Runtime.getRuntime().exec("su");

DataOutputStream os = new DataOutputStream(p.getOutputStream());
DataInputStream is = new DataInputStream(p.getInputStream());

os.writeBytes("cd /data/data \n");
os.writeBytes("ls \n");
os.writeBytes("exit \n");
os.flush();

p.waitFor();

byte[] buffer = new byte[is.available()];
is.read(buffer);
String s = new String(buffer);
Log.v("TEST", s);


这段代码的执行结果是打出了/data/data下的文件及目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值