2013-04-10 37 views
0

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

首选项文件位于/data/data/my.package/shared_prefs。如果我与亚行壳访问和使用CHMOD 777个文件权限被修改,我可以访问偏好,但最终的权限将回到660。我试图用他们的代码更改:

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

权限未被修改。这是为什么?

谢谢!

回答

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"); 
+0

我尝试过了,它仍然没有工作。如果我使用它与两个不同的高管,我看到吐司说我有root权限。如果我在像你这样的单个exec中使用它,那么没有Toast,并且文件权限不会被修改:( – 2013-04-10 09:36:15

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 
} 
+0

我只是试过了,文件权限没有被修改,过程也没有结束。 d之后suProcess.waitFor()应该被执行吗?因为我做了它,它从来没有执行。 – 2013-04-10 12:05:51

+0

我实际上没有一个扎根的手机,所以不能测试。 /stackoverflow.com/a/9884310/1440076)祝你好运约翰;) – minipif 2013-04-10 13:02:54

+0

谢谢无论如何:) – 2013-04-10 13:46:01

相关问题