使用adb install命令连续三次无法安装成功INSTALL_PARSE_FAILED_NO_CERTIFICATES

作者 FarLee 2016年8月9日 15:41:58   ‖浏览(9,621)

最近在将apk提交给国内一些应用市场时, 发现大部分都可以正常提交, 唯独小米不行, 错误提示:

很抱歉,您的应用未通过审核,原因是:

  • 使用adb install命令连续三次无法安装成功。
  • 请自行使用adb命令行对机型:MI3TD,系统版本:JXCCNBE21.0进行测试,成功后请再次提交

apk安装文件build出来, 经过jarsigner签名之后, 有通过第三方工具dex加壳, 混淆等加固处理, 然后再用jarsigner签名, 最后上传给各大应用市场.

刚开始以为是第三方加固的原因. 取消加固之后问题依旧. 但没有真机测试不方便重现问题. 后面在小米论坛有人发布同样问题.

– 问题:使用第三方工具混淆过后导致在小米部分机型安装时提示签名无效;

– 原因:第三方工具混淆过后重签名时没有写入签名所用摘要算法和签名算法。

– 解决:对加固后的包进行重签名,加入摘要算法和签名算法配置。

INSTALL_PARSE_FAILED_NO_CERTIFICATES

搜这个问题,本人通过邮件获得这个错误信息

基本上判断是apk签名方式上出的问题. 有人把JDK版本从JDK6升级到了JDK7签名之后, APK出现INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误, 然后换回jdk6 又没问题了, 而我的版本也是jdk1.7.0.

原来从JDK7开始, jarsigner默认的签名算法已经变化了, 因此必须指定签名算法和摘要算法.

所以解决方法有:

  • 1. 将jdk7或jdk8版本换回jdk6. 将PATH改成jdk6即可.
  • 2. jdk7以上在签名时, 添加参数
    -digestalg SHA1 -sigalg MD5withRSA

例如:

keytool -genkey -keystore keys.app.keystore -keyalg RSA -validity 20000 -alias keys.app.keystore
jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore $keystore -storepass $storepass -signedjar $signed_apk $unsign_apk $alias_name $alias_pwd

参考: https://developer.android.com/studio/publish/app-signing.html#signing-manually

最后有个提示警告: 此 jar 包含证书链未验证的条目, 因为是自签名证书, 所以可以不管这警告.


来说兩句