应用更新的运作方式

本指南介绍了 Android 平台和 Google Play 处理应用更新的方式,并讨论了为在多个应用商店中发布应用的开发者提供的各种选项。

Android 如何处理应用更新

每个 Android 应用均有一个唯一的应用 ID,像 Java 或 Kotlin 软件包名称一样,例如 com.example.myapp。此 ID 可以作为每个应用在设备上的唯一标识。Android 设备一次只能安装一个具有指定应用 ID 的应用。

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

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

请注意,如果多个更新具有相同的签名证书并且具有相同或更高的版本代码,Android 内部并没有防范措施能够阻止不同的安装程序更新应用。

如要安装不符合上述条件的应用,用户必须先卸载当前已安装的版本,而卸载操作会清除设备上的所有应用数据。

Google Play 如何更新应用

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

  • 确保用户及时更新。建议让应用保持为最新版本,这样做可以保护用户免受安全问题的威胁,并让用户从最新的功能改进中受益。
  • 尊重用户的选择。Google Play 会根据用户选择的更新偏好设置(例如允许或禁止使用按流量计费的移动网络)更新与用户账号相关联的应用。
  • 尊重开发者的选择。Google Play 在确定应用更新时会使用开发者的配置选项。
  • 避免浪费资源。通过优化何时下载更新来延长电池续航时间,并利用压缩和打补丁等技术最大限度地减少流量消耗。

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

  • 该应用使用同一个应用 ID 在 Google Play 上发布
  • 已发布应用的签名证书与当前已安装版本的签名证书匹配,或者包含有效的 proof-of-rotation
  • 该应用是用户库的一部分,或者已由原始设备制造商 (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 和两个不同的签名密钥。

您可能想尽量减少签名密钥的重复使用,从而降低密钥泄露的风险,为实现此目的,您可以为每个应用商店使用不同的应用签名密钥。这样做就可以阻止跨商店更新。

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

允许跨商店更新

您可能想让每个应用商店都能为您的应用执行跨商店应用更新。如果您在各应用商店中分发的应用具有相同的内容,并想优先确保用户应用处于更新状态,就可以选择这样做。只要您在发布应用的所有应用商店中使用相同的应用 ID 和签名密钥,那么无论用户最初从何处下载应用,每个应用商店都能够更新该应用的安装文件。

不过,这可能导致用户面临不可预测的行为,具体取决于每个应用商店选择实现跨商店应用更新的方式。例如,用户可能停用了某个应用商店的更新,但没有意识到另一个应用商店可能会继续提供更新。

如果您之前允许跨商店更新,但想要开始优先使用某个特定的更新来源(即当设备上提供时优先使用该来源),那么您可以在偏好的应用商店中使用更高的版本代码发布应用,而在其他应用商店中继续使用较低的版本代码发布应用。一旦设备上安装了来自首选来源的较高版本代码更新后,其他应用商店将无法在该设备上执行跨商店更新。