如何启用谷歌应用签名?

167
我认为许多开发者都在努力了解Google I/O 2017上介绍的新功能——Google Play应用签名。将用于应用程序签名的密钥库存储在Google Play内,可以节省您安全存储密钥库所需的工作量,并帮助系统根据硬件和操作系统特征优化向每个设备提供的APK。您可以在此处阅读有关此主题的官方文档:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing
接下来,我将更好地解释一下您需要遵循的步骤,以上传原始密钥库并创建新的上传密钥库,从此时起,您将需要使用该密钥库对APK进行签名。
7个回答

250

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

本指南是针对已在Play商店中拥有应用程序的开发人员。如果您要开始使用新的应用程序,则流程会更加简单,您可以遵循“新应用程序”段落中的指南,该段落请参见此处

99%的开发人员都已具备的先决条件:

  1. Android Studio

  2. JDK 8 并在安装后需要在用户空间设置环境变量以简化终端命令。在Windows x64上,您需要将C:\Program Files\Java\{JDK_VERSION}\bin 添加到Path环境变量中。(如果您不知道如何执行此操作,您可以阅读我的指南以将文件夹添加到Windows 10的Path环境变量中)。

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

进入图像描述

接受应用程序签名TOS。

进入图像描述

步骤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 = pepk.jar 的路径,第一步中你下载的文件。Windows 用户可能会用类似 C:\Users\YourName\Downloads\pepk.jar 的路径。
  • PATH_TO_KEYSTORE = 用于签名发布 APK 的密钥库(keystore)路径。可以是 *.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

按 Enter 键,然后按顺序输入以下内容:

  1. 密钥库密码
  2. 别名密码

如果一切正常,你现在将会在 PATH_TO_OUTPUT_FILE 文件夹中找到一个名为 private_key.pem 的文件。

第三步:单击与下面图片相同的按钮上传 private_key.pem 文件。

enter image description here

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

后续发布应用程序时,您需要此密钥库进行签名,请不要忘记密码。

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

enter image description here

现在应填写所需字段。

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

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

enter image description here

完成后按 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.jks
  • UPLOAD_KEYSTORE_ALIAS = 与上传密钥库关联的新别名。在此案例中为 upload
  • PATH_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"

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

如果一切顺利,您将在 PATH_TO_OUTPUT_FILE 文件夹中拥有一个名为 upload_key_public_certificate.pem 的文件。

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

enter image description here

第7步:在应用签名页面末尾单击“ENROLL”按钮。

enter image description here

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

更多资源:

问答

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

答:在构建发布版APK时,请检查使用两个签名(V1和V2)对APK进行签名。阅读这里以获取更多详细信息。

更新

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

"上传密钥(对于现有应用程序而言是可选项):在加入该计划期间生成的新密钥。您将使用上传密钥在上传到Play Console之前对所有未来的APK进行签名。" https://support.google.com/googleplay/android-developer/answer/7384423


4
你的指南非常有帮助!他们应该将其放在官方网站上哈哈。你示例中的路径名缺少下划线引号,这会导致在 W10 控制台上出现错误。 - NukeouT
3
只有当你的路径中至少有一个空格时,才需要使用引号,但这是每个控制台命令的工作方式。因此,如果你的路径是 "C:\My Path\MyName",就必须使用引号,但如果路径是 C:\MyPath\MyName,则不需要。顺便说一句,谢谢 :) - MatPag
1
@layth 创建新密钥库是该指南的“第4步” :D - MatPag
1
@NukeouT 不需要在第4步中使用旧的密钥库和密码。您只需单击“创建新文件”,新的密钥库提示将出现。我已更新文档,使此步骤更清晰,即使我认为它已经很清楚了。 - MatPag
11
看起来谷歌改变了流程,因为我再也找不到PEPK工具了。 - Andrea Motto
显示剩余47条评论

53

有一个非常简单的解决方案只需要花费一分钟。

  1. 在Google Play控制台中,选择发布管理 -> 应用签名
  2. 选择第一个选项,即使用Android Studio生成加密私钥(或类似的选项;我无法回到那个页面了)
  3. 在Android Studio中从构建 -> 生成已签名的捆绑包/APK...生成您的Android App Bundle(.aab文件),选择Android App Bundle选项,并不要忘记勾选导出加密密钥(需要注册应用程序 Google Play 应用签名)选项。如果您没有生成密钥库,请自行生成。
  4. 现在是“棘手”的部分。生成.aab文件后,Android Studio将弹出一个通知,其中包含保存.aab文件的路径。在同一通知中,如果您展开它,您将找到另一个链接,指向保存私钥的路径(称为private_key.pepk)。如果您错过了这个通知,不用担心,只需点击底部右侧的事件日志按钮打开事件日志窗口,您将找到相同的信息。打开该位置。对我来说是C:\Users\yourUser\.android

这里输入图像描述

  1. 回到浏览器并点击APP SIGNING PRIVATE KEY按钮,浏览你电脑上私钥的位置。

完成了!

现在,你可以上传之前生成的版本进行发布 :) 祝你好运!


