2013-04-10 67 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

相關問題