我正在开发一个不打算作为标准应用程序发布的应用程序。它将运行在一个单一的根设备上。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