我没有看到导出加密密钥选项(需要注册您的应用程序Google Play应用签名)。 - Jarvis
我真的很希望能够得到关于第5点更详细的解释 - 我没有看到这个按钮,它在哪里,也许最近的更新改变了布局? - androidneil
1
好的,现在我想知道下一个更新怎么办?我们需要再次使用.pepk密钥还是使用相同的密钥签署版本2或新的私有.pepk密钥?请帮忙。 - Sunil Chaudhary
目前在Google Play控制台中没有这样的按钮...他们有一个名为“应用完整性”的菜单,但没有上传新密钥的选项。 - Liker777

31

当将Android应用程序包文件(APK)迁移到Android App Bundle(AAB)并发布应用程序到Play Store时,我遇到了以下问题并解决了它。

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

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

使用 Play 应用商店凭据登录 Google Play 控制台后: 选择左侧的项目,选择“App Signing”选项,然后选择“Release Management>>App Signing” enter image description here

你会发现 “Google App Signing Certification” 窗口,请接受它。

之后,你将看到三个单选按钮,请选择:

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

,它会展开以下内容:

APP SIGNING PRIVATE KEY 按钮。

在此输入图片描述

点击按钮,并选择 .pepk 文件(我们在生成 .aab 文件时已存储好)。

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

一旦成功,您可以返回应用发布页面,浏览 .aab 文件并完成发布...

@Ambilpura


1
好的,现在我想知道下一个更新怎么办?我们需要再次使用.pepk密钥还是使用相同的密钥签署版本2或新的私有.pepk密钥?请帮忙。 - Sunil Chaudhary
根据我的理解,下次无需创建新的.pepk密钥,可以使用旧的密钥。 - Ambilpura Sunil Kumar
你如何使用.pepk文件进行更新?我在上传应用时成功使用了Google应用签名,但现在我正在尝试推送更新,不知道该怎么做。@AmbilpuraSunilKumar - nt95
我也是这样做的。我只是将ABB上传到Play商店,完全忽略了.PEPK文件。知道它的具体用途以及在更新应用程序时该怎么做会很好。 - Julian Eggers
这个更新的答案应该被推到顶部。这是将现有应用迁移到App Bundle的最简单方法。 - Hong

9

要更新 Google 控制台,请进入“设置”并打开“应用完整性”,然后在此处上传您的密钥。这样就可以愉快地使用了。

更新后的Google控制台截图


这个与原始答案的融合怎么样?还是说这是一个替代方案? - Mr R
1
需要注意的是,您需要成为账户所有者才能同意这些条款。因此,如果您正在与另一家公司合作,您需要将私钥提供给他们以执行上传并保存文件,然后他们可以同意这些条款。 - cwgso

7

我需要做以下事情:

  1. 在Google Play Console中创建一个应用程序 enter image description here

2.前往 应用发布 -> 管理生产 -> 创建发布

3.在 Google Play 应用签名上点击“继续” enter image description here

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

5.使用生成的证书(c:\path\to\cert.keystore)对APK进行签名

6.在应用发布 -> 管理生产 -> 编辑发布中上传已签名的APK文件

7.通过上传APK,第4步生成的证书已被添加到应用程序签名证书并成为所有未来版本的签名证书。


2
我确实这样做了,但是如果我通过Google Play商店安装应用程序,则我的应用程序中的Google登录不起作用。_但是_,如果我从发布管理页面下载apk并手动将其安装到模拟器/设备中,则可以正常工作。有什么想法我错过了什么吗? - Raghudevan Shankar

5
当你使用Fabric进行公测发布(使用生产配置签名)时,不要使用Google Play应用程序签名。这将导致必须构建两个已签名apk!
当你要分发到更多的应用商店(三星、亚马逊、小米等)时,你还必须再次构建两个已签名apk。
所以,请谨慎使用Google Play应用程序签名。 请注意:这是无法恢复的 :/而且 Google Play 在启用 Google Play 应用程序签名后不再接受使用生产密钥签名的 apk。只有上传密钥被接受...
这真的让 CI 分发变得更加复杂...
下一个问题是关于升级: https://issuetracker.google.com/issues/69285256

1
使用加粗的大写字母 DON'T USE 类型的注释是危险的。您能详细解释问题和推荐的解决方案吗?难道没有解决方案吗?对于 Fabric 来说,签署 APK 两次真的很困难吗? - Gokhan Arik
1
签署 APK 两次并不难,但正如我所描述的那样,您必须构建两个(或更多)APK,这些APK不相同(因此您正在Fabric Beta上测试与发布到Play Store的文件不同)。这失去了在Beta测试人员上测试生产构建的重点...您正在测试另一个文件 :). 这只是对那些拥有一些复杂CI / CD的人的警告,他们必须进行更改... - mtrakal
4
请注意,即使已经注册应用签名,Google Play现在也接受使用生产密钥签名的APK文件。 - Pierre

2
做以下操作:
"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

之后我能像以前一样测试应用内购买和Play服务吗?你有相关的经验吗? 因为我也不想做任何繁琐的步骤。 - Siddharth
1
这并不是一个关于“如何启用Google Play应用签名”的恰当回答。 - Ben Madsen

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