"ZIP End of Central Directory record not found" 使用 Apksigner 时出错

"ZIP End of Central Directory record not found" error using Apksigner

我正在使用 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  

需要提及的事情:

以下命令抛出错误:

Exception in thread "main" com.android.apksig.apk.ApkFormatException: Malformed APK: not a ZIP archive at com.android.apksig.ApkSigner.sign(ApkSigner.java:217) at com.android.apksig.ApkSigner.sign(ApkSigner.java:193) at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:340) at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:83) Caused by: com.android.apksig.zip.ZipFormatException: ZIP End of Central Directory record not found at com.android.apksig.apk.ApkUtils.findZipSections(ApkUtils.java:57) at com.android.apksig.ApkSigner.sign(ApkSigner.java:215) ... 3 more

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

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

在我的开发场景中,除了.apk文件之外,一个.json文件紧跟在原始文件(apk)之后,并且那个.json文件是一个类似定义的文件文件并且不包含您可能猜到的任何二进制文件。在上传阶段,我错误地将两个文件命名为相同(注意变量和范围)。当然,在签名阶段,最后一个文件会覆盖我的待签名文件,而我的 apksigner 二进制文件无法签署伪装成存档文件的 .json 文件。