最近在盒子上安装应用失败,提示签名失效。查了资料之后,猜测可能是使用的 java 8。所以用命令进行手动签名。
首先:生成秘钥对.
-alias <alias> 要处理的条目的别名
-keyalg <keyalg> 密钥算法名称
-keysize <keysize> 密钥位大小
-sigalg <sigalg> 签名算法名称
-destalias <destalias> 目标别名
-dname <dname> 唯一判别名
-startdate <startdate> 证书有效期开始日期/时间
-ext <value> X.509 扩展
-validity <valDays> 有效天数
-keypass <arg> 密钥口令
-keystore <keystore> 密钥库名称
-storepass <arg> 密钥库口令
-storetype <storetype> 密钥库类型
-providername <providername> 提供方名称
-providerclass <providerclass> 提供方类名
-providerarg <arg> 提供方参数
-providerpath <pathlist> 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令
keytool -genkey -v -keystore /Users/xxx/Downloads/xxx.keystore -alias rca -keyalg RSA -validity 20000
keytool -genkey -v -keystore {秘钥库名称,默认是JDK的bin目录,也可以指定}.keystore -alias {别名} -keyalg {算法名称} -validity {有效天数}
输入密钥库口令: 输入密码,不过不会显示
您的名字与姓氏是什么?
[Unknown]: qq
您的组织单位名称是什么?
[Unknown]: qq
您的组织名称是什么?
[Unknown]: qq
您所在的城市或区域名称是什么?
[Unknown]: qq
您所在的省/市/自治区名称是什么?
[Unknown]: qq
该单位的双字母国家/地区代码是什么?
[Unknown]: qq
CN=qq, OU=qq, O=qq, L=qq, ST=qq, C=qq是否正确?
[否]: yes
您的名字与姓氏是什么?
[qq]: qq
您的组织单位名称是什么?
[qq]: qq
您的组织名称是什么?
[qq]: qq
您所在的城市或区域名称是什么?
[qq]: qq
您所在的省/市/自治区名称是什么?
[qq]: qq
该单位的双字母国家/地区代码是什么?
[qq]: qq
CN=qq, OU=qq, O=qq, L=qq, ST=qq, C=qq是否正确?
[否]: y
否 后面需要输入 y , yes 是错误的。
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore {xxx.keystore} -signedjar {xxx.apk(签名后的APK)}
{ xxx.apk(未签名的)} {上面生成的keystore文件的别名}
jarsigner [选项] jar-file 别名
jarsigner -verify [选项] jar-file [别名...]
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 私有密钥的口令 (如果不同)
[-certchain <文件>] 替代证书链文件的名称
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose[:suboptions]] 签名/验证时输出详细信息。
子选项可以是 all, grouped 或 summary
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳颁发机构的位置
[-tsacert <别名>] 时间戳颁发机构的公共密钥证书
[-tsapolicyid <oid>] 时间戳颁发机构的 TSAPolicyID
[-tsadigestalg <算法>] 时间戳请求中的摘要数据的算法
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库具有受保护验证路径
[-providerName <名称>] 提供方名称
[-providerClass <类> 加密服务提供方的名称
[-providerArg <参数>]]... 主类文件和构造器参数
[-strict] 将警告视为错误
java 6:少了-sigalg 和 -digestalg 两个参数
jarsigner -verbose -keystore {xxx.keystore} -signedjar {xxx.apk(签名后的APK)}
{ xxx.apk(未签名的)} {上面生成的keystore文件的别名}