设备已植根,应用程序作为系统应用程序运行.
我用
RecoverySystem.installPackage(context, packageFile);
(see here for reference)用其中一个图像替换OS.这应该重新启动系统并初始化恢复系统以安装映像.
我遇到的问题是此调用失败,因为RecoverySystem.installPackage方法似乎无法访问/ cache / recovery / command文件.我想它试图为恢复系统编写一些命令,以便在重启时执行,但是失败了.以下是我得到的例外情况:
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" />
我知道我需要RecoverySystem的REBOOT权限.但是,我不知道其他两个是否相关.我甚至不知道是否需要一些其他权限来创建/写入/ cache分区中的文件.
有人知道我可能会失踪吗?
更新:
好吧,看起来我想通了.权限毕竟是正确的.一切都是对的.
当我通过将apk文件移动到/ system / app将我的应用程序设置为系统应用程序时,我还没有完成所有权限.当我在设备上运行最新代码时,它将其安装在/ data / app中,并将其识别为系统应用程序的更新.因此,只识别原始系统应用程序的权限.
在我重新设置我的最新代码直接从/ system / app运行后,它工作正常.
现在我唯一的问题是,当它重新启动时,它不会安装图像,我最终会得到一个带有感叹号的死绿色机器人.我会继续调查.
我希望这篇文章可以帮助任何有同样问题的人.我也很乐意回答任何问题.
07-20 10:52:46.512 933-951/? W/RecoverySystem﹕ !!! REBOOTING TO INSTALL /storage/emulated/legacy/Download/Update.zip !!!
07-20 10:52:46.512 933-951/? W/System.err﹕ java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)
07-20 10:52:46.512 933-951/? W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
07-20 10:52:46.512 933-951/? W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
07-20 10:52:46.512 933-951/? W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
07-20 10:52:46.512 933-951/? W/System.err﹕ at java.io.FileWriter.<init>(FileWriter.java:42)
07-20 10:52:46.512 933-951/? W/System.err﹕ at android.os.RecoverySystem.bootCommand(RecoverySystem.java:389)
07-20 10:52:46.522 933-951/? W/System.err﹕ at android.os.RecoverySystem.installPackage(RecoverySystem.java:337)
我曾尝试过所有必需的权限,但我无法继续.
所以,因为我使用4.2以上的API,我试图将我的应用程序放入/ system / priv-app,它对我有用.
转载注明原文:Android开发版RecoverySystem.installPackage()无法写入/ cache / recovery / command权限被拒绝 - 乐贴网