【问题标题】:GooglePlay - wrong signing key for app bundle [duplicate]Google Play - 应用程序包的错误签名密钥[重复]
【发布时间】:2019-06-16 07:28:02
【问题描述】:

我刚刚开始使用 app bundle。我已经在仪表板的App signing 部分设置了两个证书(签名证书和上传证书)。

我已经构建了一个应用包并使用上传证书对其进行了签名,但是当我在Android Instant Apps 下上传包时(这实际上是我切换到应用包的原因)它说:

Your Android App Bundle is signed with the wrong key. Ensure that your app bundle is signed with the correct signing key and try again: xx:xx:xx:xx.....

我已经手动检查了上传密钥库的 SHA-1(在终端中使用 keytool),它与 xx:xx:xx.... 匹配,它在错误消息中显示。

我做错了什么?应用程序包已使用所需的上传证书签名,但 google play 似乎不喜欢它。

想法?

【问题讨论】:

  • 也许您的 app bundle 签名密钥与原始应用签名密钥不同?
  • 是的。我签署的最后一个 apk 是用另一个密钥签署的,但这就是我定义签名和上传密钥库的原因,我有 google 的签名密钥让它在我的地方签署 apk,我正在使用上传密钥对其进行签名并给出它到谷歌。现在..为什么谷歌不喜欢上传密钥库...打败我?!或者这不是它应该工作的方式?
  • 我已经尝试使用原始密钥库对捆绑包进行签名,直到现在我一直将其用于 apk,但它仍然不喜欢它。
  • 好吧,我认为最好的方法是询问 Google Play 支持。据我所知,您需要使用与主 apk 相同的密钥对捆绑包进行签名。
  • 我试过了,还是不接受app bundle...:(

标签: android android-studio google-play


【解决方案1】:

解决方案是一个非常基本的解决方案。我必须清理我的项目,然后重新构建它。

Android Studio 正在使用我正在使用的旧证书签署我的应用程序包。

我之前做的是转到Build -> Generate Signed Bundle / APK,我将文件选择器中的jks文件更改为新的上传jks。即使我选择了一个新的,Android Studio 似乎也会缓存旧的证书路径并使用它。可能是 AS 中的错误。

所以是的......现在如果我每次更改它工作的 jks 文件时清理项目,apk 或应用程序包都会使用正确的证书签名......

【讨论】:

  • 我的话!多谢 !我用 web-storm gradlew bundleRelease 反应本机但没有成功,然后使用 android studio 这对我来说很好用!
  • 不,这对我不起作用。上周我上传没问题。昨天做了一个小错误修复,根本没有其他更改,谷歌说“你的 Android App Bundle 是用错误的密钥签名的”。没有通知,也没有来自他们的电子邮件表明发生了变化。
  • 这也适用于 Flutter 框架。运行 flutter clean 然后重建应用程序包解决了这个问题。
【解决方案2】:

我尝试在此处和 this question 中使用多个答案,但不知何故我收到了此错误,因为我的 android/app/build.gradleandroid/gradle.properties 文件存在一些问题。

您应该检查的两件事(除了这里的其他解决方案)是:

  1. android/gradle.propertiesandroid/app/build.gradle 中,确保您的keystore 变量完全匹配。
    • android/gradle.properties,你可能有这样的东西:
      MYAPP_RELEASE_STORE_FILE=<>
      MYAPP_RELEASE_KEY_ALIAS=<>
      MYAPP_RELEASE_STORE_PASSWORD=<>
      MYAPP_RELEASE_KEY_PASSWORD=<>
      
    • 确保这些变量名称完全android/app/build.gradle 中的名称匹配:
      android {
          ...
          signingConfigs {
              release {
                  if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                      storeFile file(MYAPP_RELEASE_STORE_FILE)
                      storePassword MYAPP_RELEASE_STORE_PASSWORD
                      keyAlias MYAPP_RELEASE_KEY_ALIAS
                      keyPassword MYAPP_RELEASE_KEY_PASSWORD
                  }
              }
          }
      }
      
  2. android/app/build.gradle 中,确保在release buildTypes 中将signingConfig 设置为signingConfigs.release
    android {
        ...
        buildTypes {
            debug ...
            release {
                signingConfig signingConfigs.release
            }
        }
    }
    

注意:如果您正在进行react-native 开发并发现自己在这里,请确保您遵循"Publishing to Google Play Store" 上的所有步骤。我以为我可以跳过几个步骤而不会引起问题,结果导致调试数小时

