【问题标题】:chmod 0777 /data/file is not working for rooted phonechmod 0777 /data/file 不适用于有根手机
【发布时间】:2013-08-08 08:11:07
【问题描述】:

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

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();
}

【问题讨论】:

    标签: android


    【解决方案1】:

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

    /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();
    

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

    编辑 - 您也可以尝试上述变体(基于this answer):

    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();
    

    【讨论】:

    • :感谢您的快速更新,我使用了您的代码,执行 Process process = Runtime.getRuntime().exec("su");但是在 process.waitFor(); 它崩溃之后,请您指导我可能是什么问题,同时我将继续调试。
    • 查看我的编辑。另外你应该尝试直接打开终端并进入超级用户,然后自己执行chmod命令,看看是否有任何错误输出。
    • 我们需要在手机上安装任何 SuperUser Apk 才能使上述代码正常工作(我通过 adb sideload 安装了 SuperSu),并且工作正常。
    【解决方案2】:

    您确定所有进程都已启动吗?我怀疑有一个 su 虽然我可能是错的。

    【讨论】:

    • 只有 process1 在 process2 抛出异常并退出后启动。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2019-08-04
    • 2012-05-31
    • 2018-10-08
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多