Android:写入/sys/目录

Android:写入/sys/目录,android,permissions,filesystems,android-ndk,sys,Android,Permissions,Filesystems,Android Ndk,Sys,我正在开发一个不打算作为标准应用程序发布的应用程序。它将在单个根设备上运行 我需要能够写入/sys/目录中的文件。该文件由root用户拥有,并且具有-rw-rw-permissions 我知道在我的代码运行的VM上可能有一些限制,禁止写入文件系统的这个区域,但我观察到另一个应用程序显然是这样做的 这可能吗?如何实现这一目标?不管手机是否需要根目录,我正在使用的是dev 我已经研究过简单地使用FileWriter写入文件,导致.flush上出现以下错误: 我还尝试过从Java执行shell命令,无

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

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

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

这可能吗?如何实现这一目标?不管手机是否需要根目录,我正在使用的是dev

我已经研究过简单地使用FileWriter写入文件,导致.flush上出现以下错误:

我还尝试过从Java执行shell命令,无论是否使用su。分别返回拒绝的请求和拒绝的权限

Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");
最后,我尝试在案例C中使用NDK和JNI,了解如何神奇地写入此文件。当尝试刷新此文件时,我收到一个EOF,表示发生了错误


欢迎大家提出建议

您必须修改清单,以便程序请求根用户访问权限

公共静态最终字符串工厂测试 自:API级别1


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

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

公共静态最终字符串工厂测试 自:API级别1


以制造商测试应用程序的身份运行,以root用户的身份运行。仅当设备在制造商测试模式下运行时可用。
常量值:android.permission.FACTORY\u TEST

我认为您必须共享实际代码,并告诉我们您真正想要做什么。无效参数对应于write2在EINVAL中失败,当您试图写入不合适的内容时会发生这种情况。不是一件事;一种类型的东西。此文件不是常规文件,是吗?

我认为您必须共享实际代码,并告诉我们您真正想做什么。无效参数对应于write2在EINVAL中失败,当您试图写入不合适的内容时会发生这种情况。不是一件事;一种类型的东西。此文件不是常规文件,是吗?

方法Runtime.getRuntime.execString只是将输入字符串视为可执行文件的文件名。它不会接受你的echo命令。 您应该改用Runtime.getRuntime.execString[],如: 字符串[]cmd={/system/bin/sh,-c,echo xxx>/sys/somefile,}; Runtime.getRuntime.execcmd; 或者,要将某些内容写入sys文件,您应该使用java.io.PrintWriter类。 有关示例,请参阅并搜索“startNativeTracing”。
当然,只有当sys文件对于您的应用程序是可写的时,上述所有操作才能起作用。

方法Runtime.getRuntime.execString只将输入字符串视为可执行文件的文件名。它不会接受你的echo命令。 您应该改用Runtime.getRuntime.execString[],如: 字符串[]cmd={/system/bin/sh,-c,echo xxx>/sys/somefile,}; Runtime.getRuntime.execcmd; 或者,要将某些内容写入sys文件,您应该使用java.io.PrintWriter类。 有关示例,请参阅并搜索“startNativeTracing”。
当然,只有当sys文件对于您的应用程序是可写的时,上述所有功能才能工作。

仅当设备在制造商测试模式下运行时可用。这可能对他没有帮助。只有当设备在制造商测试模式下运行时才可用。我的总体目标是在htc设备上写入/sys/class/htc_附件/fm/flag。所以我的理解是,正如您所说,它不是一个常规文件。对,所以您需要阅读实现该文件的内核源代码,以了解如何使用它。我的总体目标是在htc设备上写入/sys/class/htc_附件/fm/flag。所以我的理解是,正如您所说,它不是一个常规文件。对,所以您需要阅读实现该文件的内核源代码,以了解您应该如何使用它。这个答案为我节省了大量时间,因为我在使用IBM的J9 JVM的Debian variant atom板上遇到了一个类似的问题,它与Apache Harmony共享一个共同的代码沿袭。需要PrintWriter的原因是echo在末尾添加了换行符。如果要cat>somesysfile,键入一个有效值,然后按Ctrl-D,您会看到类似的错误,至少我看到了。当我做同样的事情并在有效值之后点击return,然后点击Ctrl-D,sys文件会正确地接受该值。注意:并非我编写的所有sys文件都需要在我使用的板上使用这一换行符,但仍然不确定原因。这个答案为我节省了大量时间,因为我在使用IBM J9 JVM的Debian变体atom板上遇到了类似问题,该板与Ap共享一个公共代码沿袭 疼痛和谐。需要PrintWriter的原因是echo在末尾添加了换行符。如果要cat>somesysfile,键入一个有效值,然后按Ctrl-D,您会看到类似的错误,至少我看到了。当我做同样的事情并在有效值之后点击return,然后点击Ctrl-D,sys文件会正确地接受该值。注意:并非我编写的所有sys文件都需要我使用的板上的换行符,仍然不确定原因。
Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");