Разработка Android RecoverySystem.installPackage () не может выполнить запись в / cache / recovery /, команда запрещена
Меня попросили написать небольшое простое приложение для продукта на базе Android. Устройство поставляется с двумя образами системы Android с различными функциями. Приложение, которое я пишу, является лишь подтверждением концепции, когда при нажатии на кнопку оно использует систему восстановления, чтобы заменить текущую ОС одним из образов.
Устройство рутировано, и приложение запускается как системное приложение.
я использую
RecoverySystem.installPackage(context, packageFile);
(см здесь для справки) заменить ОС одним из образов. Это должно перезагрузить систему и инициализировать систему восстановления для установки образа.
Проблема, которая у меня есть, заключается в том, что этот вызов не удается, потому чтоRecoverySystem.installPackage
Кажется, что метод не может получить доступ к / cache / recovery / command file. Я думаю, что он пытается написать некоторые команды для системы восстановления, которые будут выполнены при перезагрузке, но не удается. Вот исключение, которое я получаю:
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at libcore.io.IoBridge.open(IoBridge.java:416)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at java.io.FileWriter.<init>(FileWriter.java:42)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at android.os.RecoverySystem.bootCommand(RecoverySystem.java:381)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): at android.os.RecoverySystem.installPackage(RecoverySystem.java:330)
Итак, я предполагаю, что у меня нет необходимых прав доступа к этому файлу. Хотя вот разрешение, которое я установил в своем манифесте:
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
Я знаю, что мне нужно разрешение REBOOT дляRecoverySystem
, Тем не менее, я не знаю, актуальны ли другие два. Я даже не знаю, нужно ли мне какое-то другое разрешение для создания / записи файлов в разделе / cache.
Кто-нибудь знает, чего мне не хватает?
ОБНОВИТЬ:
Ну, похоже, я понял это. Разрешения были правильными в конце концов. Все было правильно.
Когда я настраивал приложение как системное приложение, перемещая файл apk в / system / app, я еще не добавил все разрешения. Когда я запустил последний код на моем устройстве, он установил его в / data / app и распознал как обновление системного приложения. По этой причине распознавались только разрешения исходного системного приложения.
После того, как я заново настроил свой последний код для непосредственного запуска из / system / app, он заработал.
Теперь единственная проблема, которую я имею, состоит в том, что, когда он перезагружается, он не устанавливает образ, и я получаю мертвого зеленого робота с восклицательным знаком. Я буду продолжать расследование.
Я надеюсь, что этот пост поможет любому с той же проблемой. Я также буду рад ответить на любые вопросы.