如果keytool命令成功,我们还需要做jarsigner吗?

时间:2014-09-24 22:57:32

标签: keytool

我使用CLI创建了一个名为myApp的Cordova应用程序,然后立即运行:

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

我把keystore和apk文件放在同一个文件夹中。当我试图用jarsigner签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myApp.keystore myApp.apk myApp

......我得到了输出:

jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 814 but got 818 bytes)

当我这样做时:

jarsigner -verify -verbose -certs myApp.apk

...输出结束于:

jar verified.

这意味着apk已经签名。在此过程中,将创建“2,048位RSA密钥对和自签名证书(SHA1withRSA),其有效期为10,000天”。 这是否意味着现在的myApp.apk不需要应用单独的jarsigner流程,并且已经为Play商店做好准备(假设它符合所有Google Play规则)?

我对整个过程中的jarsigner部分感到困惑,每次使用它时都会出现崩溃停止。 (“jarsigner部分”我的意思是在keytool代码之后实现 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myApp.keystore myApp.apk myApp 。)

我的开发环境:

  • 最新Mac Mini上的Mac OS X 10.9.5
  • Cordova CLI 3.6.3(cordova,而非phonegap)
  • 不适用于PG Build;没有使用Jquery或其他JS或CSS包
  • 我没有使用Eclipse;我故意学习如何构建一个没有它的签名apk。

问题源于3.6.3版本中存在一个错误,该版本的代码尚未完整记录和实施。提交了有关Jira的错误报告。

1 个答案:

答案 0 :(得分:1)

我假设您正在关注这些instructions。在构建你的apk时你是否在release mode编译,以便生成一个未签名的apk?看到你如何使用jarsigner无法签名,但确认它已经签名,我觉得你的apk可能存在问题。