eclipse编译出来的apk,安装时报出INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的错误。
原因:apk的AndroidManifest.xml中声明了android:sharedUserId="android.uid.system",但没有相应的签名
解决方案:
1. 找到编译目标系统时的签名证书platform.pk8和platform.x509.pem,在android源码目录build\target\product\security下。
没有那两个证书的话,可以直接从本链接下载相关资料.
2. 将签名工具(signapk.jar)、签名证书(platform.pk8和platform.x509.pem)及编译出来的apk文件都放到同一目录
3.执行签名命令:
signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk
4.将signedDemo.apk安装即可
类似地,在android源码树编译也会存在同样的问题,解决方法类似。
或直接把目标系统的签名证书platform.pk8和platform.x509.pem(根据android.mk文件的LOCAL_CERTIFICATE 定义,也可能是shared.pk8、media.pk8等)覆盖到build\target\product\security也可,这样就不需要再手工签名了。
5.出现报错问题:
java.util.zip.ZipException: error in opening zip file有可能是压缩问题。
在执行signapk.jar platform.x509.pem platform.pk8 Demo.apk signedDemo.apk出错:
- $ zip -qry ../update_unsigned.zip ./
- $ java -Xmx2048m -jar ./signapk.jar -w ./build/target/product/security/testkey.x509.pem ./build/target/product/security/testkey.pk8 update.unsigned.zip update.zip
- java.util.zip.ZipException: error in opening zip file
- at java.util.zip.ZipFile.open(Native Method)
- at java.util.zip.ZipFile.<init>(ZipFile.java:114)
- at java.util.jar.JarFile.<init>(JarFile.java:133)
- at java.util.jar.JarFile.<init>(JarFile.java:112)
- at com.android.signapk.SignApk.main(SignApk.java:532)
- $
问题出在了signapk.jar
使用图形化压缩没有问题.只是一种可能,记录下来.
java.util.zip.ZipException: error in opening zip file有可能是压缩问题