安装APK报错INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 如何给系统应用签名?
错误原因说明
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE报错的核心逻辑是:你修改的启动器包声明了使用android.uid.system共享系统用户身份,这类系统级应用必须和设备固件内置的系统签名完全一致才能正常安装,你修改后用默认测试签名打包的安装包自然不匹配校验规则。
系统应用正确签名操作步骤
- 提前准备对应固件的系统签名文件
必须获取和你当前电视盒子运行固件完全匹配的platform.pk8(系统私钥)、platform.x509.pem(系统公钥证书)两个文件,找不到对应签名文件无法完成系统级签名校验。 - 准备签名工具
可选择安卓SDK自带的apksigner工具,或者通用的signapk.jar工具,两者都可完成签名操作。 - 执行签名操作
若使用signapk.jar,直接运行命令:java -jar signapk.jar platform.x509.pem platform.pk8 待签名的修改版安装包.apk 签名完成输出.apk
若使用apksigner,需先将系统签名文件转换为jks密钥库,再执行签名:- 转换私钥格式:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt - 生成pk12格式密钥包:
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name platformkey - 生成jks密钥库:
keytool -importkeystore -deststorepass 自定义密钥库密码 -destkeypass 自定义密钥密码 -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass 刚才设置的pk12密码 -alias platformkey - 执行APK签名:
apksigner sign --ks platform.jks --ks-key-alias platformkey --out 签名完成输出.apk 待签名的修改版安装包.apk
- 转换私钥格式:
- 验证签名有效性
运行命令验证签名是否正确:apksigner verify -v 签名完成输出.apk
确认返回签名验证通过结果后,即可安装到电视盒子。
替代方案(无需系统签名)
如果找不到对应固件的系统签名文件,可先将电视盒子获取Root权限,把修改后的APK直接移动到/system/priv-app/目录下,将文件权限修改为644,重启设备后修改的启动器即可生效。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

