Android:写入/ sys /目录

时间:2010-08-10 17:06:03

标签: android permissions filesystems android-ndk sys

我正在开发一个不打算作为标准应用程序发布的应用程序。它将在单个root设备上运行。

我需要能够写入/ sys /目录中的文件。有问题的文件由root拥有,并具有-rw-rw-rw-permissions。

我知道我的代码运行的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");

最后我尝试在案例C中使用NDK和JNI,这有点神奇地管理到这个文件。尝试fflush到此文件时,我收到一个EOF(意味着发生了错误)。


非常欢迎所有建议!

3 个答案:

答案 0 :(得分:7)

方法Runtime.getRuntime()。exec(String)只是将输入字符串视为可执行文件的文件名。它不接受你的echo命令。 您应该使用Runtime.getRuntime()。exec(String []),例如:

String [] cmd = {“/ system / bin / sh”,“ - c”,“echo xxx> / sys / somefile”,};
调用Runtime.getRuntime()EXEC(CMD);点。

或者,要将某些内容写入sys文件,您应该使用java.io.PrintWriter类。 请参阅http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/os/Debug.java并搜索“startNativeTracing()”作为示例。

当然,上述所有内容只有在sys文件可以为您的应用程序写入时才能工作。

答案 1 :(得分:1)

我认为你将不得不分享实际的代码并告诉我们你真正想做的事情。 “无效参数”对应于写入(2)EINVAL失败,当您尝试写入不适合的内容时会发生这种情况。不是权限的东西;一个类型的东西。这个文件不是常规文件,是吗?

答案 2 :(得分:0)

您必须修改清单,以便程序要求root用户访问。

http://developer.android.com/reference/android/Manifest.permission.html

public static final String FACTORY_TEST 自:API Level 1

作为制造商测试应用程序运行,以root用户身份运行。仅在设备以制造商测试模式运行时可用。 常量值:“android.permission.FACTORY_TEST”