【问题标题】:Sign Android App Bundle from Command Line从命令行签署 Android App Bundle
【发布时间】:2018-11-06 16:10:37
【问题描述】:

有人知道如何使用命令行中的新密钥库对 .aab 文件进行签名吗? 文档here 提到我们可以使用 jarsigner 从命令行对我们的应用程序包进行签名。但我找不到命令行? 有人知道命令行吗?

将我的捆绑包上传到 Google Play 时出现此错误:

You uploaded an APK with an invalid signature (learn more about signing). Error from apksigner:

我尝试使用以下命令对应用程序包进行签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xample.jks bundle.aab keystoreAlias

非常感谢。

【问题讨论】:

  • 签署 Android App Bundle 确实是使用 jarsigner 完成的,您的命令看起来不错。您是否在 Play 管理中心注册了 Google Play 应用签名
  • @Pierre 嗨,是的,我已经在 Play 管理中心注册了 Google Play 应用签名。实际上,当我直接从 Android Studio 构建 App Bundle(生成签名的应用程序包)时,我可以上传应用程序包。但是,在我的情况下,我必须从 CI 命令手动签署应用程序包。不幸的是,在将 app bundle 上传到 Google Play 时出现了这个错误。
  • @Pierre 哦,你是对的,这是我的错误。如果我构建未签名的应用程序包,我可以签署我的应用程序包。就我而言,我必须重新签署应用程序包。我尝试解压缩包,删除 META-INF 文件夹,压缩回 .aab 文件,然后使用 jarsigner 重新签名。不幸的是,在将捆绑包上传到 Play 管理中心时,我在上面的描述中遇到了错误。你有什么建议吗?非常感谢。
  • 没有什么明显的想法。您可能需要考虑联系 Play 管理中心支持团队,以便他们进行更深入的调查:support.google.com/googleplay/android-developer/?hl=en
  • 嗨@Pierre,感谢您的回复。关于如何使用不同的密钥库退出 android 应用程序包,您有任何链接可以尝试吗?有可能吗?谢谢!

标签: android jarsigner android-app-bundle


【解决方案1】:

您可能已经找到了解决问题的方法。尽管如此,因为它可能在将来对某人有所帮助,所以我只想说我遇到了同样的问题并将散列算法更改为 SHA-256 帮助我克服了它。

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore xample.jks bundle.aab keystoreAlias

【讨论】:

  • 这真的很有帮助
【解决方案2】:

我在另一种情况下遇到了同样的错误(或者可能是相同的)。

我试图重新打包 *.aab 捆绑包并进行一些更改。起初,我使用 zip 或 jar 来创建未签名的存档。之后,我使用jarsigner 工具对其进行了签名。 我发现*.aab不是普通的zip使用bundletool

> java -jar bundletool.jar validate --bundle application.aab

[BT:0.12.0] Error: The App Bundle zip file contains directory zip entry 'base/' which is not allowed.
com.android.tools.build.bundletool.model.exceptions.BundleFileTypesException$DirectoryInBundleException: The App Bundle zip file contains directory zip entry 'base/' which is not allowed.
        at com.android.tools.build.bundletool.validation.BundleZipValidator.validateBundleZipEntry(BundleZipValidator.java:29)
        at com.android.tools.build.bundletool.validation.ValidatorRunner.lambda$validateBundleZipFile$1(ValidatorRunner.java:47)
        at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:406)
        at com.android.tools.build.bundletool.validation.ValidatorRunner.validateBundleZipFile(ValidatorRunner.java:46)
        at com.android.tools.build.bundletool.validation.AppBundleValidator.validateFile(AppBundleValidator.java:92)
        at com.android.tools.build.bundletool.commands.ValidateBundleCommand.execute(ValidateBundleCommand.java:78)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:92)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)

所以我使用该实用程序创建*.aab,然后使用jarsigner 对其进行签名。 您需要将base/* 子文件夹的内容压缩到单独的存档中。

> java -jar bundletool.jar build-bundle --modules base.zip --output application.aab

> jarsigner -keystore $KEYSTORE -storetype $STORETYPE -storepass $STOREPASS -digestalg SHA1 -sigalg SHA256withRSA application.zip $KEYALIAS

> java -jar bundletool.jar validate --bundle application.aab

App Bundle information
------------
Feature modules:
    Feature module: base
            File: assets/META-INF/AIR/application.xml
            ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多