jarsigner:无法签名jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465个字节)


78

当我在apk上签名时,我收到“ jarsigner:无法签名jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465个字节)”此错误消息。apk大小几乎为1MB。当我将大小减小到500KB时,签名成功。为什么会这样?..任何想法吗?



5
有时会在您尝试签署调试apk时发生
Midhun KM 2016年

Answers:


105

您正在尝试签署已经签署的.apk。您需要导出未签名的.apk文件,然后使用对其进行签名jarsigner


POM中的错误-实际上该文件已签名两次。
马丁

13
或者,您也可以使用单个命令从现有apk中删除签名。请参阅:stackoverflow.com/a/30722523/117471
Bruno Bronosky

我感到非常失望的是,在给出实际解决方案的两年后,这仍然是公认的答案。
Bruno Bronosky

一样。删除现有签名时,请记住也要从MANIFEST.MF文件中删除签名条目。
KrzysztofJabłoński'18

尽管此答案仍然不错,因为它提供了有关发生原因的信息,这有助于对不同的用例进行故障排除。例如,我的问题出在AppCenter上,它实际上警告我说我正在尝试退出已签名的程序包,因此我必须从build.gradle中删除signingConfig……学习课程之类的东西!
马特·弗莱彻

106

您绝对可以使用不同的密钥多次签署已经签署的apk

请注意,您可以使用不同的键多次对APK进行签名。

例如,我完成了用发行密钥签署Debug-Apk的工作,因此我能够测试发行版本的升级。另外,我还可以使用调试密钥对已经发布的apk进行签名,以重现错误。

这是你应该做的

  1. 将该.apk文件重命名为.zip
  2. 解压缩.zip文件并删除META-INF文件夹
  3. 再次压缩文件夹并将其重命名为 .apk
  4. 签署apk:
    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
              -keystore my-release-key.keystore my_application.apk alias_name

对于调试键,别名应为androiddebugkey和密码android。调试密钥库是默认设置$HOME/.android/debug.keystore。另请参见在调试模式下签名


您可以节省我的一天,也可以节省我的应用程序!每当我尝试导出我的应用程序时,Eclipse崩溃签名或未签名,所以对我来说唯一的方法是命令行,然后出现此错误,只有可行的解决方案!再次感谢
Guillaume12年

@Guillaume,为避免日食崩溃-关闭“自动构建”(Project->自动构建)
Luten

包含签名的CERT.RSA文件存储在建议删除的META-INF文件夹中。实际上,这与删除签名相同。这就是为什么您可以使用调试密钥对其进行签名的原因。因此,这并不意味着您已经使用两个不同的密钥对apk进行了签名。
Rajesh 2014年

我已经成功签署了apk,但是在安装应用程序时出现以下错误:“错误-解析软件包时出现问题”。可能是什么问题,请帮忙..
KK_07k11A0585 2015年

2
记录下来,即使删除了META-INF文件夹,该方法也对我不起作用,我仍然得到ZipException
Sterling Archer

54

这是@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


使用zip -d foo.apk META-INF / *时要小心-它可以删除比所需更多的文件。
Danny Schoemann

@DannySchoemann是什么意思?我在META-INF / gdata / kinds / com.google.schemas.contact.2008和META-INF / services / com.fasterxml.jackson.core.JsonFactory中看到3个文件。那么,如果仅清单文件和证书文件被删除,我会安全吗?
kaay,2016年

@ kaay-看起来不错,但是我不确定,您可能需要尝试删除哪些内容。
Danny Schoemann


3

就我所遇到的错误而言,当您尝试对zipaligned .apk文件进行签名时会发生此错误。
看起来jarsigner无法承受一些zipalign更改。这种情况很少发生。


压缩apk不会阻止对其进行签名。签名后必须再次运行zipalign才能使其恢复对齐状态。
dmdrummond 2014年

3
@dmdrummond它不能阻止,但是应该阻止。对齐修改zip。签名有时无法使用此错误来签名对齐的zip。为什么要投票?
Luten 2014年

您现在已经更改了答案的含义。您先前的回答强烈建议无法对zip对齐文件进行签名。那是不对的。
dmdrummond 2014年

@dmdrummond,不,不是。您可以重新读取预编辑的版本(stackoverflow.com/posts/13026461/revisions
Luten
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.