安装APK:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

在尝试安装签名后的APK时遇到'Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]'错误。解决方案是使用JDK8签名时添加'-digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com'参数。若切换到JDK6并省略这些参数,问题也可得到解决。本文还提供了jarsigner命令的参数解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

签名Apk后,安装出现如下错误:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

google、百度后发现,JDK8 签名时需要加上如下两个参数:

-digestalg SHA1 -sigalg MD5withRSA

完整签名命令如下:

jarsigner  -keystore myKey.keystore -storepass hapk_123  -signedjar MyTest.apk MyTest-unsigned.apk myKey.keystore -digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com

如果不设置tsa参数,会有如下警告:

警告: 
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2070-05-29) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
*******************


将Java环境变量切换到jdk6后,不设置digestalg、sigalg、tsa3个参数, 一切都OK,执行的命令如下:

jarsigner  -keystore myKey.keystore -storepass hapk_123  -signedjar MyTest.apk MyTest-unsigned.apk myKey.keystore


PS:有些帖子自提高,自jdk7就会有如上jdk8出现的问题,未亲测。


PS2,附录jarsigner各参数的解析。

$jarsigner -h
用法:jarsigner [选项] jar 文件别名(key的别名)
       jarsigner -verify [选项] jar 文件
[-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 <参数>]] ... 主类文件和构造函数参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值