上传Android应用程序包至Google Play控制台 - 密钥签名错误

75
我正在尝试上传一个全新的.aab文件到Google Play控制台,但一直收到以下错误提示:
“上传失败 您上传了一个APK或已使用用于为用户交付的APK签署的密钥签署的Android App Bundle。由于您已经注册了Google Play的应用签名,因此在上传之前,您应该使用新密钥签署APK或Android App Bundle。”
我完全被难住了,因为我在生成应用程序包时即通过Android Studio中的Build > Generate Signed Bundle / APK... 菜单项生成了一个全新的密钥,也就是说这是一个全新的密钥,未被其他应用程序使用过。
我甚至尝试创建一个崭新的密钥库并添加一个新的密钥,但始终收到相同的错误。这是别人遇到的某些怪癖吗?
当我为此应用程序注册Google Play的应用签名时,我选择了“让Google管理和保护您的应用签名密钥(推荐)”选项,并且根据我阅读的所有文档,您用于首次签署应用程序的密钥成为“上传密钥”,因此我似乎一切都做得正确,但没有成功。
有人有什么建议或过去的经验吗?
20个回答

140

我遇到了相同的问题,在我的情况下,signingConfig已经设置好了,我只犯了一个简单的错误,就是忘记将应用程序的debuggable属性更改为false。所以,即使我从菜单或gradle命令中生成了构建,构建也成功生成,但它仍然是可调试的,因此Play商店不接受已签名的apk文件,并给出了如下信息:上传失败,Android捆绑包未签名


3
我也遇到了这个问题,我在android>app>build.gradle>{buildType{release{ signingConfig signingConfigs.release }}}中添加了这一行代码:signingConfig signingConfigs.release - Zeeshan Ali
3
对于我的情况来说是正确的,我忘记在我的应用程序级别的Gradle文件中将buildTypes下的release的debuggable设置为false。 - Mihae Kheel
1
哇...我一直在与这个问题斗争!非常感谢,将debuggable设置为false解决了它。 - Michael Norgren
在我的情况下,我的build.gradle文件中根本没有设置debuggable(不是true或false,该属性不存在)。我甚至没有buildTypes或release属性。你有什么想法为什么会这样? - connected_user
创建“新密钥库”,签署您的apk/app捆绑包并上传它。 - Ashwin H
如果您的Gradle文件是Kotlin脚本(.kts),则语法为 isDebuggable = false - Gad Wissberg

44

build.gradle文件中确保将应用程序的debuggable属性设置为false

输入图像描述


1
想知道为什么Android Studio没有因为这个而显示任何警告... - manuelpgs

22

经过大量的喊叫和抗议,包括通过聊天联系 Google Play Console 支持(他们只是一级支持,所以……没有多少帮助),以及通过电子邮件联系(他们将我放在了太难的篮子里,并表示他们无法为应用程序开发提供支持--什么?问题与上传应用程序到 Play Console 有关,而不是应用程序开发!),我发现了这个自问自答的问题 https://dev59.com/eVQJ5IYBdhLWcg3wNjK4#54359729

基本上,确保每当在 Android Studio 中进行任何与签名有关的操作时,都要执行“清理并重建项目”。由于某种原因,它认为我的新应用程序正在使用我的旧应用程序的密钥,并继续使用该密钥进行签名。(我想解决方案终究还是与应用程序开发有关!)


2
谢谢,我遇到了同样的问题,只需执行项目->清理,然后创建一个新的签名包,上传到商店,就没有问题了!Gradle缓存是一件奇怪的事情。 - abdu
如果我们最近使用的密钥与之前的不同,该怎么办?如何切换到新的密钥? - gumuruh

14

通过Android Studio的“Build > Generate Signed Bundle / APK…”菜单项创建的密钥是全新的,并且未被其他应用程序使用。

并不是这样。Android Studio使用的密钥库与Android SDK安装相关联,因此从你的Studio创建的所有应用程序都使用相同的密钥进行签名。

