2

我是安卓新手。我正在尝试运行 shell 命令来重命名系统中的文件。我有它的root访问权限。

外壳命令:

$ su
# mount -o remount,rw /system
# mv system/file.old system/file.new

我已经尝试过了,但不起作用:

public void but1(View view) throws IOException{
    Process process = Runtime.getRuntime().exec("su");
    process = Runtime.getRuntime().exec("mount -o remount,rw /system");
    process = Runtime.getRuntime().exec("mv /system/file.old system/file.new");
}
4

2 回答 2

4

您可以使用同一进程运行多个命令,方法是将命令写入进程的OuputStream. 这样,命令将在命令运行的相同上下文中su运行。就像是:

Process process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("mount -o remount,rw /system\n");
out.writeBytes("mv /system/file.old system/file.new\n");
out.writeBytes("exit\n");  
out.flush();
process.waitFor();
于 2013-04-09T10:36:32.420 回答
0

您需要每个命令与 处于同一进程中su,因为切换到 root 不适用于您的应用程序,它适用于su,它在您到达 之前完成mount

相反,请尝试两个 exec:

...exec("su -c mount -o remount,rw /system");
...exec("su -c mv /system/file.old system/file.new");

另外,请注意,我见过一些系统mount -o remount,rw /system会失败但mount -o remount,rw /dev/<proper path here> /system会成功。“这里的正确路径”因制造商而异,但可以通过编程方式收集。

于 2013-04-09T10:52:06.483 回答