标签:
签名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 <参数>]] ... 主类文件和构造函数参数
版权声明:本文为博主原创文章,未经博主允许不得转载。
安装APK:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
标签:
原文地址:http://blog.csdn.net/m_changgong/article/details/48013843