3

我正在使用当前代码,它不适用于有根手机。谁能告诉我为什么?

public void setpermission()
    {
    try
    { 
    Process process1 = Runtime.getRuntime().exec("su");
    process1.waitFor();
    Process process2 = Runtime.getRuntime().exec("/system/bin/sh chmod 0777  /data/playback.bin");
    process2.waitFor();
    }
    catch((Exception e) {
    e.printStackTrace();
}
4

2 回答 2

3

我认为您在解析命令字符串时可能会遇到问题。

/system/bin/sh chmod 0777 /data/playback.bin被视为"/system/bin/sh" "chmod" "0777" "/data/playback.bin/"带有额外的引号。不确定这是否是失败的原因,但请尝试以下操作:

Process process = Runtime.getRuntime().exec("su");
DataOutputStream suStream = new DataOutputStream(process.getOutputStream());

suStream.writeBytes("/system/bin/sh chmod 0777  /data/playback.bin" + "\n");

suStream.writeBytes("exit\n");
suStream.flush();
suStream.close();

process.waitFor();

请注意,您应该在 之后获得应用程序 root 权限弹出窗口exec("su"),因此如果您不这样做,那么它甚至不会尝试执行您的文件权限更改命令。

编辑-您也可以尝试上述的这种变体(基于此答案):

Process shell = Runtime.getRuntime().exec("su", null, new File("/system/bin/"));
OutputStream os = shell.getOutputStream();

os.write(("chmod 777 /data/playback.bin").getBytes("ASCII"));
os.flush();
os.close();
shell.waitFor();
于 2013-08-06T04:43:06.107 回答
0

你确定你所有的流程都开始了吗?我怀疑有一个 su 虽然我可能是错的。

于 2013-08-06T04:32:12.367 回答