我正在尝试对我的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
”,而不是命令中的实际别名,并且为什么在开头包含一个反向的感叹号(该字符在另一个字符集中曾经是“-”)。