安装apk的时候总是提示 INSTALL_PARSE_FAILED_NO_CERTIFICATES 错误

时间:2022-03-27 10:58:45

按照网上的各种方式都没有成功,后来


排查方法:

1、先排查签名文件aaa.keystore是否有误

使用eclipse来签名, 在工程点击右键->Anroid Tools-Export Unsigned Application Package

后来发现生成的apk能正常安装,说明aaa.keystore没有问题。


2、查看签名的方式

网络流行的方法是 jarsigner -verbose -keystore idiom.keystore -storepass 123456 -signedjar aaa_signed.apk aaa.apk aaa.keystore

还是报 INSTALL_PARSE_FAILED_NO_CERTIFICATES 错误


3、对比 aaa_signed.apk 、aaa.apk 签名前后的文件,发现META-INF/AAA_KE.SF文件有点不一样

安装apk的时候总是提示 INSTALL_PARSE_FAILED_NO_CERTIFICATES 错误

签名后的是SHA-256-Digest-Manifest,签名前的是SHA1-Digest-Manifest,

查看资料发现两边的jre版本不一样,1.6.0之前的是SHA1-Digest-Manifest。

所以加上参数-digestalg SHA1,发现还是报错INSTALL_PARSE_FAILED_NO_CERTIFICATES 错误,这时候有点奔溃了。


4、之后再加上参数 -sigalg MD5withRSA, 发现问题终于解决了。

例子:

jarsigner -sigalg MD5withRSA  -digestalg SHA1  -keystore aaa.keystore -storepass 123456 -signedjar aaa_signed.apk aaa.apk aaa.keystore

[-sigalg <算法>]       签名算法的名称

[-keystore <url>]           密钥库位置
[-storepass <口令>]         用于密钥库完整性的口令
[-storetype <类型>]         密钥库类型
[-keypass <口令>]           专用密钥的口令(如果不同)
[-sigfile <文件>]           .SF/.DSA 文件的名称
[-signedjar <文件>]         已签名的 JAR 文件的名称
[-digestalg <算法>]    摘要算法的名称
[-sigalg <算法>]       签名算法的名称
[-verify]                   验证已签名的 JAR 文件
[-verbose]                  签名/验证时输出详细信息
[-certs]                    输出详细信息和验证时显示证书
[-tsa <url>]                时间戳机构的位置
[-tsacert <别名>]           时间戳机构的公共密钥证书
[-altsigner <类>]           替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf]               在签名块内包含 .SF 文件
[-sectionsonly]             不计算整个清单的散列
[-protected]                密钥库已保护验证路径
[-providerName <名称>]      提供者名称
[-providerClass <类>        加密服务提供者的名称
[-providerArg <参数>]] ... 主类文件和构造函数参数