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