无法签署未签名的APK

8

我试图对未签名的APK进行签名。 我按照此链接操作。

我的步骤:

  1. $ cordova build --release android(成功)
  2. $ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000(成功)
  3. $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name(出现问题)

问题是:

jarsigner: 无法打开 jar 文件:HelloWorld-release-unsigned.apk

然后我按照此链接操作。

  1. $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore F:\mobile\moto\whatever_the_path_is_to_your_apk_file\HelloCordova-release-unsigned.apk alias_name(出现问题)

问题是:

非法选项:-my-release-key.keystore

有人能帮帮我吗?谢谢。

6个回答

11
你需要移除keystore文件名前面的-,并添加参数标志-keystore
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore F:\mobile\moto\whatever_the_path_is_to_your_apk_file\HelloCordova-release-unsigned.apk alias_name

通常情况下,我使用这些命令来生成一个发布版的apk,然后将其发布到Google Play商店:

cd ~/Projects/myappname/
cordova build android --release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore certificates/myappname-cert.keystore -storepass myappname -keypass myappname platforms/android/ant-build/CordovaApp-release-unsigned.apk myappname
jarsigner -verify -verbose -certs platforms/android/ant-build/CordovaApp-release-unsigned.apk
~/android-sdk-macosx/build-tools/21.1.2/zipalign -v 4 platforms/android/ant-build/CordovaApp-release-unsigned.apk releases/android/myappname1.0.0.apk
请注意,我使用具有.keystore证书的certificates目录以及保存所有已签名apk发布的releases/android目录。为了生成一个新的keystore文件和新密码,请执行以下操作:
keytool -genkey -v -keystore certificates/my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

1
当我尝试通过去掉“-”来使用以下命令时:$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 my-release-key.keystore F:\mobile\moto\whatever_the_path_is_to_your_apk_file\HelloCordova-release-unsigned.apk alias_name,它告诉我“只能指定一个别名”。 - syareen
然后我尝试了这个命令:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore -storepass try -keypass try C:\Users\Users\desktop\try\platform\android\build\outputs\apk\android-release-unsigned.apk try,但它告诉我 jarsigner error: java.lang.RuntimeException: keystore load: keystore was tempered with, or password was incorrect - syareen
我更新了我的回答,添加了一个命令来生成一个新的密钥库文件并设置一个新密码。 - manzapanza
之前我使用的是 c:\Users\Users\desktop\try\platform\android\build\outputs\apk\android-release-unsigned.apk,然后我改成了 platform\android\build\outputs\apk\android-release-unsigned.apk,就像你做的一样。现在它可以正常工作了,谢谢你的帮助 :) - syareen

6

使用keytool、jarsigner和zipalign签署Cordova apk的步骤如下:

1.使用keytool为您的应用程序生成密钥库:

keytool -genkey -v -keystore android.keystore -alias android_app -keyalg RSA -keysize 2048 -validity 10000

2. 接下来使用keytool将证书转换为pkcs12密钥库格式

keytool -importkeystore -srckeystore android.keystore -destkeystore android.keystore -deststoretype pkcs12

它会在项目根目录下创建两个文件,分别为android.keystore(带有pkcs12)android.keystore.old(不带pkcs12)

3. 使用jarsigner签名apk:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore android.keystore app-release-unsigned.apk android_app

第一次出现以下错误:

jarsigner: 无法打开jar文件: app-release-unsigned.apk

然后您只需要将.apk文件从以下路径移动到Project_root_dir/中:

/Project_root_dir/platforms/android/app/build/outputs/apk/release/app-release unsigned.apk

然后再次运行上面的jarsigner命令,它将成功签名apk。

4. 最后验证apk:

zipalign -v 4 app-release-unsigned.apk app-release.apk

您的 apk 已成功签名,您可以在 Play 商店中发布它。
希望这能帮到您。

0

只需使用绝对路径而不是相对路径,如下所示:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myApp.keystore E:\myApp\platforms\android\app\build\outputs\apk\release\app-release-unsigned.apk myApp

0

您需要在项目的根目录下运行所有命令,而且重要的是,在运行$ cordova build --release android之后,您应该将apk文件移动AwesomeProject\platforms\android\app\build\outputs\apk\release以外的项目根目录。


0

跟随@manzapanza所写的,我也不得不从http://dl.dropbox.com/u/34706306/zipalign下载zipalign,将zipalign移动到Android中mv /Users/YOUR_USER_NAME/Downloads/zipalign /Users/YOUR_USER_NAME/Library/Android/sdk/tools给予执行权限:

chmod 777 /Users/YOUR_USER_NAME/Library/Android/sdk/tools/zipalign执行jarsigner命令:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore yourkeystore.jks app-release-unsigned.apk aliayourkeystore


0
请按照以下路径操作,并在其中填写您的密钥存储名称和别名:-
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore salonify-release-key.keystore platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk salonify

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接