我有一个具有系统权限的Android应用(作为自定义ROM的一部分安装在priv-apps文件夹中)。
该应用具有清单中的所有可能权限。
它正在未植根且无法植根的Android 5.1平板电脑上运行。
我需要在 / sys / 目录下创建一个文件,但是对于尝试过的各种方法没有运气。
其中包括:
1。确保文件夹可写
File dir = new File ("//sys/class/power_supply/battery");
dir.setWritable(true);
它没有错误,但dir.canWrite()返回false。
2。以编程方式调用chmod
public int chmod(File path, int mode) throws Exception {
Log.e("DisableCharging.chmod", "Starting");
try {
Class fileUtils = Class.forName("android.os.FileUtils");
Method setPermissions =
fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class);
return (Integer) setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1);
} catch (Exception e) {
Log.e("DisableCharging.chmod", "Error: " + e.toString());
return -1;
}
调用chmod(dir,0777);结果:
W/FileUtils: Failed to chmod(/sys/class/power_supply/battery): android.system.ErrnoException: chmod failed: EACCES (Permission denied)
3。通过shell命令写入文件
String[] cmd = { "/system/bin/sh", "-c", "echo 0 > /sys/class/power_supply/battery/charging_enabled"};
Runtime.getRuntime().exec(cmd);
不起作用,但不会引发任何错误。 (我正在通过Android Studio监视logcat。)
4。通过OutputStream写入文件
File dir = new File ("//sys/class/power_supply/battery");
File file = new File(dir, "charging_enabled");
FileOutputStream stream = new FileOutputStream(file);
stream.write("0".getBytes());
stream.close();
创建输出流(第3行)时引发以下错误
java.io.FileNotFoundException: /sys/class/power_supply/battery/charging_enabled: open failed: ENOENT (No such file or directory)
5。使用PrintWriter写入文件
PrintWriter writer=null;
FileOutputStream os = new FileOutputStream (new File(f)); // 2nd line
writer=new PrintWriter(os);
writer.print(s);
writer.flush();
writer.close();
与4中的错误相同(显然),因为它无法打开OutputStream。
java.io.FileNotFoundException: /sys/class/power_supply/battery/charging_enabled: open failed: ENOENT (No such file or directory)
问题
是否可以在 / sys / 文件夹下创建文件并将其写入?
如果这是文件夹权限问题,如何授予这些权限?
要重申:这是一个SYSTEM应用程序,具有在Android 5.1设备上无法root的清单中的所有权限。
谢谢。
答案 0 :(得分:0)
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类。