RecoverySystem.installPackage - / cache / recovery / command:open failed:EACCESS(权限被拒绝) - 将Android更新到4.3+后缺少权限

时间:2014-04-25 08:37:09

标签: android permissions

我已经在互联网上搜索了我的问题的答案,但不幸的是我没有找到解决我的问题的方法。我甚至在official forum上写了这个案例,不幸的是,主持人无法解决这个问题。下面我描述了这个问题,希望有人遇到类似的问题,并且知道解决方案。

我制作的应用程序在Android 4.1上工作正常,这就是为什么我拒绝与缺少"某些事情相关的问题"。 目前,似乎在较新版本的Android中是一个错误,因为在更新到Android 4.3+(API 18+)后,我的应用程序会显示消息:

  

/ cache / recovery / command:open failed:EACCESS(权限被拒绝)

我的应用程序是一个系统应用程序,因此文件*.apk放在目录/system/app/中 以及合适的文件访问权限(chmod),以便context.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM等于1.

因为应用程序使用RecoverySystem.installPackage(...)方法,所以我添加了权限:

  

<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> <uses-permission android:name="android.permission.REBOOT" /> <uses-permission android:name="android.permission.DELETE_CACHE_FILES" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

超过所需的最低要求,因为我的应用程序使用方法RecoverySystem.verifyPackage(...) 此外,此方法在更新到Android 4.3+后出现问题,但在添加(或所有)权限之后,这些问题已得到解决:

  

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

注意: 为了测试,我还在清单文件中添加了所有可用的权限,但这并没有解决问题。

我再次强调,应用程序正常工作,直到更新到android 4.3+。 更新后,消息出现错误:

  

/ cache / recovery / command:open failed:EACCESS(权限被拒绝)

调用方法RecoverySystem.installPackage(...)时会发生此错误。 (FileWriter command = new FileWriter(COMMAND_FILE);其中COMMAND_FILE == /cache/recovery/command

我不确定,但我认为其中一个可能的原因可能是“bootable / recovery / recovery.c&#39;”中的错误,但我找不到任何确认。

如果有人可以提供帮助,我将不胜感激。

P.S。为了避免互联网上的混乱,请不要发布像&#34;使用谷歌&#34;,&#34;已经是 - 我已经在某个地方看到它 - 但不记得在哪里&#34;,& #34;我有同样的问题/也没有为我工作&#34;,以及其他无法解决问题的帖子。


@ shiri-hrw感谢您的回复。

android:sharedUserId =&#34; com.google.uid.shared&#34; 添加到我的应用清单(AndroidManifest.xml)后,发生错误:

  

安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE请   检查logcat输出以获取更多详细信息。   发布已取消!

logcat的

  

包com.example.test没有与共享用户 com.google.uid.shared 中的签名相匹配的签名;忽略!

并/或

  

包com.example.test没有与共享用户 android.uid.system 中的签名匹配的签名;忽略!

您写道:

  

...因为您的应用未使用Google签名进行签名......

但是在签名申请之后,使用文件* .pk8和* .x509.pem,可以在pulbic sdk中的build / target / product / security下找到。

java -jar SignApk.jar platform.x509.pem platform.pk8 Application.apk Application_signed.apk

和/或

java -jar SignApk.jar shared.x509.pem shared.pk8 Application.apk Application_signed.apk

错误仍然存​​在。

当我将我的应用推送到系统/应用(并重新启动)时,应用程序在应用程序中不可见。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但解决了它。 如果您的固件是4.3+,那么, 您应该在应用清单中添加android:sharedUserId="com.google.uid.shared",然后将您的应用推送到系统/应用

为此,您可以根据您的设备 但是在添加之后,您将无法安装,因为在安装过程中,来自PackageManagerService的verifySignaturesLP方法将返回false,因为您的应用未使用google签名进行签名,因此您必须对该方法进行更改以检查应用包并返回是的。

您收到该错误是因为您的应用没有与Google相匹配的签名。虽然您已使用* .pk对您的应用进行了签名,但该/ /那些文件不包含Google用于签署其应用的签名。

因此,要安装您的应用,您需要修改您之前提到的框架代码。 例如您可以修改verifySignaturesLP方法,以便为您的应用程序返回true。

或第二个选项 如果你不能这样做,那么我不确定,但你可以尝试另一件事。 而不是使用共享ID使用,设备中其他系统应用程序的共享ID。 例如我用了android:sharedUserId="android.uid.system" 然后通过提供以下命令使您的设备容许

1. adb shell
2. setenforce 0

请记住,在上述命令之后,您应该获得 Permissive 而不是 Enforcing getenforce。然后试试。我对这第二个选项并不是100%肯定。 希望第二个选项适用于您的情况。

答案 1 :(得分:0)

如果你使用KitKat(4.4),那么将你的apk放在/ system / priv-app而不是/ system / app。