【发布时间】:2018-12-13 20:45:43
【问题描述】:
我有一个具有系统权限的 Android 应用程序(它作为自定义 ROM 的一部分安装在 priv-apps 文件夹中)。
应用在清单中拥有所有可能的权限。
它在没有 root 且无法 root 的 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 应用,在无法 root 的 Android 5.1 设备上具有清单中的所有权限。
提前致谢。
【问题讨论】:
标签: android file-handling