为何使用 Play 应用签名?除了保护您的密钥免遭永久丢失或泄露,加入 Play 应用签名计划还可为您的 Android App Bundle (.aab) 带来 Play 增强功能。通过让 Google 为根据您的 app bundle 生成的优化型分发 APK 签名,您可以使用自动保护和基于 Gemini 模型的自动翻译字符串等宝贵服务。游戏可使用更多自动服务,例如 Play 游戏 Sidekick、边下载边玩和付费游戏免费试玩。
如需配置 Play 应用签名,您必须是账号所有者或拥有发布为正式版、排除设备以及使用 Play 应用签名功能权限,并且接受《服务条款》。
核心概念
使用 Play 应用签名功能时,您需要处理两个不同的密钥。了解这两者的区别及其技术格式对于避免第三方 API 身份验证问题至关重要。
| 密钥类型 | 谁是持有者? | 技术详情和用途 |
|
上传密钥 |
您(请妥善保管此密钥!) |
|
| 应用签名密钥 |
Google Play |
|
注意:为尽可能提高安全性,上传密钥和应用签名密钥应各不相同。
Google 如何为您的应用签名:当使用应用签名密钥生成并签署您的 APK 时,Google 会使用 apksigner 向应用的清单中添加两个戳记(com.android.stamp.source 和 com.android.stamp.type)。这些戳记旨在确保您的 APK 可安全地追溯到原始签名者。
设置 Play 应用签名功能
设置流程取决于您是要发布新应用还是迁移现有应用。
在安装新应用时
- 创建一个上传密钥:生成密钥库,用于为版本 app bundle 签名。为此,您可在 Android Studio 中生成,也可从命令行内使用 Java keytool 实用程序。
- 上传 app bundle:前往 Play 管理中心,准备一个新版本。默认情况下,当您上传 app bundle 时,Play 应用签名功能会自动生成一个加密强度高的 RSA 4096 位密钥来管理和保护您的应用。超过 90% 的新应用都使用此推荐默认设置,无需执行任何进一步操作即可完成设置。
- 更改应用签名密钥(可选):想管理自己密钥的高级开发者可以更改此默认设置。为此,您可在相应版本的应用完整性部分中点击更改签名密钥,也可依次前往受 Google Play 保护 > Play 商店分发 > 前往 Play 应用签名。然后,您可以选择:
- 使用此开发者账号中的另一个应用所用的同一密钥。
- 提供应用签名密钥的副本:首先,从 Play 管理中心下载 Google 的公共加密密钥。然后,使用 Play Encrypt Private Key (PEPK) 工具(您可直接从管理中心内下载已编译的工具或其源代码以便自行验证或构建)从任意仓库中安全地加密并上传您现有的 RSA 密钥(2048 位或更高)。
对于现有应用
如果您目前自行管理密钥并上传 APK,则可以升级到 Play 应用签名功能,以利用 app bundle 和 Play 增强功能。
- 在 Play 管理中心内,依次前往受 Google Play 保护 > Play 商店分发 > 前往 Play 应用签名。
- 如果您尚未接受服务条款,请接受。
- 传输原始密钥的副本:下载 PEPK 工具,然后按照统一的分步说明,从任意仓库中对现有应用签名密钥进行加密并上传。
向 API 提供商注册
如果您的应用使用 API(例如 Google Maps、OAuth 或 Facebook Login),这些服务会使用应用签名密钥的指纹为该应用验证身份。
由于 Google 会为最终 APK 签名,因此您必须向 API 提供商注册 Google 持有的应用签名密钥指纹,而不仅仅是本地上传密钥。
- 依次前往受 Google Play 保护 > Play 商店分发 > 前往 Play 应用签名。
- 滚动到应用签名密钥部分。
- 复制所需的指纹(SHA-1 或 SHA-256)。
- 将这些指纹粘贴到 API 提供商的控制台(例如 Google Cloud 控制台)中。
提示:如果您使用 Android App Links,请使用这些指纹更新 assetlinks.json 文件。
管理密钥
升级应用签名密钥
如果您的应用签名密钥遭到泄露,或者需有加密强度更高的密钥,您可以请求针对 Android N(API 级别 24)及更高版本上的所有安装进行年度密钥升级。
不同 Android 版本中的强制执行机制:
- Android T(API 级别 33)及更高版本:Android 平台会严格强制要求使用升级后的密钥。
- Android N(API 级别 24)到 Android S(API 级别 32):Android 平台本身不会强制要求使用升级后的密钥,仍能识别旧版签名密钥。不过,Google Play 保护机制会通过检查应用更新是否已使用您升级后的密钥进行签名来提供额外的验证(除非用户关闭了该机制)。
重要的考虑因素:
- 共享数据:由于平台在 Android S(API 级别 32)及更低版本上不强制使用升级后的密钥,因此,如果您在多个应用中使用相同的密钥来共享数据,这些较低版本的 Android 系统将仅识别旧版密钥,以实现自定义权限共享等功能。
如何升级:
- 依次前往受 Google Play 保护 > Play 商店分发 > 前往 Play 应用签名。
- 在“应用签名密钥”部分中,点击升级密钥。
- 选择升级路径:
- 让 Google Play 生成新的应用签名密钥(推荐)
- 使用与这个开发者账号中的其他应用相同的应用签名密钥
- 提供应用签名密钥的副本(按照说明操作)
- 如果您提供自己的密钥,请使用 apksigner 工具(与 Android SDK Build Tools 捆绑在一起)生成并上传 proof-of-rotation。(如需详细了解此处使用的标志,请参阅 apksigner 命令行文档):
- apksigner
rotate --out /path/to/new/file --old-signer --ks old-signer-jks --set-rollback true --new-signer --ks new-signer-jks --set-rollback true
- apksigner
- 点击保存,并向您的 API 提供商注册新的密钥指纹。
请求重置上传密钥
即使您丢失了上传密钥或怀疑它泄露了,您仍可访问自己的应用。
- 在 Android Studio 中创建新的上传密钥。
- 将证书导出为 PEM 格式:
keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
(如需有关 keytool 和密钥库路径的更多帮助,请参阅 Android Studio 应用签名指南)。 - 让您的账号所有者通过 Play 管理中心帮助表单请求重置上传密钥。
- 在系统提示时,上传
upload_certificate.pem。
注意:重置上传密钥不会影响应用签名密钥或您的用户。
最佳实践和替代分发方式
- 安全性:为所有用户强制执行两步验证,以保护您的 Play 管理中心访问权限。
- Play 增强功能:加入 Play 应用签名计划后,您就可为 app bundle 启用 Play 增强功能。如需接收更新,请先在创建新版本时进行任何必要的更改,然后上传新的 app bundle。
- 在 Google Play 之外分发:如果您通过其他应用商店分发应用,并希望在所有平台上使用相同的签名密钥,则有两种选择。您可以让 Google 生成应用签名密钥,然后从最新版本和 bundle 中下载已签名的通用 APK 以便在别处分发(前往测试和发布 > 最新版本和 app bundle 选择您的 app bundle,然后点击进入下载标签页);也可以先行生成要针对所有应用商店使用的应用签名密钥,然后在配置 Play 应用签名时将该密钥的副本传输到 Google。
- 测试:使用内部应用分享功能测试 Google Play 将向用户提供的确切内容,或从 App bundle 资源管理器下载设备专用 APK,并使用 adb install-multiple *
.apk在本地安装这些 APK。 - APK 签名方案 v4:Play 应用签名功能会自动为符合条件的应用使用 v4 签名,以支持在搭载 Android 11 及更高版本的设备上进行优化型分发。您无需执行任何操作。如需详细了解技术优势,请参阅 APK 签名方案 v4 文档。
- 自行托管的 Google Cloud 项目:如果您有非常具体的安全性要求(例如使用 OEM 密钥),则可以使用 Play Developer API 通过自行托管的 Google Cloud 项目注册 Play 应用签名。注意:这是一种不推荐使用的非标准设置。使用自行托管的项目意味着您要对应用签名操作承担全部责任,并且 Google Play 无法执行灾难恢复等基本功能。