Bootstrap

Android APK 由于签名异常无法安装-- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 解决

前景 : 在安装第三方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 .

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;