前景 : 在安装第三方APK中会遇到部分已有签名的APK的情况,会有如下的报错信息 :
adb: failed to install W:\demo.apk: Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: Package couldn't be installed in /data/app/********** has no signatures that match those in shared user android.uid.system; ignoring!]
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE : 签名文档不一致导致安装失败
解决方法:
那么出现此问题,就会有如下解决方案:
①直接找APK厂商/同事寻求正确签名的版本. ---> 有次解决方案,那么你就不会来找啦 .
②完完全全靠自己去给APK重签名.
那么好, 任何APK编译出来后都具有各自的签名档.列如下图所示:
signingConfigs {
debug {
storeFile file('platform.keystore')
storePassword 'android'
keyAlias 'platform'
keyPassword 'android'
}
release {
storeFile file('platform.keystore')
storePassword 'android'
keyAlias 'platform'
keyPassword 'android'
}
}
那么好 第一步就是清除该APK的签名档:
在Windows中利用减压软件直接打开该APK --- > 进入 META-INF\ 路径 ,删除该路径下 MANIFEST.MF 以外的所有文件.(Tips: 提前备份APK)
执行以上操作后,该APK将无签名档,此时仍然无法安装,安装报错信息如下 :
adb: failed to install F:\security\Demo.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/********** in manifest does not exist]
INSTALL_PARSE_FAILED_NO_CERTIFICATES: 无签名导致解析失败无法安装
此时,需要将此APK正确签名后重新安装, 那么签名方式有以下几种.
第二步 APK重签名:
若有系统源码,可以直接AS修改签名配置文件,重新编译安装,最简单.
方法参考: Android Studio获取系统级签名方式_android studio 查看签名_Brave & Real的博客-CSDN博客
下面讲的是无源码的操作流程:
需要找到机器源码路径 build/target/product/security 下的 platform.pk8 和 platform.x509.pem 两文件.
并将APK 和 signapk.jar 放置在同一路径下.
java -jar signapk.jar platform.x509.pem platform.pk8 Demo.apk Demo_Signed.apk
通过 CMD 运行或转为 bat可执行档 运行均可生成对应的Demo_signed版本的APK
需注意 此处的 platform.pk8 和 platform.x509.pem 需指定对应SDK路径下的签名档.
附件资源为 Android 8.1 SDK27 .