我已经在互联网上搜索了我的问题的答案,但不幸的是我没有找到解决我的问题的方法。我甚至在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
错误仍然存在。
当我将我的应用推送到系统/应用(并重新启动)时,应用程序在应用程序中不可见。
答案 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。