应用更新的工作原理

本指南解释了 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 和签名密钥,那么每个应用商店都有能力更新您的应用安装,无论用户最初从哪里下载该应用。

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

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