我认为很多开发人员都在尝试更多地了解 Google I/O 2017 上展示的新 Google Play 应用签名功能。
存储密钥库以在 Google Play 中对应用程序进行签名的能力可以节省您安全存储密钥库的工作,并且可以帮助系统根据硬件和操作系统特性优化提供给每个设备的 APK。
您可以在此处的官方文档中阅读有关此主题的更多信息:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing。
通过以下答案,我将更好地解释上传原始密钥库所需遵循的步骤以及如何创建新的上传密钥库,从此时起您需要对 APK 进行签名。
在继续观看此 Android 开发者视频以了解您的应用签名注册选择的含义之前:https://youtu.be/odv_1fxt9BI
本指南面向已在 Play 商店中拥有应用程序的开发人员。如果您从一个新应用开始,这个过程会容易得多,您可以遵循 here 中“新应用”段落的指南
99% 的开发人员已经具备的先决条件:
Android Studio JDK 8 和安装后,您需要在用户空间中设置环境变量以简化终端命令。在 Windows x64 中,您需要将 C:\Program Files\Java\{JDK_VERSION}\bin 添加到 Path 环境变量中。 (如果您不知道如何执行此操作,可以阅读我的指南以将文件夹添加到 Windows 10 路径环境变量)。
第 0 步:打开 Google Play 开发者控制台,然后转到发布管理 -> 应用签名。
https://i.stack.imgur.com/u1EFx.png
接受应用签名服务条款。
https://i.stack.imgur.com/A5UNC.png
第 1 步:点击与下图相同的按钮下载 PEPK 工具
https://i.stack.imgur.com/C38dG.png
第二步:打开终端,输入:
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.jar。
PATH_TO_KEYSTORE = 用于签署发布 APK 的密钥库的路径。可以是 *.keystore 或 *.jks 类型的文件或不带扩展名的文件。像 C:\Android\mykeystore 或 C:\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 页面中找到它,复制并粘贴它。应该是这种形式:eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48bde
例子:
java -jar "C:\Users\YourName\Downloads\pepk.jar" --keystore="C:\Android\mykeystore" --alias=myalias --output="C:\Android\private_key.pem" --加密密钥=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a
按 Enter 键,您需要按顺序提供:
密钥库密码 别名密码
如果一切正常,您现在将在 PATH_TO_OUTPUT_FILE 文件夹中有一个名为 private_key.pem
的文件。
第 3 步:点击与下图相同的按钮,上传 private_key.pem 文件
https://i.stack.imgur.com/g0h3P.png
第 4 步:使用 Android Studio 创建一个新的密钥库文件。
您将来将需要此密钥库来签署您的应用程序的下一个版本,不要忘记密码
打开您的一个 Android 项目(随机选择一个)。转到 Build -> Generate Signed APK 并按 Create new。
https://i.stack.imgur.com/O9okH.png
现在您应该填写必填字段。
密钥库路径代表您将创建的新密钥库,使用右侧的 3 个点图标选择文件夹和名称,我选择 C:\Android\upload_key.jks(将自动添加.jks 扩展名)
注意:我使用上传作为新的别名,但如果您之前使用具有不同别名的相同密钥库来签署不同的应用程序,您应该选择之前在原始密钥库中使用的相同别名。
https://i.stack.imgur.com/ylgIh.png
完成后按 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 = 与上传密钥库关联的新别名。在这种情况下是上传。
PATH_TO_OUTPUT_FILE = 带有 .pem 扩展名的输出文件的路径。像 C:\Android\upload_key_public_certificate.pem 这样的东西。
例子:
keytool -export -rfc -keystore "C:\Android\upload_key.jks" -别名上传 -file "C:\Android\upload_key_public_certificate.pem"
按 Enter 键,您将需要提供密钥库密码。
现在,如果一切正常,您将在 PATH_TO_OUTPUT_FILE 文件夹中有一个名为 upload_key_public_certificate.pem
的文件。
第 6 步:点击与下图相同的按钮上传 upload_key_public_certificate.pem
文件
https://i.stack.imgur.com/doYzq.png
第 7 步:单击 App Signing 页面末尾的 ENROLL 按钮。
https://i.stack.imgur.com/sEeOp.png
现在,每个新发布的 APK 都必须使用 第 4 步中创建的 upload_key.jks
密钥库和别名进行签名,然后才能上传到 Google Play 开发者控制台。
更多资源:
关于 Google Play 应用签名的 Google 文档
丢失上传密钥库时请求重置的表单
问答
问:当我上传使用新的 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
有一个更简单的解决方案需要一分钟。
在 google play console 中,选择 Release management -> App signing 选择第一个选项,即使用 Android Studio 生成加密私钥的选项(或类似的;我不能再回头查看该页面了) 在 Android Studio 中生成您的 Android App Bundle(.aab 文件)来自 Build -> Generate Signed Bundle / APK...,选择 Android App Bundle 选项,不要忘记检查 Export Encrypted key(需要注册您的应用 Google Play 应用签名)选项。如果您没有生成密钥库,请生成一个临时的。现在是“棘手”的部分。生成 .aab 后,Android Studio 会在右下角弹出一个通知,其中包含 .aab 文件保存位置的路径。在同一个通知中,如果您将其展开,您会发现另一个指向保存私钥的路径的链接(称为 private_key.pepk)。如果您错过了此通知,请不要担心,只需单击右下角的“事件日志”按钮打开“事件日志”窗口,您就会找到相同的信息。打开那个位置。对我来说是 C:\Users\yourUser\.android
https://i.stack.imgur.com/DpIQo.jpg
返回浏览器并按 APP SIGNING PRIVATE KEY 按钮并浏览到您计算机上的私钥位置。
完毕!
现在您可以上传您之前生成的版本 :) 祝您好运!
在将 Android 应用程序包文件 (APK) 迁移到 Android App Bundle (AAB) 时,将应用程序发布到 Play 商店时我遇到了这个问题,并得到了如下解决...
构建 .aab
文件时,系统会提示您输入存储密钥导出路径的位置,如下所示:
https://i.stack.imgur.com/AGQ1R.png
https://i.stack.imgur.com/WKCdF.png
您会发现 Google App Signing Certification 窗口接受它。
之后你会发现三个单选按钮选择**
上传从 Android Studio 单选按钮导出的密钥
**,它将扩展您的 APP SIGNING PRIVATE KEY 按钮,如下所示
https://i.stack.imgur.com/dYW6v.png
单击按钮并选择 .pepk
文件(我们在生成 .aab
文件时存储如上)
阅读所有其他选项并提交。
成功后,您可以返回应用发布并浏览 .aab 文件并完成 RollOut...
@Ambilpura
我必须做以下事情:
在 google play 控制台中创建应用程序
2.转到应用发布->管理生产->创建发布
https://i.stack.imgur.com/glsbm.png
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.在App版本中上传签名的apk -> 管理生产 -> 编辑版本
7.通过上传apk,步骤4中生成的证书已添加到App Signing证书中,并成为您未来所有构建的签名证书。
对于更新的 Google 控制台,请转到内部设置并打开应用程序完整性。并在此处上传您的密钥。你会很高兴的。
https://i.stack.imgur.com/BHTNG.jpg
当您将 Fabric 用于公开测试版(使用 prod config 签名)时,请勿使用 Google Play 应用签名。您必须在构建两个签名的 apk 之后!
当您分发到更多游戏商店(三星、亚马逊、小米……)时,您将必须再次构建两个签名的 apk。
因此,请务必小心使用 Google Play 应用签名。
无法恢复它:/ 并且 Google Play 在接受使用生产密钥签名的 apk 后没有这样做。启用 Google Play 应用签名后,仅接受上传密钥...
它确实使 CI 分布复杂化......
升级的下一个问题:https://issuetracker.google.com/issues/69285256
DON'T USE
类型的评论是危险的。你能详细解释一下这个问题和推荐的解决方案吗?根本就没有解决办法吗?为 Fabric 签署两次 APK 有那么难吗?
请执行下列操作 :
"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
"C:\My Path\MyName"
,则必须使用引号,但如果路径是C:\MyPath\MyName
,则不需要。顺便说一句谢谢:)Step 4
:DCreate New
,就会出现新的密钥库提示。我已经更新了文档以使这一步更加清晰,即使我认为它已经