2012-01-04 120 views
2

我正在編寫一個應用程序,將文件從其assets目錄複製到Android的/ system目錄。如何將文件保存到Android /系統目錄?

我覺得我正在接近實現這一點,但我不是那裏。這裏是我試圖策略:

首先,我試圖改變/系統目錄的權限:

Runtime.getRuntime().exec("su"); 
Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /dev/block/mtdblock4"); 
Runtime.getRuntime().exec("chmod -R 777 /system"); 

其次,我試着寫一個文件到/ system目錄。

我通過重新安裝目錄來閱讀該文件,我可以將文件寫入它。事實上,這似乎與終端一起工作。但在應用程序中,我無法弄清楚如何確保在執行下一個命令之前完成每個命令。

有沒有人有任何建議?

回答

0

我假設有一個exec()方法的返回值,您應該檢查以確定執行是否正常。

但是我想你已經在你嘗試執行此一系列的命令得到了幾個錯誤:

  • su只能影響其自身的進程和子進程。你沒有參數執行它,所以它什麼都不做。接下來的exec()方法從頭開始,具有您的進程的確切權限,而不是您可能期望的提升權限。
  • 您的mount(8)命令看起來不正確:您沒有說明要操作哪個安裝點。 (不要忘記,一個設備可能會安裝在多個位置。)
  • 您的chmod(1)調用也不會以特權運行設置權限的方式太開放。也許你不關心設備上的安全性,這很好,但要確定這是你想要的。

我相信你mount命令應該更像:

Runtime.getRuntime().exec("su -c \"mount -orw,remount /system\""); 

而且我相信你的chmod命令應該更像:

Runtime.getRuntime().exec("su -c \"chmod 777 /system/fonts\""); 

再次,某些你瞭解的後果允許所有具有系統權限的用戶寫入其他用戶可以執行的任何文件。

+0

感謝您的建議,但您會建議應該只是寫入文件的最低權限設置?另外,一旦寫入文件,潛在的解決方案是否可以將權限更改回正常? – 2012-01-04 04:44:00

+0

認真地不要權限!如果你以root身份執行,權限無論如何都不重要。 – slayton 2012-01-04 05:29:50

+0

但是,應用程序的用戶不會是唯一能夠訪問此應用程序的用戶嗎?其他人會如何解決這個問題?你認爲重置權限是個好主意嗎? – 2012-01-04 06:16:54

1
Runtime.getRuntime().exec 

會返回一個Process,從工藝類,可以

getInputStream or getOutputStream or getErrorStream 

這些方法,你可以得到命令執行的結果,你可以檢查一下以確保命令 執行對錯。

+0

這也是一個非常有用的建議,謝謝。 – 2012-01-04 04:44:26

相關問題