当我在apk上签名时,我收到“ jarsigner:无法签名jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465个字节)”此错误消息。apk大小几乎为1MB。当我将大小减小到500KB时,签名成功。为什么会这样?..任何想法吗?
当我在apk上签名时,我收到“ jarsigner:无法签名jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465个字节)”此错误消息。apk大小几乎为1MB。当我将大小减小到500KB时,签名成功。为什么会这样?..任何想法吗?
Answers:
您正在尝试签署已经签署的.apk。您需要导出未签名的.apk文件,然后使用对其进行签名jarsigner。
请注意,您可以使用不同的键多次对APK进行签名。
例如,我完成了用发行密钥签署Debug-Apk的工作,因此我能够测试发行版本的升级。另外,我还可以使用调试密钥对已经发布的apk进行签名,以重现错误。
这是你应该做的
.apk文件重命名为.zip.zip文件并删除META-INF文件夹.apk jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
-keystore my-release-key.keystore my_application.apk alias_name
对于调试键,别名应为androiddebugkey和密码android。调试密钥库是默认设置$HOME/.android/debug.keystore。另请参见在调试模式下签名。
这是@Joerg上面答案的1 Liner / 1 Step版本:
zip -d foo.apk META-INF/\*
该命令使用了内置的“从现有存档中删除”功能zip。运行该命令时,您应该看到:
deleting: META-INF/MANIFEST.MF
deleting: META-INF/CERT.SF
deleting: META-INF/CERT.RSA
...作为输出。这些文件是现有签名。删除它们可让您再次签名。
我还想重申一下,您应该确保将-sigalg SHA1withRSA和-digestalg SHA1参数传递给,jarsigner以避免出现此问题:https : //code.google.com/p/android/issues/detail?id=19567
根据google的文档,您可以http://developer.android.com/guide/publishing/app-signing.html#signapp多次对apk进行签名。如果您无法获得未签名的版本,尽管可以将apk充气然后重新打包,则可以对其进行签名。
就我所遇到的错误而言,当您尝试对zipaligned .apk文件进行签名时会发生此错误。
看起来jarsigner无法承受一些zipalign更改。这种情况很少发生。