本指南介绍了 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 和签名密钥,那么无论用户最初从何处下载应用,每个应用商店都能够更新该应用的安装文件。
不过,这可能导致用户面临不可预测的行为,具体取决于每个应用商店选择实现跨商店应用更新的方式。例如,用户可能停用了某个应用商店的更新,但没有意识到另一个应用商店可能会继续提供更新。
如果您之前允许跨商店更新,但想要开始优先使用某个特定的更新来源(即当设备上提供时优先使用该来源),那么您可以在偏好的应用商店中使用更高的版本代码发布应用,而在其他应用商店中继续使用较低的版本代码发布应用。一旦设备上安装了来自首选来源的较高版本代码更新后,其他应用商店将无法在该设备上执行跨商店更新。