jarsigner:无法签名jar:java.util.zip.ZipException:无效input压缩大小(预计463但得到465字节)
当我签署的apk,我得到“jarsigner:无法签署jar:java.util.zip.ZipException:无效input压缩大小(预计463但得到465字节)”这个错误消息。 apk的大小差不多是1MB。 当我缩小到500KB时,签名成功。 为什么这样?任何想法?
您正在尝试签署已签名的.apk
。 您需要导出一个未签名的.apk
文件,然后用jarsigner
对其进行签名。
你绝对可以使用不同的密钥多次签名一个已经签名的apk :
请注意,您可以使用不同的密钥多次对APK进行签名。
例如,我完成了与释放键签署一个Debug-Apk,以便我能够testing发行版本的升级。 此外,我能够签署一个已经发布的apk与debugging密钥重现错误。
这是你应该做的
- 将
.apk
文件重命名为.zip
- 解压缩
.zip
文件并删除META-INF
文件夹 - 再次压缩文件夹并将其重命名为
.apk
- 签署apk:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore my-release-key.keystore my_application.apk alias_name
对于debugging密钥,别名应该是androiddebugkey
和密码android
。 debugging密钥库是默认的$HOME/.android/debug.keystore
。 另请参阅logindebugging模式 。
这是@ Joerg上面的答案的1class/ 1步版本:
zip -d foo.apk META-INF/\*
它使用zip
命令中内置的“从现有存档中删除”function。 当你运行这个命令时你应该看到:
deleting: META-INF/MANIFEST.MF deleting: META-INF/CERT.SF deleting: META-INF/CERT.RSA
作为输出。 这些文件是现有的签名。 删除它们可以让你再次签名。
我还想重申一下,您应该确保将-sigalg SHA1withRSA
和-digestalg SHA1
parameter passing给jarsigner
以避免此问题: https : //code.google.com/p/android/issues/detail? -digestalg SHA1
= 19567
根据谷歌文件,你可以多次签署一个apk http://developer.android.com/guide/publishing/app-signing.html#signapp 。 如果你无法获得一个未签名的版本,虽然你可以只是膨胀apk然后重新生成它,那么你将能够签署它。
至于我遇到这个错误,当你尝试签署一个zipaligned .apk文件时就会发生这种错误。
看起来像jarsigner无法忍受一些zipalign变化。 这不经常发生。