在 Windows 命令提示符中:
>keytool -genkey -alias me
>keytool -selfcert -alias me
>jarsigner myJar.jar me
Only one alias can be specified
我在网上找不到有关此错误的任何信息。显然我在这里只指定了一个别名。我可能做错了什么?
我遇到了同样的错误。
我通过重命名路径中的文件夹解决了这个问题
c:\this is a folder\ replaced with c:\this_is_a_folder\
jarsigner 不喜欢文件夹中有空格
只需在文件名周围加引号并加空格即可。对于任何程序,您都需要引用其中包含空格的参数。与 jarsigner 无关。
删除文件夹名称中的空格,例如
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.jks D:\AndroidProject\CheckFinalCodeNew\CheckFinalCode\platforms ndroid uild\outputs pk ndroid-release-unsigned.apk my-alias
问题就解决了
即使我在路径周围加了引号,而且当我将所有内容移动到没有空格的文件夹名称时,我还是收到了此错误。路径中的空格原来是红鲱鱼。
令人困惑的是,Jarsigner 可以在命令提示符窗口中工作,但不能从 Powershell、Windows 终端应用程序或 Ant 任务(使用
exec
作业)工作。
原来我从 PDF 中复制并粘贴了基本的 Jarsigner 命令,并且 命令中的一个连字符不是真正的连字符,而是一些 Unicode 分身。
(我可能应该让 @mark-rabjohn 写下这篇文章并获得荣誉,因为他的脑电波检查了这一切都是 ASCII,但由于这浪费了我生命中的六个小时,我只是觉得不那么慷慨。)
对我来说,是空格导致了同样的错误。
我之前的 CLI 命令是
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${KEYSTORE_FILE} ${UNSIGNED_APK} key0
然后我用双引号括住变量,这解决了我的问题
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "${KEYSTORE_FILE}" "${UNSIGNED_APK}" key0
我遇到了同样的问题,并通过从 jdk 6 切换到 jarsigner 解决了它。虽然我使用 jdk 7 中的 keytool 创建了我的证书,但我无法使用它的 jarsigner 对其进行签名。