Разработка 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, он заработал.

Теперь единственная проблема, которую я имею, состоит в том, что, когда он перезагружается, он не устанавливает образ, и я получаю мертвого зеленого робота с восклицательным знаком. Я буду продолжать расследование.

Я надеюсь, что этот пост поможет любому с той же проблемой. Я также буду рад ответить на любые вопросы.

Ответы на вопрос(3)

Ваш ответ на вопрос