Android 兼容性定义文档 (CDD) 可更新软件要求设备实现 SystemUpdatePolicy
类。SystemUpdatePolicy
可让设备所有者 (DO) 应用(如果存在)控制系统更新的安装。
通知设备所有者
无线下载 (OTA) 客户端必须使用系统 API 将传入的 OTA 更新通知给设备所有者应用。OTA 客户端还必须包含时间戳,记录 OTA 更新何时开始可用。OTA 客户端可以调用 DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime, boolean isSecurityPatch)
来通知设备所有者应用。如果 OTA 客户端不知道更新是否为安全补丁,则可回退至使用 DevicePolicyManager.notifyPendingSystemUpdate(long updateReceivedTime)
。
如果当前没有可用的更新,OTA 客户端可通过将 updateReceivedTime
参数设置为 -1
来报告此情况。我们建议每当 OTA 客户端对 OTA 服务器进行轮询或有 OTA 推送到客户端时都发送通知。您还可以更频繁地发送通知。
系统更新政策
Android 9 允许设备所有者将 OTA 更新推迟长达 90 天,增强了设备所有者控制更新的能力。此功能主要适用于专用设备(之前称为 COSU)解决方案,可让所有者在重要时段(如节假日)暂停在设备上运行的操作系统版本更新。
为遵守 CDD 的要求,OTA 客户端必须实施行为政策。设备所有者可以设置下列政策,设备系统更新子系统必须遵守这些政策:
设备所有者还可以通过设置冻结时段(在 Android 9 或更高版本中),在重要时段(如节假日或其他繁忙时段)冻结操作系统版本。系统在冻结时段不会安装 OTA 更新。我们建议使用 SystemUpdatePolicy.InstallationOption
(请参见下一部分);不过,OTA 客户端还可以调用 SystemUpdatePolicy.getFreezePeriods()
来检查设备是否处于冻结时段。
实现安装选项
Android 9 引入了专为系统更新客户端设计的 @SystemApi SystemUpdatePolicy.InstallationOption
。SystemUpdatePolicy.InstallationOption
充当政策和冻结时段的封装容器类。根据当前系统更新政策或任何可能设定的冻结时段,安装选项会告知客户端如何针对传入的系统更新执行操作,以及相应操作的有效时长。安装选项可以是下列项之一:
-
TYPE_INSTALL_AUTOMATIC
- 传入的系统更新在可用后会立即安装,且无需用户干预。相应设备会自动重启。 -
TYPE_POSTPONE
- 传入的系统更新最多可延迟 30 天。用户无法手动安装更新。设备制造商可以选择是否屏蔽安全补丁。 -
TYPE_PAUSE
- 传入的系统更新可无限期延迟,除非另行通知。用户无法手动安装更新。TYPE_PAUSE
会延迟所有更新,包括安全补丁。
系统更新客户端可以使用 SystemUpdatePolicy.getInstallationOptionAt(long when)
查询 SystemUpdatePolicy.InstallationOption
,其中 when 表示查询安装选项的时间(从纪元开始计算的毫秒数)。通过使用 SystemUpdatePolicy.getInstallationOptionAt(long when)
方法,系统更新客户端可以在有效时间结束前,根据返回的选项执行操作。在返回的选项失效后,客户端可以使用新的时间戳再执行一次查询,以获取最新的选项。
系统更新客户端必须监听 DevicePolicyManager.ACTION_SYSTEM_UPDATE_POLICY_CHANGED
广播,以防整个政策发生更新。
验证 TYPE_PAUSE 政策
您可以手动验证 TYPE_PAUSE
选项是否能在 OTA 系统上正常工作。
政策 TYPE_PAUSE 有效
如需验证 TYPE_PAUSE
政策是否发挥作用,请执行以下操作:
-
设置自动政策并指定
TYPE_PAUSE
。 - 当系统时钟处于暂停期时,推送 OTA 更新。
- 确认设备未进行 OTA 更新,且用户无法手动安装更新。
- 如果设备为 A/B 设备,请重新启动设备,并确认重启操作不会触发自动安装更新。
政策 TYPE_PAUSE 已过期
如需验证过期的 TYPE_PAUSE
政策是否还能发挥作用,请执行以下操作:
-
设置自动政策并指定
TYPE_PAUSE
。 - 当系统时钟处于暂停期时,推送 OTA 更新。
- 等待暂停期结束。
- 确认设备会自动重新启动,并且在重启后进行 OTA 更新。