使用 Google Play 应用签名

借助 Google Play 应用签名功能,Google 会管理和保护您的应用的签名密钥,并使用此密钥为您的 APK 签名以进行分发。这种应用签名密钥的存储方式很安全,可在您的密钥丢失或被盗时保护您的内容。

重要提示:如需使用推荐的应用发布格式 Android App Bundle,您需要先加入 Google Play 应用签名计划,然后再在 Play 管理中心上传您的 app bundle。

如需选择加入这项计划,您需要成为帐号所有者或是拥有发布为正式版,排除设备以及使用 Google Play 应用签名功能权限的用户,并且需要接受服务条款。您可以为应用注册 Google Play 应用签名,但一次只能注册一个应用。

运作方式

如果您使用 Google Play 应用签名功能,系统会将您的密钥存储在 Google 用来存储自有密钥的基础架构中。密钥会受 Google 密钥管理服务的保护。如果您想了解 Google 的技术基础架构,请参阅 Google Cloud 安全白皮书

Android 应用会使用私钥进行签名。为了确保应用更新是可信的,每个私钥都有关联的公钥证书,设备和服务可以使用该公钥证书来验证应用是否来自可信来源。只有当更新的签名与所安装应用的签名匹配时,设备才会接受更新。让 Google 来管理您的应用签名密钥使验证过程更有安全保障。

注意:您可以自由选择是否要使用 Google Play 应用签名功能。您仍然可以上传 APK 并管理自己的密钥(而不使用 app bundle)。不过,在这种情况下,如果您的密钥库丢失或被盗,您将无法更新自己的应用,而必须改用新的软件包名称来发布新应用。

密钥、工件和工具的说明
术语 说明
应用签名密钥

Google Play 会使用这个密钥对提供给用户设备的 APK 进行签名。如果您选择加入 Google Play 应用签名计划,则可以上传现有的应用签名密钥,也可以让 Google 为您生成一个应用签名密钥。

应用签名密钥在应用的整个生命周期内保持不变。请勿将您的应用签名密钥告知他人,不过您可以与其他人分享应用的公钥证书。

上传密钥

在将 app bundle 或 APK 上传到 Google Play 之前,您可以使用该密钥对其进行签名。请勿将您的上传密钥告知他人,不过您可以与其他人分享应用的公钥证书。出于安全考虑,建议您确保应用签名密钥和上传密钥为不同的密钥。

生成上传密钥的方式有以下两种:

  • 使用您的应用签名密钥:如果您让 Google 在您选择加入应用签名计划时为您生成应用签名密钥,则您用于第一个版本的密钥也是您的上传密钥。
  • 使用单独的上传密钥:如果您在选择加入应用签名计划时提供自己的应用签名密钥,那么您可以选择生成新的上传密钥以提高安全性。如果您没有生成新的上传密钥,请将您的应用签名密钥用作上传密钥来为版本签名。