实际发生的情况是,您必须已经创建了另一个应用程序,使用该密钥库对其进行了签名,并将其上传到Play Console中,从而使它成为用于向最终用户提供APK的密钥。同时,您创建了另一个已在Play签名中注册的应用程序:对于此应用程序,上传证书是从您上传的第一个APK中提取的。由于您也使用了Studio对该APK进行签名,因此使用了相同的密钥库。Play检测到这两个应用程序使用了相同的证书,并且由于您将同一密钥用于两个不同的目的(第一个应用程序的应用签名密钥和第二个应用程序的上传密钥),因此Play拒绝了它。原因是应用签名密钥比上传密钥更重要(后者可以重置,而前者无法),因此您不应将它们用于两个不同的目的。

换句话说,在为已在Play Signing中注册的应用程序签名时,您需要创建一个不同的密钥库(最好为每个应用程序创建一个),并确保从未将该密钥库用作另一个应用程序的应用签名密钥。


换句话说,您需要创建一个不同的密钥库来签署已注册Play Signing的应用程序(最好每个应用程序一个),并确保您从未将该密钥库用作另一个应用程序的应用程序签名密钥。 这就是我所说的“我甚至尝试创建一个带有新密钥的全新密钥库,但始终收到相同的错误消息”的意思。全新的密钥库,全新的密钥,甚至没有接近过另一个应用程序。 仍然出现相同的错误。 - jaseelder
1
我可能错了,但我相当确定问题出在你这边:你要么没有真正创建一个新的密钥库,要么没有上传使用新密钥库签名的APK。如果你坚信是Play Console中存在漏洞,请联系他们的支持团队(https://support.google.com/googleplay/android-developer/?hl=en-GB#topic=3450769&contact=1--他们甚至有在线聊天),他们可以更详细地研究特定情况。 - Pierre
我确认Pierre是正确的,它通过使用一个其他应用程序未使用的新密钥来工作。您还可以在同一密钥库中创建一个新别名,以避免创建另一个密钥。 - Alex

10

我在我们的应用程序中遇到了这个错误。我们为所有应用使用相同的上传密钥。

因此,当你创建一个新应用时,请确保选择选项 使用已签名应用的现有密钥,而不是 (谷歌推荐) 选项,即向他们发送一个唯一的上传密钥。

真正让人恼火的是,这个选项只能选择一次,所以我们不得不删除我们的应用程序并重新创建它。


8
对我而言,解决方案是改变构建变体

简要回顾一下,当我尝试将已签名的.aab捆绑文件上传到Google Play开发者控制台时,收到了这个错误Android应用程序包未签名。

请记住,这个错误很模糊,并且可能由许多问题引起,如此页面上其他答案所示。 我最初使用了release构建变量上传我的应用程序。 忘记了最初使用了哪个变量,我尝试上传debug构建变量并得到了这个错误。 我的解决方法:上传与原始构建变体相同的构建变体。 他们必须匹配!

你的调试版本和发布版本有什么不同?是什么原因导致你的发布版本无法工作? - BabyishTank
1
谷歌希望新版本能够替换掉旧版本,且变体相同。@BabyishTank - heiligbasil
2
谢谢,那也是我的问题。这个错误信息非常误导人。我向谷歌发送了反馈。 - Zwyx
@Zwyx 是的,我完全同意。如果 Google 的错误提示能更具体一些,那么我们就能更快地发现错误的根源。 - heiligbasil

6
以下解决方案对我有效。将以下两行添加到您的gradle文件中。
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        **signingConfig
        debuggable = false**
    }

4

尝试从控制台中删除有关新应用程序的所有内容,然后通过生成新密钥并使用新密钥重建应用程序来开始。然后您可以重新上传新的apk文件。


4

在我的情况下,我有

debuggable true

正确的值是false

buildTypes
     {
         release {

这在哪里?是哪个文件? - Kalnode

2

另一种可能是在应用的build.gradle文件中设置了signingConfig。当你创建一个bundle时,无论你在签名部分指定什么 - 即使你创建一个新的或选择其他keystore - 它都将使用gradle文件中指定的那个。

原始答案:最初的回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接