Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android jarsigner:无法签署jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465字节)_Android - Fatal编程技术网

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

Android jarsigner:无法签署jar:java.util.zip.ZipException:无效的条目压缩大小(预期为463,但得到465字节),android,Android,当我对apk进行签名时,我收到“jarsigner:cannotsignjar:java.util.zip.ZipException:invalid entry compressed size(预期为463,但得到465字节)”这条错误消息。apk的大小几乎是1MB。当我将大小减小到500KB时,签名成功。为什么会这样?。有什么想法吗?您正在尝试对已签名的.apk进行签名。 您需要导出一个未签名的.apk文件,然后使用jarsigner签名。根据谷歌文档,您可以多次签名apk。如果你无法获得一个

当我对apk进行签名时,我收到“jarsigner:cannotsignjar:java.util.zip.ZipException:invalid entry compressed size(预期为463,但得到465字节)”这条错误消息。apk的大小几乎是1MB。当我将大小减小到500KB时,签名成功。为什么会这样?。有什么想法吗?

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

签名。根据谷歌文档,您可以多次签名apk。如果你无法获得一个未签名的构建,尽管你可以将apk充气,然后重新装瓶,你将能够对其进行签名。

你肯定是:

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

例如,我完成了使用发布密钥签署调试Apk,以便能够测试已发布版本的升级。此外,我还能够使用调试密钥对已经发布的apk进行签名,以复制bug

这是你应该做的

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

    对于调试键,别名应该是
    androiddebugkey
    ,密码应该是
    android
    。调试密钥库是默认的
    $HOME/.android/debug.keystore
    。另请参见。

    就我所面临的这个错误而言,它发生在您尝试对zipaligned.apk文件进行签名时。
    看起来jarsigner无法忍受zipalign的一些更改。
    这种情况并不经常发生。

    这是上面@Joerg答案的1行/1步版本:

    zip -d foo.apk META-INF/\*
    
    它使用
    zip
    命令的内置“从现有存档中删除”功能。运行该命令时,您应该看到:

    deleting: META-INF/MANIFEST.MF
    deleting: META-INF/CERT.SF
    deleting: META-INF/CERT.RSA
    
    …作为输出。这些文件是现有的签名。删除它们可以让您再次签名


    我还想重申,您应该确保将带有RSA的
    -sigalg SHA1
    -digestalg SHA1
    参数传递给
    jarsigner
    ,以避免此问题:

    我在签名.aab文件时遇到此问题。删除重复签名(一次作为捆绑的一部分,一次手动)修复了它。这是默认react本机应用程序脚手架的一部分



    app/build.gradle
    文件包括一个部分
    android/buildTypes/release
    ,该部分设置了
    signingConfig
    键。当生成.apk文件时,它似乎被忽略,但当切换到.aab格式时,它看起来确实应用了该签名。当我自己登录CI时,它抱怨说,因为它已经被签名了。

    你帮我省了一天的时间,可能还有我的应用程序!每次我尝试导出我的应用程序时,Eclipse都会崩溃,所以我唯一的办法就是使用命令行,然后我出现了这个错误,这是唯一有效的解决方案!谢谢again@Guillaume,以避免eclipse崩溃-关闭“自动生成”(Project->Build Automatically)保存签名的CERT.RSA文件存储在META-INF文件夹中,建议删除该文件夹。这实际上与删除签名相同。这就是为什么您可以使用调试密钥对其进行签名。因此,这并不意味着您已使用两个不同的密钥对apk进行了签名。我已成功地对apk进行了签名,但在安装应用程序时出现了以下错误“错误-解析包时出现问题”。可能是什么问题请帮助..记录在案,这种方法对我不起作用,即使在删除META-INF文件夹后,我仍然在POM中得到ZipExceptionBug-事实上,该文件已签名两次。或者,您只需使用一个命令即可从现有apk中删除签名。请看:在给出实际解决方案两年后,这仍然是公认的答案,我真的很失望。我也有同样的答案。删除现有签名时,请记住也要从MANIFEST.MF文件中删除签名项。尽管如此,这个答案还是不错的,因为它提供了有关发生原因的信息,这有助于解决不同用例的故障。例如,我的问题是AppCenter,它实际上警告我,我试图放弃一个已签名的包,因此我必须从build.gradle中删除signingConfig。。。马匹是用来上球场的!Zipaligning一个apk并不能阻止它被签名。您必须在签名后再次运行zipalign才能使其返回对齐状态。@dmdrummond它不阻止,但应该阻止。对齐修改拉链。签名有时会因此错误而无法签名。为什么要投否决票?你现在已经改变了答案的含义。您之前的回答强烈建议不可能对zip对齐的文件进行签名。这是不正确的。@dmdrummond,不,不是。您可能会在尝试使用zip-d foo.apk META-INF/*签署调试apkBe时重新阅读preedit版本()-它可以删除比需要更多的文件。@DannySchoemann意味着什么?我在META-INF/gdata/kinds/com.google.schemas.contact.2008和META-INF/services/com.fasterxml.jackson.core.JsonFactory中看到了3个文件。那么,如果只删除清单和证书文件,我会安全吗?@kaay-看起来不错,但我不确定,你可能需要尝试删除哪些文件。我的
    META-INF中有很多
    androidx.
    ,所以一定要逐个删除这3个文件。观察得很好!我在试图通过CI发布捆绑包时遇到了这个问题。非常感谢。