谷歌Play控制台Play应用签名 - Android应用包未签名。

8
我正在尝试创建一个Play商店版本。我完全按照指南生成了上传密钥和密钥库:https://developer.android.com/studio/publish/app-signing#generate-key。然后,我使用上传密钥生成了我的应用程序的签名应用程序包,就像这里所述一样:https://developer.android.com/studio/publish/app-signing#sign_release。这导致了一个名为app-release.aab的文件。现在,因为这个应用程序是全新的,以前从未发布过,所以没有必要导出加密密钥并“将现有应用程序加入Play应用程序签名”,因为当我在Play控制台中创建新的应用程序列表时,我已经选择了此选项,并且当然,我以前从未上传过使用其他密钥签名的APK文件到此应用程序列表。接下来,我进入Play控制台并创建一个新的生产版本。但是,当我上传app-release.aab文件时,我看到以下错误消息:

"Android应用捆绑包未签名。"

这完全令人困惑。

据我所知,我已经严格按照指示进行操作,并尝试在谷歌上进行一些研究,但我找不到答案。

有没有经验的人可以帮助我?

编辑:

我没有理解整个过程中的内容,我被要求在本地生成上传密钥,但实际上从来没有将密钥上传到谷歌播放控制台 - 如果他们从未见过上传密钥,那么谷歌如何知道应用程序是使用上传密钥签名的? 但是,在生成上传密钥的文档中,没有说明我应该对本地生成的密钥做任何事情,除了在本地使用它来生成已签名的应用程序捆绑包,这正是我所做的。

编辑2:

以下是显示我正在遵循的过程以创建上传密钥并使用上传密钥生成我的应用程序的已签名捆绑包的屏幕截图:

Generating the keystore

Generating the signed app bundle part 1

Generating the signed app bundle part 2

Successfull generation of signed app bundle

Resultant aab file

然后,有点奇怪的是,在包所在目录中运行 keytool -printcert -jarfile app-release.aab 的结果:

Not a signed jar file

4个回答

4
我尝试构建一个设置为'debuggable true'的发布包上传到我的测试通道,以调试发布密钥哈希,并遇到了这个问题。我以为我在使用keytool和openssl获取密钥哈希时搞砸了什么,比如我改变了某些东西导致它停止工作,但实际上只是因为我在build.gradle buildTypes中使发布版本可调试。如果有人遇到同样的问题,请注意这个有用的想法。

3

您可以通过本地运行以下命令之一来验证上传到Play的应用程序包是否已签名:

使用jarsigner:

jarsigner -verify app.aab

使用keytool:

keytool -list -printcert -jarfile app.aab

如果文件显示为“已验证”(或者使用keytool时看到证书被打印出来),则您的AAB文件确实已签名。如果是这样,请确保将正确的文件上传到Play控制台,如果仍然无法正常工作,请联系开发者支持。
如果文件显示为“未验证/未签名”,则请确保在Android Studio中生成签名包时选择了密钥库,并确保构建成功。
如果所有其他方法都失败,请执行完整的“清理项目”操作,然后再试一次。
“Google如何知道应用程序使用上传密钥进行签名,如果他们从未见过上传密钥?”谷歌只需从您上传的第一个APK或AAB文件中提取证书,并将其视为上传证书。每个后续上传都必须使用相同的密钥进行签名,但第一个可以使用任何密钥进行签名。

谢谢测试技巧,我现在去尝试一下。最后一段话很有道理,我猜它就是这么工作的。 - Thomas Cook
2
哇,当我对生成的文件运行此命令时,确实会显示“不是签名的JAR文件”。然而,我百分之百确定我正在正确地生成签名包。我将上传截图到原始问题中,以展示我如何生成签名包并定位输出的构件。 - Thomas Cook
如果你有时间,Pierre,请查看我在更新的原帖中的截图? - Thomas Cook
1
@ThomasCook 我最近遇到了一个构建已签名APK的问题(在这里有记录:https://dev59.com/Hrr4oIgBc1ULPQZFd7_z#72176588),与此非常相似,但我(两年前)已经生成了一个JKS文件,现在它却说无法使用。 - raddevus
1
@raddevus - 这“有点像”我遇到的问题!我生成了一个新的JKS文件,并在尝试生成签名AAB时将AS指向它,它会“成功”并输出未签名的AAB。经过长时间的折磨,我发现实际的build.gradle文件仍然指向旧的JKS(已不存在...)。我更改了build.gradle文件以指向新的JKS,然后它就可以工作了。因此,似乎是AS的错误,默默地吞噬错误? - Thomas Cook
显示剩余2条评论

-1

在签名之前,我不得不重新构建项目。


-1

我之前也遇到过类似的问题。

通过在我的.jks文件上运行以下命令,然后再通过Android Studio重新生成签名应用程序包,我成功地解决了问题(尽管我不知道为什么)。

$ keytool -list -keystore 'fakeNmae.jks' -storepass fake-password-same-one-i-used-in-android-studio

使用与您看到的完全相同的命令,除了将上面的.jks文件名替换为您自己的名称(确保它在单引号之间),然后在-storepass命令之后添加密码。

希望对您有所帮助。

这是我在SO上发布关于该问题的条目


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