如何启用 Google Play 应用签名

Posted

技术标签:

【中文标题】如何启用 Google Play 应用签名【英文标题】:How to enable Google Play App Signing 【发布时间】:2017-05-22 00:17:40 【问题描述】:

我认为很多开发者都在尝试更多地了解在 Google I/O 2017 上展示的新的 Google Play 应用签名功能。

存储密钥库以对 Google Play 内的应用程序进行签名的能力可以节省您安全存储密钥库的工作量,并且可以帮助系统根据硬件和操作系统特性优化为每台设备提供的 APK。

您可以在此处的官方文档中阅读有关此主题的更多信息:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing。

通过以下答案,我将更好地解释上传原始密钥库所需遵循的步骤以及如何创建新的上传密钥库,从此时起您需要签署您的 APK。

【问题讨论】:

【参考方案1】:

在继续观看此 Android 开发者视频以了解您的应用签名注册选择的含义之前: https://youtu.be/odv_1fxt9BI

本指南面向已在 Play 商店中拥有应用程序的开发人员。如果您是从一个新应用开始,这个过程会容易得多,您可以遵循here

的“新应用”段落的指导方针

99% 的开发者已经具备的先决条件

    Android Studio

    JDK 8 安装后,您需要在用户空间中设置环境变量以简化终端命令。在 Windows x64 中,您需要将 C:\Program Files\Java\JDK_VERSION\bin 添加到 Path 环境变量中。 (如果您不知道如何操作,可以阅读我的add a folder to the Windows 10 Path environment variable 指南)。

第 0 步:打开 Google Play 开发者控制台,然后转到发布管理 -> 应用签名

接受应用签名服务条款。

第 1 步:点击与下图相同的按钮下载 PEPK 工具

第 2 步:打开终端并输入:

java -jar PATH_TO_PEPK --keystore=PATH_TO_KEYSTORE --alias=ALIAS_YOU_USE_TO_SIGN_APK --output=PATH_TO_OUTPUT_FILE --encryptionkey=GOOGLE_ENCRYPTION_KEY

传说:

PATH_TO_PEPK = 您在步骤 1 中下载的 pepk.jar 的路径,对于 Windows 用户,可能类似于 C:\Users\YourName\Downloads\pepk.jarPATH_TO_KEYSTORE = 用于签署发行版 APK 的密钥库的路径。可以是 *.keystore 或 *.jks 类型的文件或不带扩展名的文件。 C:\Android\mykeystoreC:\Android\mykeystore.keystore 之类的... ALIAS_YOU_USE_TO_SIGN_APK = 您用于签署发行版 APK 的别名。 PATH_TO_OUTPUT_FILE = 扩展名为 .pem 的输出文件的路径,类似于 C:\Android\private_key.pem GOOGLE_ENCRYPTION_KEY = 此加密密钥应始终相同。您可以在 App Signing 页面中找到它,复制并粘贴它。应该是这种形式:eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a

例子:

java -jar "C:\Users\YourName\Downloads\pepk.jar" --keystore="C:\Android\mykeystore" --alias = myalias --output = “C:\的Android \ private_key.pem” --encryptionkey = eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a P>

按Enter,您需要按顺序提供:

    密钥库密码 别名密码

如果一切正常,您现在将在 PATH_TO_OUTPUT_FILE 文件夹中有一个名为 private_key.pem 的文件。

第 3 步:点击与下图相同的按钮上传 private_key.pem 文件

第 4 步:使用 Android Studio 创建一个新的密钥库文件。

您未来将需要此密钥库来签署 您的应用程序,不要忘记密码

打开您的一个 Android 项目(随机选择一个)。转到 Build -> Generate Signed APK 并按 Create new

现在您应该填写必填字段。

密钥库路径代表您将创建的新密钥库,使用右侧的 3 个点图标选择文件夹和名称,我选择了C:\Android\upload_key.jks(将自动添加.jks 扩展名)

注意:我使用upload 作为新的别名,但如果您之前使用具有不同别名的相同密钥库来签署不同的应用程序,您应该选择之前在原始密钥库中使用的相同别名。

完成后按 OK,现在您将拥有一个新的 upload_key.jks 密钥库。您现在可以关闭 Android Studio。

第 5 步:我们需要从新创建的upload_key.jks 密钥库中提取上传证书。 打开终端并输入:

keytool -export -rfc -keystore UPLOAD_KEYSTORE_PATH -alias UPLOAD_KEYSTORE_ALIAS -file PATH_TO_OUTPUT_FILE

传说:

UPLOAD_KEYSTORE_PATH = 您刚刚创建的上传密钥库的路径。在这种情况下是C:\Android\upload_key.jksUPLOAD_KEYSTORE_ALIAS = 与上传密钥库关联的新别名。在这种情况下是uploadPATH_TO_OUTPUT_FILE = 带有 .pem 扩展名的输出文件的路径。类似C:\Android\upload_key_public_certificate.pem

