我正在開發一個不打算作爲標準應用程序發佈的應用程序。它將運行在一個單一的根設備上。Android:寫入/ sys /目錄
我需要能夠寫入/ sys /目錄中的文件。有問題的文件由root擁有,並具有-rw-rw-rw-權限。
我知道,我的代碼運行時可能會限制VM運行,禁止寫入文件系統的這個區域,但我觀察到另一個應用程序顯然是這樣做的。
這可能嗎?它如何實現?手機是否需要植入並不重要(我使用的是開發者)。
我看着簡單地用一個FileWriter寫入文件,導致在.flush()
以下錯誤:
java.io.IOException: Invalid argument
at org.apache.harmony.luni.platform.OSFileSystem.writeImpl(Native Method)
我也試着從Java執行shell命令,都與沒有「su」。其中分別返回「拒絕請求」和「拒絕權限」。
Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");
最後我使用NDK和JNI在機箱C一些如何神奇地成功地寫入該文件嘗試。當試圖fflush
到這個文件時,我收到一個EOF(意思是發生了一個錯誤)。
所有建議非常歡迎!
這個答案爲我節省了大量的時間,因爲我在使用IBM的J9 JVM(它與Apache Harmony共享一個通用的代碼譜系)的Debian變體原子板上遇到類似的問題。要求PrintWriter的原因是因爲echo在最後添加了換行符。如果你要cat> somesysfile,輸入一個有效的值,然後點擊Ctrl-D,你會看到一個類似的錯誤(至少我做過)。當我做同樣的事情並在有效值後按回車,然後Ctrl-D,sys文件接受正確的值。注意:並非我寫的所有sys文件都需要在我正在使用的主板上使用此換行符,但仍不確定原因。 – 2011-02-21 14:53:37