首页 > 解决方案 > Android:使用带有多证书的 ApkSigner 为 APK 签名

问题描述

问题是我的应用程序 apk 使用 jarsigner 使用 sha1 signer #1 和 sha1 signer #2 签名。意思是同时使用 first-release-key.jks 和 second-release-key.jks 进行多重签名,我现在认为这是错误的。Apk 显示两个证书。现在尝试使用 sha2 signer #1 与 apksigner 签署 apk,然后使用 sha2 signer #2 失败。

https://developer.android.com/studio/command-line/apksigner

通常,您只使用一个签名者对 APK 进行签名。如果您需要使用多个签名者对 APK 进行签名,请使用 --next-signer 选项分隔一组通用选项以应用于每个签名者:

apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk

apksigner sign --ks sample.keystore --ks-key-alias abc --ks-pass pass:xyz --key-pass pass:somepass --next-signer --ks someks.jks --ks-key-alias key0 --ks-pass pass:123456 --key-pass pass:123456 MSIGN.apk

当 --next-signer 与上述一起使用时,apksigner 使用“ SigningCertificateLineage ”时出错

Exception in thread "main" java.lang.IllegalStateException: Multiple signing certificates provided for use with APK Signature Scheme v3 without an accompanying SigningCertificateLineage

源代码:

https://android.googlesource.com/platform/tools/apksig/+/master/src/main/java/com/android/apksig/SigningCertificateLineage.java

在使用 --next-signer 时,任何人都可以帮助在哪里获得 SigningCertificateLineage 和随附的 SigningCertificateLineage,因此 apk 是多重签名的?

谢谢

标签: androidjarsignerandroid-app-signingapksigner

解决方案


找到了解决方案。

1)获取下面的证书沿袭usign。

apksigner rotate --out /path/to/new/file --old-signer \ --ks my.keystore --new-signer --ks mynew.jks

2)使用两个证书密码进行多重签名。

apksigner 签名 --lineage mylineagefile --ks my.keystore --next-signer --ks mynew.jks my.apk

https://android.googlesource.com/platform/tools/apksig/+/refs/heads/master/src/apksigner/java/com/android/apksigner


推荐阅读