例子:

keytool -export -rfc -keystore "C:\Android\upload_key.jks" -alias upload -file "C:\Android\upload_key_public_certificate.pem"

按 Enter 键,您需要提供密钥库密码。

现在,如果一切正常,您将在文件夹 PATH_TO_OUTPUT_FILE 中有一个名为 upload_key_public_certificate.pem 的文件。

第6步:点击与下图相同的按钮上传upload_key_public_certificate.pem文件

第 7 步:点击应用签名页面末尾的 ENROLL 按钮。

现在,每个新发布的 APK 都必须使用 步骤 4 中创建的 upload_key.jks 密钥库和别名进行签名,然后才能上传到 Google Play 开发者控制台。

更多资源:

Google documentation on Google Play App Signing Form to request the reset of your upload keystore if you lose it

问答

问:当我上传使用新的 upload_key 密钥库签名的 APK 时,Google Play 显示如下错误:您上传了未签名的 APK。您需要创建一个签名的 APK

答:在构建发布版 APK 时,检查以使用两个签名(V1 和 V2)对 APK 进行签名。阅读here了解更多详情。

更新

第 4、5、6 步是创建上传密钥,对于现有应用程序是可选的

“上传密钥(现有应用可选):您在注册该计划期间生成的新密钥。您将使用上传密钥签署所有未来的 APK,然后再将其上传到 Play 管理中心。” https://support.google.com/googleplay/android-developer/answer/7384423

【讨论】:

您的演练非常有帮助!他们应该把它放在官方网站上大声笑您的示例的路径名缺少“_”引号,这将在 W10 控制台上引发错误 仅当路径中至少有一个空格时才需要引号,但这是每个控制台命令的工作方式。因此,如果您的路径是:"C:\My Path\MyName",则必须使用引号,但如果路径是 C:\MyPath\MyName,则不需要。顺便说一句谢谢:) @layth 创建新的密钥库是指南的Step 4 :D @NukeouT 不,您不需要第 4 步中的旧密钥库和密码。您只需单击Create New,就会出现新的密钥库提示。我已经更新了文档以使这一步更加清晰,即使我认为它已经是 Google 好像改变了程序,因为我再也找不到 PEPK 工具了。【参考方案2】:

有一个更简单的解决方案,需要一分钟。

    在 google play 控制台中,选择 发布管理 -> 应用签名 选择第一个选项,即使用 Android Studio 生成加密私钥的选项(或类似的;我不能再回头查看该页面了) 在 Android Studio 中,从 Build -> Generate Signed Bundle / APK... 生成您的 Android App Bundle(.aab 文件),选择 Android App Bundle 选项,不要忘记选中 Export Encrypted key(需要注册您的应用 Google Play 应用签名) 选项。如果您没有生成密钥库,请临时生成一个。 现在是“棘手”部分。生成 .aab 后,Android Studio 会在右下角弹出一个通知,其中包含 .aab 文件保存位置的路径。在同一个通知中,如果您将其展开,您会发现另一个指向保存私钥的路径的链接(称为 private_key.pepk)。如果您错过了此通知,请不要担心,只需单击右下角的 Event Log 按钮打开 Event Log 窗口,您就会发现相同的信息。打开那个位置。对我来说是 C:\Users\yourUser\.android

    返回浏览器并按 APP SIGNING PRIVATE KEY 按钮并浏览到您计算机上的私钥位置。

完成!

现在您可以上传之前生成的版本了 :) 祝你好运!

【讨论】:

我没有收到此选项导出加密密钥(需要注册您的应用 Google Play 应用签名)选项。 我非常感谢对第 5 点的更全面的解释 - 我没有看到这个按钮,它在哪里,也许布局在最近的更新中发生了变化? 好的,现在我想在下一次更新时对此感到好奇,该怎么办??比如我们再次需要 .pepk 密钥,或者我们必须使用相同的密钥或新的私有 .pepk 密钥签署版本 2 请帮助 目前,Google Play 控制台中没有这样的按钮......他们有“应用程序完整性”菜单,没有上传新密钥的选项......【参考方案3】:

在将 Android 应用程序包文件 (APK) 迁移到 Android App Bundle (AAB) 时,将应用程序发布到 Play 商店时我遇到了这个问题,并得到了如下解决...

在构建 .aab 文件时,系统会提示您输入存储密钥导出路径的位置,如下所示:

在第二张图片中,您可以找到我们的 .pepk 在生成 .aab 文件时将存储在特定文件夹中的加密密钥导出路径位置。

使用 Play 商店凭据登录 Google Play 控制台后: 从左侧选择您的项目 选择 App Signing 选项 Release Management>>App Signing

您会发现 Google App Signing Certification 窗口接受它。

之后你会发现三个单选按钮选择 **

