我正在尝试对我的apk进行签名,因此我可以使用以下命令向我的应用发布更新:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myrelease-key.keystore CordovaAppreleaseunsigned.apk alias_name但出现此错误:
jarsigner: Certificate chain not found for: ¡sigalg. ¡sigalg must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.
我刚搬到一台新计算机,所以将我的.keystore文件复制到了它.当我执行keytool -list -v时,它似乎包含私钥,所以我不明白这是怎么回事.是否缺少公钥?
解决方法:
显然,这是一个编码问题.该命令包含的字符看上去类似于减号(ASCII代码0x2D),但实际上是许多破折号或连字符(http://en.wikipedia.org/wiki/Dash)之一.
由于字符代码错误,jarsigner不能将第一个参数“ -verbose”识别为jar文件的名称,而不能将其作为选项,而将“ -sigalg”识别为别名:
Usage: jarsigner [options] jar-file alias
这就解释了为什么错误消息中的别名是“¡sigalg”,而不是命令中的实际别名,并且为什么在开头包含一个反向的感叹号(该字符在另一个字符集中曾经是“-”).