Android:写入/sys/目录

标签 android permissions filesystems android-ndk sys

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

我需要能够写入/sys/目录中的文件。有问题的文件归 root 所有,并具有 -rw-rw-rw- 权限。

我知道我的代码在其中运行的 VM 可能存在限制,禁止写入文件系统的这个区域,但我观察到另一个应用程序显然这样做。

这可能吗?如何实现?手机是否需要 root 并不重要(我正在使用的开发者是)。


我研究过简单地使用 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(意味着发生了错误)。


非常欢迎所有建议!

最佳答案

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 文件对您的应用程序来说是可写的时,以上所有方法才有效。

关于Android:写入/sys/目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451502/

相关文章:

c# - 如何检查我是否可以在特定文件夹中创建文件

string - 为什么使用 Golang 设置的文件权限与预期不同?

linux - 从设备 block 识别文件系统类型

android如何在onCreateView中获取高度和宽度

android: 初始屏幕上的空指针

batch-file - 如何使用批处理文件以管理员权限结束进程

python - 在Python中创建一个与目录同名的文件

linux -/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO)

android - 两个 WebView 之间共享缓存

android - 通过 android 将图像上传到 RESTful web 服务,给出 NoSuchMethodError