前几天在group上看到有人问这么个问题:
Hi guys,
I'm working on a G1 rooted. I have to implement program that execute "Root
explorer".
I have write this code :
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身份在运行
这就不难理解为什么通过命令行可以执行root权限才执行的操作,而在Android程序中却不可以。
下面这段代码很好的说明了在那个叫p的进程里面的确可以执行root权限才能执行的操作
这段代码的执行结果是打出了/data/data下的文件及目录
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下的文件及目录