我正在尝试对我的apk进行签名,因此我可以使用以下命令发布更新至我的应用程序:jarsigner ­-verbose -sigalg SHA1withRSA -­digestalg SHA1 ­-keystore my­release-key.keystore CordovaApp­release­unsigned.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”,而不是命令中的实际别名,并且为什么在开头包含一个反向的感叹号(该字符在另一个字符集中曾经是“-”)。

08-03 15:04