У меня есть приложение Android с системными разрешениями (оно устанавливается в папке 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. Запись в файл командой оболочки
String[] cmd = { "/system/bin/sh", "-c", "echo 0 > /sys/class/power_supply/battery/charging_enabled"};
Runtime.getRuntime().exec(cmd);
Не работает, но не выдает никаких ошибок. (Я наблюдаю за logcat через Android Studio).
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, которые нельзя рутировать.
Заранее спасибо.