证书(.der.pem

证书包含一个公钥以及关于密钥所有者的额外识别信息。借助公钥证书,所有人都可以验证 app bundle 或 APK 的签名者,而且您可以与任何人分享该证书,因为其中并不包含您的私钥。

要向 API 提供商注册您的密钥,您可以从 Play 管理中心的应用签名页面下载您的应用签名密钥和上传密钥的公钥证书。您可以与任何人分享公钥证书。公钥证书不包含您的私钥。

证书指纹

证书的唯一简短表示形式,通常 API 提供商会同时请求证书指纹和软件包名称以注册使用其服务的应用。

您可以在 Play 管理中心的应用签名页面上找到上传证书和应用签名证书的 MD5、SHA-1 和 SHA-256 指纹。您还可以从同一页面下载原始证书 (.der) 来计算其他指纹。

Java 密钥库(.jks.keystore 安全证书和私钥的存储区。
Play 加密私钥 (PEPK) 工具

您可以使用这项工具从 Java 密钥库中导出私钥,然后对这些私钥进行加密,再转移至 Google Play。

将应用密钥提供给 Google 使用时,请选择导出及上传密钥的选项(如有需要,另请选择公钥证书选项),并按照说明下载和使用此工具。如果您愿意,也可以下载、查看和使用 PEPK 工具的开放源代码。

应用签名流程

在选择加入 Google Play 应用签名计划前后,您可以上传使用原始应用签名密钥进行签名的 APK。

如果您即将开始使用 app bundle,可以在正式版发布阶段使用现有的 APK,同时在测试轨道中对其进行测试。具体流程如下:

  1. 为您的 app bundle 或 APK 签名,并将其上传到 Play 管理中心
  2. 签名流程会因您上传的内容而异,如下所示:
    • App bundle:Google 会通过您的 app bundle 生成经过优化的 APK,然后使用应用签名密钥为 APK 签名。
    • 使用上传密钥签名的 APK:Google 会验证 APK 中的签名并将签名删除,然后使用应用签名密钥重新为该 APK 签名。
    • 使用应用签名密钥签名的 APK:Google 会验证签名。
  3. Google 向用户提供已签名的 APK。

选择加入 Google Play 应用签名计划

新应用

第 1 步:创建上传密钥

  1. 按照说明创建上传密钥。
  2. 使用上传密钥为新 APK 签名。

第 2 步:准备应用版本

  1. 按照说明准备和发布版本
  2. 选择发布轨道后,请在“让 Google 管理并保护您的应用签名密钥”部分下配置应用签名。
  3. 如果选择继续,系统生成的密钥就会成为您为未来的版本进行签名时使用的上传密钥,或者您也可以选择应用签名偏好设置,其中包括:
    • 使用与开发者帐号中的另一个应用相同的密钥(选项 2)。
    • 从 Java 密钥库导出并上传现有密钥(选项 3)或者不使用 Java 密钥库(选项 4)。选择最适合您的导出和上传选项。上传应用签名密钥及其公钥证书后,您可以创建上传密钥,也可以继续将应用签名密钥用作上传密钥。
    • 选择停用 Google Play 应用签名(选项 4)
  4. 选择更新

注意:您需要接受《服务条款》并选择加入应用签名计划,才能继续操作。

第 3 步:向 API 提供商注册应用签名密钥

如果您的应用使用任何 API,您通常需要注册 Google 用于为应用签名的密钥所对应的证书,以便进行身份验证。查找证书的方法如下:

  1. 打开 Play 管理中心
  2. 在左侧菜单中,依次选择发布 > 设置 > 应用签名
  3. 滚动到“应用签名密钥证书”部分,然后复制应用签名证书的指纹(MD5、SHA-1 和 SHA-256)。
    • 如果 API 提供商需要其他类型的指纹,您也可以下载 .der 格式的原始证书,并通过 API 提供商要求的转换工具转换该证书。
现有应用

第 1 步:加入 Google Play 应用签名计划

  1. 打开 Play 管理中心
  2. 选择相应应用。
  3. 在左侧菜单中,依次选择发布 > 设置 > 应用签名
  4. 如果您尚未接受《服务条款》,请查看条款内容并选择接受

第 2 步:将原始密钥发送给 Google 并创建上传密钥

  1. 找到您的原始应用签名密钥。
  2. 打开 Play 管理中心
  3. 选择相应应用。
  4. 在左侧菜单中,依次选择发布 > 设置 > 应用签名
  5. 选择最适合您的发布流程的导出和上传选项,并上传现有的应用签名密钥。

第 3 步:创建上传密钥(可选,建议创建)

  1. 创建上传密钥并将证书上传到 Google Play。
    • 您也可以继续将应用签名密钥用作上传密钥。
  2. 复制应用签名证书的指纹(MD5、SHA-1 和 SHA-256)。
    • 出于测试目的,您可能需要使用证书指纹和应用签名密钥向 API 提供商注册上传密钥的证书。

第 4 步:使用上传密钥为您的下一次应用更新签名

发布应用更新时,您需要使用上传密钥为更新签名。

  • 如果您之前没有生成新的上传密钥:请继续使用原始应用签名密钥为版本签名,然后再将其上传到 Google Play。如果您丢失了应用签名密钥,则可以生成新的上传密钥,并向 Google 注册该密钥,以便继续更新您的应用。
  • 如果您之前生成了新的上传密钥:请使用这个新的上传密钥为版本签名,然后再将版本上传到 Google Play。上传这些版本后,Google 会检查相应版本的上传密钥以验证您的身份。如果您丢失了上传密钥,可以与支持团队联系以重置上传密钥

创建上传密钥并更新密钥库

为了提高安全性,建议您使用新的上传密钥(而不是应用签名密钥)为应用签名。

您可以在选择加入 Google Play 应用签名计划时创建上传密钥,也可以之后通过访问版本管理 > 应用签名来创建上传密钥。

要创建上传密钥,请按以下步骤操作:

  1. 按照 Android 开发者网站上的说明进行操作。将密钥存放在安全的地方。
  2. 将上传密钥的证书以 PEM 格式导出。替换下方带下划线的参数:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. 发布过程中如果出现提示,请上传证书以向 Google 注册该证书。

当您使用上传密钥时:

  • 上传密钥只会在 Google 中注册,我们会用它来验证应用创建者的身份。
  • 在将您上传的任何 APK 发布给用户之前,我们都会从中移除您的签名。
上传密钥限制
  • 上传密钥必须为不小于 2048 位的 RSA 密钥。
更新密钥库

创建上传密钥后,您可能需要查看和更新以下位置:

  • 本地计算机
  • 上锁保护的现场服务器(变化的 ACL)
  • 云计算机(变化的 ACL)
  • 专属机密管理服务
  • (Git) 存储区

针对新安装应用升级应用签名密钥

在某些情况下,您可以请求升级应用签名密钥。对于新安装的应用或其更新,将使用此新密钥进行签名。对于在您的应用签名密钥升级之前便已安装该应用的用户,应用更新仍将使用您的旧版密钥来签名。

在每个应用的生命周期内,其应用签名密钥只能升级一次。在极少数情况下,假如您有多个应用使用相同的签名密钥并且在同一进程中运行,则无法使用密钥升级功能。

以下是请求升级应用签名密钥的几种原因:

  • 您需要加密强度更高的密钥。
  • 您的应用签名密钥已被盗。

注意:在 Play 管理中心请求升级应用签名密钥与 Android P 及更高版本的 APK 签名方案 v3 中引入的密钥轮换无关。Google Play 目前不支持此类密钥轮换功能。

请求升级密钥前的重要注意事项

在请求升级密钥之前,请务必先了解升级完成后您可能需要做出的更改。

  • 如果您为多个应用使用相同的应用签名密钥,以便在它们之间共享数据/代码,则您需要更新这些应用以使它们同时能够识别新旧两版应用签名密钥证书。
  • 如果您的应用使用 API,请务必在 API 提供商那里注册新旧两版应用签名密钥的证书,以确保 API 能继续正常运行。您可以在 Play 管理中心内的应用签名页面上找到相应证书。 
  • 如果您有很多用户通过点对点共享安装更新,那么只有当要安装的更新的签名密钥与其已安装的应用版本所用密钥相同的情况下,他们才能安装。如果用户的应用版本因使用不同的签名密钥而无法更新,则可以选择卸载并重新安装应用以获取更新。
针对新安装应用请求升级密钥
  1. 登录您的 Play 管理中心
  2. 选择相应应用。
  3. 在左侧菜单中,依次选择发布 > 设置 > 应用签名
  4. 在“针对新安装应用升级应用签名密钥”卡片中,选择请求升级密钥
  5. 选择一个选项。
    • 根据您选择的选项,您可能需要与支持团队联系以完成请求流程。
  6. 让 Google 生成新的应用签名密钥(推荐)或上传密钥。
    • 应用签名密钥升级后,如果您的应用签名密钥和上传密钥相同,则可继续用旧版应用签名密钥作为上传密钥,也可以生成新的上传密钥。

最佳做法

  • 如果您还在 Google Play 之外分发应用或未来打算这样做,并想使用同一个签名密钥,有以下两种选择:
    • 让 Google 生成该密钥(推荐),然后从 App Bundle 资源管理器下载已签名的通用 APK,以便在 Google Play 之外分发。您还可以通过 Google Play Developer API 下载已签名的 APK。
    • 或者,您可以在选择加入 Google Play 应用签名计划时生成要在每个应用商店中使用的应用签名密钥,然后再将其副本转移到 Google。
  • 为了保护您的帐号,请为可访问您的 Play 管理中心的帐号开启两步验证
  • 在将 app bundle 发布到测试轨道或正式版轨道之后,您可以访问 App Bundle 资源管理器,以下载一个包含适用于特定设备的所有 APK 的 ZIP 压缩文件。这些 APK 均使用应用签名密钥进行了签名,您可以使用 adb install-multiple *.apk 命令在设备上安装 ZIP 压缩文件中的 APK。
  • 为了提高安全性,请生成与您的应用签名密钥不同的新上传密钥。
  • 如果您想要测试通过上传密钥签名的 APK,则必须向使用您的应用签名进行身份验证的所有服务或 API(例如 Google Maps API 或 Facebook SDK)注册您的上传密钥。
  • 如果您使用了任何 Google API,建议您在 Google Cloud Console 为您的应用注册上传证书。

上传密钥丢失或被盗

如果您丢失了自己的私有上传密钥或者密钥被盗,则可以创建一个新密钥,然后让您的帐号所有者联系支持团队以重置该密钥。联系支持团队时,请确保您的帐号所有者随附了 upload_certificate.pem 文件。

在我们的支持团队注册新的上传密钥后,您会收到一封电子邮件,然后您可以更新密钥库,并向 API 提供商注册密钥。

重要提示:重置上传密钥并不会影响 Google Play 在您向用户提供 APK 之前用于对 APK 重新签名的应用签名密钥。

该内容对您有帮助吗?
您有什么改进建议?

需要更多帮助?

登录可获取更多支持选项,以便快速解决您的问题