为什么要使用 Play 应用签名功能?除了保护您的密钥免遭永久丢失或泄露,注册 Play 应用签名功能还可为您的 Android App Bundle (.aab) 带来增强功能。通过让 Google 为根据您的 app bundle 生成的优化型分发 APK 签名,您可以使用自动保护和基于 Gemini 模型的自动字符串翻译等宝贵服务。游戏可使用更多自动服务,例如 Play 游戏 Sidekick、边下载边玩和付费游戏免费试玩。
如需配置 Play 应用签名功能,您必须是账号所有者,或拥有发布为正式版,排除设备以及使用 Google Play 应用签名功能权限,并接受《服务条款》。
核心概念
使用 Play 应用签名功能时,您需要处理两个不同的密钥。了解这两者的区别及其技术格式,对于避免第三方 API 的身份验证问题至关重要。
| 密钥类型 | 谁是持有者? | 技术详情和用途 |
|
上传密钥 |
您(请妥善保管此密钥!) |
|
| 应用签名密钥 |
Google Play |
|
| 量子就绪 | Google Play |
|
注意:为尽可能提高安全性,您的上传密钥和应用签名密钥应有所不同。
Google 如何为您的应用签名:当使用应用签名密钥生成并为您的 APK 签名时,Google 会使用 apksigner 向应用的清单中添加两个戳记(com.android.stamp.source 和 com.android.stamp.type)。这些戳记旨在确保您的 APK 可安全地追溯到原始签名者。
设置 Play 应用签名功能
设置流程取决于您是要发布新应用还是迁移现有应用。
对于新应用
- 创建新应用:您的应用将自动注册量子就绪型混合签名,并使用 Google 生成的密钥。我们还会生成一个单独的经典密钥,用于 Android 16 及更低版本设备所识别的签名块。
- 创建上传密钥:生成密钥库,用于为版本 app bundle 签名。为此,您可在 Android Studio 中生成,也可从命令行内使用 Java keytool 实用程序。
- 上传 app bundle:前往 Play 管理中心,准备一个新版本。默认情况下,当您上传 app bundle 时,系统会自动为您的应用启用量子就绪型混合签名,并使用 Google 生成的密钥。
- 更改应用签名密钥(可选):想管理自己密钥的高级开发者可以更改此默认设置。为此,您可在相应版本的“应用完整性”部分中点击更改签名密钥,也可依次前往由 Google Play 提供保护 > Play 商店保护 > 管理 Google Play 应用签名。然后,您可以选择:
- 使用此开发者账号中的另一个应用所用的同一密钥
- 提供应用签名密钥的副本(按照说明操作)
对于现有应用
如果您目前自行管理密钥并上传 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 提供商逐一注册这些指纹:分别是用于较新设备的新经典密钥和 PQC 密钥,以及用于较旧设备的经典密钥。
- 将这些指纹粘贴到 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 生成新的应用签名密钥(推荐)
- 使用与这个开发者账号中的其他应用相同的应用签名密钥
- 提供应用签名密钥的副本(按照说明操作)
- 点击保存,并向您的 API 提供商注册新的密钥指纹。
请求重置上传密钥
即使您丢失了上传密钥或怀疑它已泄露,您仍可访问自己的应用。
- 在 Android Studio 中创建新的上传密钥。
- 将证书导出为 PEM 格式:
keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
(如需有关 keytool 和密钥库路径的更多帮助,请参阅 Android Studio 应用签名指南)。 - 生成 PEM 文件后,在 Play 管理中心内提交重置请求。
- 依次前往由 Google Play 提供保护 > Play 商店保护 > 管理 Play 应用签名。
- 在上传密钥证书部分,点击请求重置上传密钥。
- 输入重置原因。
- 上传
upload_certificate.pem文件,然后点击请求。
最佳实践和替代分发方式
- 安全性:通过对所有用户强制执行两步验证来保护您的 Play 管理中心访问权限。
- Play 增强功能:加入 Play 应用签名计划后,您就可为 app bundle 启用 Play 增强功能。如需接收更新,请先在创建新版本时进行任何必要的更改,然后上传新的 app bundle。
- 在 Google Play 之外分发:如果您通过其他应用商店分发,并想在所有地方使用同一个签名密钥,则有以下两种选择。[1] 您可以让 Google 生成应用签名密钥,然后从 Play 管理中心或 Play Developer API 下载已签名的通用 APK 以便在其他地方分发(在 Play 管理中心内,依次前往“测试和发布”> 最新版本和 app bundle,选择您的 app bundle,然后点击“下载”标签页);或者 [2] 您可以生成要用于所有应用商店的应用签名密钥,并在配置 Play 应用签名时将该密钥的副本传输给 Google。详细了解应用更新的运作方式,以及您启用或停用跨商店更新的选项。
- 测试:使用内部应用分享功能测试 Google Play 将向用户提供的确切内容,或从 App bundle 资源管理器下载设备专用 APK,并使用 adb install-multiple *
.apk在本地安装这些 APK。 - APK 签名方案 v4:Play 应用签名功能会自动为符合条件的应用使用 v4 签名,以支持在搭载 Android 11 及更高版本的设备上进行优化型分发。您无需执行任何操作。这会排除所有使用量子就绪型混合签名的应用,因为该签名方案尚不兼容 v4 签名。如需详细了解技术优势,请参阅 APK 签名方案 v4 文档。
- 自行托管的 Google Cloud 项目:如果您有非常具体的安全性要求(例如使用 OEM 密钥),则可以使用 Play Developer API 通过自行托管的 Google Cloud 项目注册 Play 应用签名。注意:这属于非标准设置,不建议使用。使用自行托管的项目意味着您需要对应用签名操作承担全部责任,这也将导致 Google Play 无法执行灾难恢复等基本功能。