gpt4 book ai didi

Android开发RecoverySystem.installPackage() cannot write to/cache/recovery/command permission denied

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:11 33 4
gpt4 key购买 nike

有人要求我为基于 Android 的产品编写一个简单的小应用程序。该设备附带两个具有不同功能的 Android 系统镜像。我正在编写的应用程序只是一个概念证明,当您单击一个按钮时,它会使用恢复系统将当前操作系统替换为其中一个图像。

设备已 root,应用程序作为系统应用程序运行。

我用

RecoverySystem.installPackage(context, packageFile);

( see here for reference ) 用其中一个图像替换操作系统。这应该重新启动系统并初始化恢复系统以安装镜像。

我遇到的问题是此调用失败,因为 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)

因此,我假设我没有访问此文件的适当权限。尽管这是我在 list 中设置的权限:

<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 运行后,它起作用了。

现在我遇到的唯一问题是,当它重新启动时,它没有安装图像,我最终得到一个带有感叹号的死绿色机器人。我会继续调查。

希望这篇文章能帮到遇到同样问题的人。我也很乐意回答任何问题。

最佳答案

在我的应用程序安装在/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() cannot write to/cache/recovery/command permission denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123742/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com