微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Apksigner 出现“ZIP End of Central Directory 记录未找到”错误

如何解决使用 Apksigner 出现“ZIP End of Central Directory 记录未找到”错误

我正在使用 android 构建工具 (29.0.2) 附带的 apksigner 二进制文件。首先,作为 CI/CD 过程的一部分,我将一个未签名的 apk 文件上传到 Artifactory。在签名阶段,我从 Artifactory 下载了 apk(成功),并尝试使用 apksigner 对文件进行签名:

COMMAND: '/yarrak/sdk/android/build-tools/29.0.2/apksigner' sign --ks /yarrak/tool/gradle/jks/TST.jks --ks-pass "pass:siktasak123" --out /yarrak/var/data/build-dir/MOBO-JOB1/myfile-signed-r.apk /yarrak/var/data/build-dir/MOBO-JOB1/myfile-signed.apk  

注意事项:

  • 我在签名前创建了输出 apk 文件并将文件权限设置为 775
  • 我在 Linux 环境中工作
  • apk 文件从 MacOS 机器上传到 Artifactory

下面的命令抛出错误

线程“main”com.android.apksig.apk.ApkFormatException 中的异常: 格式错误的 APK:不是 ZIP 存档 com.android.apksig.ApkSigner.sign(ApkSigner.java:217) 在 com.android.apksig.ApkSigner.sign(ApkSigner.java:193) 在 com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:340) 在 com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:83) 引起:com.android.apksig.zip.ZipformatException: ZIP End of 在以下位置找不到中央目录记录 com.android.apksig.apk.ApkUtils.findZipSections(ApkUtils.java:57) 在 com.android.apksig.ApkSigner.sign(ApkSigner.java:215) ... 3 更多

可能是什么原因?我认为未签名的 apk 文件在从 MacOS 机器上传到 Artifactory 时可能会以某种方式损坏。

解决方法

我已经解决了这个问题。问题不是由 Artifactory 上传引起的。

在我的开发场景中,除了 .apk 文件之外,一个 .json 文件会在原始文件 (apk) 之后上传,该 .json 文件是一个类似于定义的文件,不包含任何二进制文件猜测。在上传阶段,我错误地命名了两个相同的文件(请注意变量和范围)。当然,在签名阶段,最后一个文件覆盖了我的待签名文件,我的 apksigner 二进制文件无法对伪装成存档文件的 .json 文件进行签名。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。