从代码不起作用修改Android中的文件权限

时间:2013-04-10 08:12:02

标签: android sharedpreferences chmod

前段时间我创建了一个私有共享首选项的应用程序。现在我正在创建一个相关的应用程序,需要检查一些以前的应用程序首选项。我面临的问题是以前的应用程序源代码是在我下个月才能访问的计算机中。由于我不想等那么久,我想,因为我的设备已经生根,我可以修改首选项文件权限以便能够访问它,这样我就可以在我获得之前的应用程序后立即发布这两个应用程序代码回来。

首选项文件位于/data/data/my.package/shared_prefs中。如果我使用adb shell访问它并使用 chmod 777 ,文件权限将被修改,我可以访问首选项,但最终权限将返回到660.我尝试使用以下代码从代码更改它们: / p>

Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml");

不修改权限。那是为什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

我的猜测是从exec()运行的每个命令都是executed in a separate native process。因此,su命令不会影响对exec()的第二次调用。

请改为尝试:

Runtime.getRuntime().exec("su; chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml");

答案 1 :(得分:0)

try {
    Process suProcess = Runtime.getRuntime().exec("su");
    DataOutputStream suOutputStream = new DataOutputStream(suProcess.getOutputStream());
    suOutputStream
            .writeBytes("chmod 777 /data/data/my.package/shared_prefs/my_preferences.xml\n");
    suOutputStream.flush();
    suOutputStream.writeBytes("exit\n");
    suOutputStream.flush();
    suProcess.waitFor();

} catch (IOException e) {
    // TODO Auto-generated catch block
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
}