当我签署apk时,我得到“jarsigner:无法签署jar:java.util.zip.ZipException:无效的条目压缩大小(预期463但得到465字节)”此错误消息。 apk大小差不多是1MB。当我将大小减小到500KB时,签名成功。为什么这样呢?..任何想法?
答案 0 :(得分:104)
你肯定是able to sign an already signed apk multiple times using different keys:
请注意,您可以使用不同的密钥对APK进行多次签名。
E.g。我完成了使用发布密钥签署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
。另请参阅Signing in Debug Mode。
答案 1 :(得分:94)
您正在尝试签署已签名的.apk
。
您需要导出未签名的.apk
文件,然后使用jarsigner
进行签名。
答案 2 :(得分:49)
这是@ 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
答案 3 :(得分:4)
我在签署我的 .aab 文件时遇到了这个问题。删除重复签名(一次作为捆绑的一部分,一次手动)修复了它。这是默认的 react-native 应用脚手架的一部分。
app/build.gradle
文件包含一个 android/buildTypes/release
部分,该部分设置了 signingConfig
键。生成 .apk 文件时,它似乎被忽略了,但是当切换到 .aab 格式时,它看起来确实应用了该签名。当我在 CI 中进行自己的签名时,它抱怨说它已经被签名了。
答案 4 :(得分:3)
根据googles文档,您可以多次签署apk http://developer.android.com/guide/publishing/app-signing.html#signapp。如果你无法获得一个未签名的版本,虽然你可以通过膨胀apk然后重新加入它,然后你就可以签名了。
答案 5 :(得分:3)
就我遇到此错误而言,当您尝试签署zipaligned .apk文件时会发生此错误 看起来像jarsigner不能忍受一些zipalign的变化。 这种情况不会经常发生。