本指南介绍了 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 和签名密钥,则每个应用商店都能够更新您的应用安装,无论用户最初从哪里下载了该应用。
但是,这可能会导致用户的行为不可预测,具体取决于每个应用商店如何选择实现跨商店应用更新。例如,用户可能会禁用来自一个商店的更新,而没有意识到另一个商店可能会继续提供更新。
如果您之前允许跨商店更新,但现在希望在设备上存在时优先使用特定的更新源,则可以在您首选的应用商店中发布具有更高版本代码的应用,并在其他应用商店中继续发布具有较低版本代码的应用。一旦从首选来源安装了更高版本代码的更新,其他应用商店将无法在该设备上进行跨更新。