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 更新。