2019独角兽企业重金招聘Python工程师标准>>>
【Android】命令行jarsigner签字和解决找不到证书链错误
1、签名失败
$jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLordy-signed-key -signedjar ./signed_XiaomiVerify.apk ./XiaomiVerify.apk qulordy 输入密钥库的口令短语: jarsigner: 找不到 qulordy 的证书链。qulordy 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。
2、查看帮助
$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 <参数>]] ... 主类文件和构造函数参数
3、寻找签名别名:
首先,在用eclipse进行导出的时候是成功的。所以尝试重新导出应用可以看到别名,如下我的是 'qulordy key' :
4、重新签名:
$jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLordy-signed-key -signedjar ./signed_XiaomiVerify.apk ./XiaomiVerify.apk 'qulordy key' 输入密钥库的口令短语: 正在添加: META-INF/MANIFEST.MF正在添加: META-INF/QULORDY_.SF正在添加: META-INF/QULORDY_.RSA正在签名: AndroidManifest.xml正在签名: classes.dex正在添加: res/正在添加: res/drawable/正在签名: res/drawable/icon.png正在添加: res/layout/正在签名: res/layout/main.xml正在签名: resources.arsc
在cmd进入jdk的bin目录,然后执行以下命令:
jarsgner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystorePath] -singnedjar [apkOut] [apkln] [alias]
ps:红色英文不填的话,默认签名算法采用“SHA256withRSA”,所以会导致360提示:”您的应用签名算法采用“SHA256withRSA”,在部分4.2一下安卓版本的手机上不能安装