上传从 Android Studio 单选按钮导出的密钥

**,它会扩展你 APP SIGNING PRIVATE KEY按钮如下

点击按钮并选择.pepk文件(我们在生成.aab文件时存储如上)

阅读所有其他选项并提交。

成功后,您可以返回应用发布并浏览 .aab 文件并完成 RollOut...

@Ambilpura

【讨论】:

好的,现在我想在下一次更新时对此感到好奇,该怎么办??比如我们再次需要 .pepk 密钥,或者我们必须使用相同的密钥或新的私有 .pepk 密钥签署版本 2 请帮助 根据我的理解,下次不需要创建,你可以使用旧的.pepk密钥.... 如何使用 .pepk 进行更新?我在上传我的应用程序时成功使用了谷歌应用程序签名,但现在我试图推送更新并且不知道如何@AmbilpuraSunilKumar 这里也一样。我只是将 abb 上传到 play 商店并完全忽略 .pepk 文件。很高兴知道它到底有什么好处以及在更新应用程序时要做什么。【参考方案4】:

我必须做以下事情:

    在 google play 控制台中创建应用

2.转到应用发布 -> 管理生产 -> 创建发布

3.点击 Google Play App Signing 上的 continue

4.通过运行“keytool -genkey -v -keystore c:\path\to\cert.keystore -alias uploadKey -keyalg RSA -keysize 2048 -validity 10000”创建上传证书

5.使用生成的证书签署您的 apk (c:\path\to\cert.keystore)

6.在应用发布->管理生产->编辑发布

中上传签名的apk

7.通过上传 apk,第 4 步生成的证书已添加到应用签名证书,并成为您未来所有构建的签名证书。

【讨论】:

我确实这样做了,但是如果我通过 Google Play 商店安装应用程序,我的应用程序中的 google 登录将不起作用。 *但是* 如果我从发布管理页面下载 apk 并将其手动安装到我的模拟器/设备中,它就可以工作。知道我错过了什么吗?【参考方案5】:

对于更新的 Google 控制台,请转到内部设置并打开应用程序完整性。并在此处上传您的密钥。你会很高兴的。

【讨论】:

如何将其合并到适当的原始答案中,或者这是替代品? 请注意 - 您需要成为帐户所有者才能同意这些条款,因此如果您与另一家公司合作,则需要让他们获得私钥才能执行上传并保存文件,然后他们可以同意条款。【参考方案6】:

当您将 Fabric 用于公开测试版(使用 prod config 签名)时,不要使用 Google Play App Signing。 您必须在构建两个签名的 apk 之后!

当您分发到更多游戏商店(三星、亚马逊、小米……)时,您将必须再次构建两个签名的 apk。

因此,请务必小心使用 Google Play 应用签名。

无法恢复它:/ 并且 Google Play 在接受使用生产密钥签名的 apk 后没有这样做。启用 Google Play 应用签名后,仅接受上传密钥...

这确实使 CI 分发变得复杂......

下一个升级问题:https://issuetracker.google.com/issues/69285256

【讨论】:

粗体大写 DON'T USE 类型的 cmets 是危险的。你能详细解释一下这个问题和推荐的解决方案吗?根本就没有解决办法吗?为 Fabric 签署两次 APK 有那么难吗? 我对 APK 进行两次签名并不难,但正如我所描述的,您必须构建两个(或更多)不相同的 APK(因此您正在测试 Fabric Beta 不同的文件,而不是发布到 Play 商店)。它失去了在 beta 测试人员上测试生产构建的点……您正在测试另一个文件:)。这只是对拥有复杂 CI/CD 的人的警告,他们必须对其进行更改... 请注意,即使在注册应用签名之后,Google Play 现在也接受使用生产密钥签名的 APK。【参考方案7】:

执行以下操作:

"CREATE APPLICATION" having the same name which you want to upload before.
Click create.
After creation of the app now click on the "App releases"
Click on the "MANAGE PRODUCTION"
Click on the "CREATE RELEASE"
Here you see "Google Play App Signing" dialog.
Just click on the "OPT-OUT" button.
It will ask you to confirm it. Just click on the "confirm" button

【讨论】:

之后我可以像以前一样在应用购买和播放服务中进行测试吗?你有这方面的经验吗?因为即使我也不喜欢做任何沉重的步骤。 对于“如何启用 Google Play App Signing”并不是一个合适的答案...

以上是关于如何启用 Google Play 应用签名的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 应用签名的工作原理

无法通过 fastlane 使用 Google Play 应用签名将 android 包上传到 Google Play

如何使用 Play 应用签名和应用程序包设置 Unity 应用程序并将其部署到 Google Play?

使用上传密钥为您的 Flutter 应用签名(Google Play 的应用签名)

如何在 Google Play 控制台中为应用程序签名退出 .aab 文件

Google PlayGoogle Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )