应用更新的工作原理

本指南介绍了 Android 平台和 Google Play 如何处理应用更新,并讨论了在多个应用商店发布应用的开发人员的各种选项。

Android 如何处理应用更新

每个 Android 应用都有一个唯一的 应用 ID,它看起来像 Java 或 Kotlin 包名称,例如 com.example.myapp。此 ID 在设备上唯一标识每个应用。Android 设备一次只能安装一个具有给定应用 ID 的应用。

为了使 Android 平台接受更新,必须满足以下条件

  • 更新的应用 ID 必须与已安装的应用相同。
  • 更新的签名证书必须与已安装应用的签名证书相同,或者必须包含有效的 轮换证明
  • 更新的版本代码必须高于或等于已安装应用的版本代码。
  • 在某些情况下,用户可能需要 接受更新

请注意,当更新具有相同的签名证书以及相同或更高的版本代码时,没有内置的机制来防止不同的安装程序更新应用。

要安装不满足上述条件的应用,用户必须首先卸载当前安装的版本,这会从设备中删除所有应用数据。

Google Play 如何更新应用

Google Play 更新应用的方法基于以下原则

  • 使用户保持最新状态。 建议保持应用更新,以保护用户免受安全问题的影响,并从最新的功能改进中受益。
  • 尊重用户的选择。 Google Play 会更新与用户帐户关联的应用,并根据他们选择的更新偏好(例如,允许或不允许使用计费数据)进行更新。
  • 尊重开发者的选择。 Google Play 在确定应用更新时会使用开发者的配置选项。
  • 避免浪费资源。 通过优化更新下载时间来节省电池电量,并使用压缩和修补等技术最大限度地减少数据使用量。

对于安装在设备上的给定应用,如果满足以下条件,Google Play 会更新该应用

  • 该应用在 Google Play 上发布,具有相同的应用 ID。
  • 已发布应用的签名证书与当前安装版本的签名证书匹配,或者包含有效的 轮换证明
  • 该应用是 用户库的一部分,或由 OEM 预加载。
  • 根据开发者定义的目标选项,该应用可供此用户和此设备使用。
  • 与 Google Play 上提供的版本相比,已安装的应用 已过时

只要满足这些条件,Google Play 就能更新应用。以下小节提供了列出的一些条件的详细信息。

请注意,在其他情况下,Google Play 会代表开发者下载应用内容或对应用二进制文件进行维护,而不会更改 Android 版本代码,例如,在完成部分下载或下载按需 拆分 时。

在 Google Play 上发布

Google Play 使用应用 ID 唯一标识在 Google Play 上发布的应用。如果已安装应用的应用 ID 与在 Google Play 上发布的应用的应用 ID 匹配,则满足此条件。

用户库的一部分

如果以下任一情况为真,则满足此条件

  • 设备上的任何活动 Google 帐户都曾通过点击 Google Play 上的安装或购买按钮获取过该应用。
  • OEM 将该应用作为系统映像的一部分预加载。

用户还可以手动从其 中删除应用。

已过时

Google Play 通过查看版本代码来确定设备上安装的应用是否已过时,如果 Google Play 上可供下载的版本的版本代码高于已安装版本的版本代码,则 Google Play 认为已安装的应用已过时。

多个应用商店上的应用

在多个应用商店发布应用时,您可以通过几种方式控制跨商店更新。以下部分介绍了这些选项及其潜在的优缺点。

阻止跨商店更新

您可能希望阻止每个应用商店对您的应用执行任何跨商店应用更新。如果您的应用在每个应用商店中的内容不同,您可能选择这样做。这可以通过使用两个不同的应用 ID 发布应用,或使用相同的应用 ID 和两个不同的签名密钥发布应用来实现。

您可能希望最大程度地减少签名密钥的重复使用,以降低密钥泄露的风险,因此每个应用商店使用不同的应用签名密钥。这样做将阻止跨商店更新。

无论您选择哪种方法,Android 都会将没有匹配的应用 ID 和签名密钥的应用视为不兼容。希望从一个商店切换到另一个商店的用户需要删除已安装的应用(这将删除与该应用关联的所有数据),然后从另一个商店重新安装。

允许跨商店更新

您可能希望允许每个应用商店对您的应用执行跨商店应用更新。如果您在所有应用商店中使用相同的内容分发您的应用,并且希望优先考虑用户保持最新,则可以选择这样做。只要您在发布应用的所有应用商店中使用相同的应用 ID 和签名密钥,则每个应用商店都能够更新您的应用安装,无论用户最初从哪里下载了该应用。

但是,这可能会导致用户的行为不可预测,具体取决于每个应用商店如何选择实现跨商店应用更新。例如,用户可能会禁用来自一个商店的更新,而没有意识到另一个商店可能会继续提供更新。

如果您之前允许跨商店更新,但现在希望在设备上存在时优先使用特定的更新源,则可以在您首选的应用商店中发布具有更高版本代码的应用,并在其他应用商店中继续发布具有较低版本代码的应用。一旦从首选来源安装了更高版本代码的更新,其他应用商店将无法在该设备上进行跨更新。