【讨论】:

    【解决方案3】:

    我看到有答案,但在我的情况下,我忘了删除

    debuggable = true
    

    来自应用程序 build.gradle

    【讨论】:

      【解决方案4】:

      在我的情况下,问题是 Android 应用程序包,我忘记为项目增加 versionCode 并且它没有在控制台上显示该错误。相反,它显示了与证书 SHA 相关的错误。

      【讨论】:

      • 这解决了我从 Unity 构建的问题。不仅更新“Bundle Version Code”,而且“Version”也帮助解决了这个问题。
      • 我没有忘记更改版本代码,但我做了第二次并且能够上传。支持这个解决方案,并为这种令人难以置信的误导性错误消息而该死的谷歌。
      【解决方案5】:

      经过一番搜索,我发现我的testCoverageEnabled true构建类型中不小心出现了testCoverageEnabled true

      release {
          testCoverageEnabled true
          ...
      }
      

      这将使 APK/App Bundle可调试,Google Play 管理中心会认为它未签名。删除它解决了这个问题。

      【讨论】:

      • 谢谢!它有帮助。为什么谷歌不发布任何关于此的文档?您为我节省了数小时的搜索时间!
      【解决方案6】:

      App bundle 只是使用与 jarsigner 相同的格式进行签名。因此,您可以自己检查应用程序包签名的证书哈希。例如,在 linux 上:

      zipinfo -1 ${APK?} \
          | grep -E "META-INF/.*(RSA|DSA|EC)$" \
          | xargs -I{} unzip -p ${APK?} {} \
          | keytool -printcert
      

      如果此输出显示的签名与正确的签名密钥匹配,则表明 Play 商店存在错误,您应该升级到 Play 管理中心支持。这可在 Play 管理中心的帮助菜单中找到。

      另一方面,如果证书不匹配,那么即使您认为自己使用正确的密钥库/密钥进行签名,您也做错了,并且应用程序包未使用正确的上传证书进行签名。

      【讨论】:

        【解决方案7】:

        我遇到这个错误是因为:-

        1. 我创建了一个用于测试的新密钥,然后生成了一个 app bundles/apk
        2. 那个 apk/app 包有一些错误,所以在再次解决该错误后,我创建了一个新密钥并创建了一个全新的应用包/apk,其中发生了这个错误

        因此,如果您做了类似的事情,那么请尝试在具有相同密码和相同密钥别名的密钥存储路径中提供 使用项目制作的第一个密钥的路径

        这将起作用,因为我们只能为项目生成一个密钥,该密钥是生成的第一个密钥。每次当你想为你的应用程序制作一个 apk/app 包以用于发布/更新时,你必须提供相同的密钥和密码,因此强烈建议将密钥存储在安全的地方

        注意:- 在某些情况下(如果您已经尝试过多次失败),在这种情况下,在构建中,您可能会在 Play 商店控制台上遇到类似“您已经有一个具有相同版本”的错误.gradle 文件只需将 versionCode 和 versionName no 加一并重新生成 apk/app 包

        【讨论】:

          【解决方案8】:

          就我而言,我上传了错误的同名应用程序。只需确保您上传的 applicationId 与上一个相同。

          【讨论】:

            【解决方案9】:

            对我来说,问题在于,在我的 google play 控制台中,我已经选择了玩应用签名,所以当我第一次上传 aab 时,google 注册并签署了我的应用以供后续发布。这意味着如果我上传另一个 aab,签名证书将与谷歌签名的证书不同。

            我需要删除这个,所以我上传了另一个 aab。除此之外,我必须点击我的个人资料并选择管理开发者帐户。我看到我的 aab google 的草稿已经签名,我删除了这个,以便我可以生成并重新上传另一个。

            当我删除它时,我从我的 android 工作室生成了另一个 aab 并将其再次上传到我的谷歌播放控制台。这一次,它没有给我错误签名密钥的警告

            【讨论】:

              【解决方案10】:

              发生了一些事情改变了您的应用正在使用的密钥库!我只是建议最常见的事情。另一种可能性是有人运行 expo build:android -c 或 expo build:android --clear-credentials 或运行 expo credentials 并删除了密钥库。

              如果不是其中之一,那么剩下的唯一可能性是谷歌更改了上传密钥库(极不可能)或在 expo 服务器上我们更改了您的密钥库而您没有请求它(没有发生这种情况的已知实例,极不可能)。

              您可以通过查找您在 expo.io 上提交到商店的最新版本并验证用户名和 slug 是否符合您的预期,来验证您是否使用了相同的用户名和 slug。

              如果这对您没有任何有用的结果,那么您可以要求 google play 重置您的上传密钥库 - android - Lost keystore file for an app (but have Google Play App Signing enabled)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-11-09
                • 2021-03-19
                • 2021-06-22
                • 2022-12-05
                • 2018-07-29
                • 1970-01-01
                • 1970-01-01
                • 2017-12-01
                相关资源
                最近更新 更多