您可以為運行 Android 5.0 的新裝置啟用基於區塊的無線 (OTA) 更新。 OTA 是 OEM 遠端更新設備系統分區的機制:
- Android 5.0以上版本使用區塊OTA更新來確保每個裝置使用完全相同的分割區。區塊 OTA 不是比較各個檔案和計算二進位補丁,而是將整個分區作為一個檔案處理併計算單個二進位補丁,確保生成的分區準確包含預期的位元。這允許設備系統映像透過 fastboot 或 OTA 達到相同的狀態。
- Android 4.4及更早版本使用檔案 OTA 更新,這確保裝置包含相似的檔案內容、權限和模式,但允許時間戳記和底層儲存佈局等元資料根據更新方法在裝置之間有所不同。
由於區塊 OTA 確保每個裝置使用相同的分割區,因此它允許使用 dm-verity 對系統分割區進行加密簽章。有關 dm-verity 的詳細信息,請參閱驗證啟動。
注意:在使用 dm-verity 之前,您必須有一個工作區塊 OTA 系統。
建議
對於搭載 Android 5.0 或更高版本的設備,請在工廠 ROM 中使用區塊 OTA 更新。若要為後續更新產生基於區塊的 OTA,請將--block
選項傳遞給ota_from_target_files
。
對於搭載 Android 4.4 或更早版本的設備,請使用檔案 OTA 更新。雖然可以透過發送 Android 5.0 或更高版本的完整區塊 OTA 來轉換設備,但它需要發送比增量 OTA 大得多的完整 OTA(因此不鼓勵)。
由於 dm-verity 需要僅在搭載 Android 5.0 或更高版本的新裝置中提供的引導程式支持,因此您無法為現有裝置啟用 dm-verity。
使用 Android OTA 系統(恢復映像檔和產生 OTA 的腳本)的開發人員可以透過訂閱android-ota@googlegroups.com郵件清單來跟上變化。
文件 OTA 與塊 OTA
在基於檔案的 OTA 期間,Android 會嘗試在檔案系統層(逐個檔案)更改系統分割區的內容。更新不能保證以一致的順序寫入檔案、具有一致的上次修改時間或超級區塊,甚至不能保證將區塊放置在區塊裝置上的同一位置。因此,基於檔案的 OTA 在啟用 dm-verity 的裝置上失敗;嘗試 OTA 後,設備無法啟動。
在基於區塊的 OTA 過程中,Android 會向裝置提供兩個區塊映像(而不是兩組檔案)之間的差異。此更新使用以下方法之一在區塊層級(檔案系統下方)根據相應的建置伺服器檢查裝置建置:
- 全面更新。複製完整的系統映像很簡單,並且使補丁生成變得容易,但也會產生較大的映像,從而使應用程式補丁變得昂貴。
- 增量更新。使用二進位差異工具產生較小的圖像並使補丁應用程式變得容易,但在生成補丁本身時會佔用大量記憶體。
注意: adb fastboot
在裝置上放置與完整 OTA 完全相同的位,因此刷新與區塊 OTA 相容。
更新未修改的系統
對於運行 Android 5.0 且係統分區未修改的設備,區塊 OTA 的下載和安裝過程與檔案 OTA 相同。但是,OTA 更新本身可能包含以下一項或多項差異:
- 下載大小。完整區塊 OTA 更新的大小與完整檔案 OTA 更新的大小大致相同,增量更新可能隻大幾兆位元組。
一般來說,增量區塊 OTA 更新大於增量檔案 OTA 更新,原因如下:
- 資料保存。基於區塊的 OTA 比基於文件的 OTA 保留更多資料(文件元資料、dm-verity 資料、ext4 佈局等)。
- 計算算法差異。在檔案 OTA 更新中,如果兩個版本中的檔案路徑相同,則 OTA 套件不包含該檔案的資料。在區塊 OTA 更新中,確定檔案中的變化很小或沒有變化取決於修補程式計算演算法的品質以及來源系統和目標系統中檔案資料的佈局。
- 對故障快閃記憶體和 RAM 的敏感性。如果檔案損壞,只要不觸及損壞的文件,檔案 OTA 就會成功,但如果偵測到系統分割區上有任何損壞,區塊 OTA 就會失敗。
更新修改後的系統
對於運行 Android 5.0 且係統分區已修改的裝置:
- 增量區塊OTA更新失敗。系統分割區可能會在
adb remount
期間或因惡意軟體而被修改。檔案 OTA 允許對分割區進行一些更改,例如新增不屬於來源或目標建置的檔案。但是,區塊 OTA 不允許新增分割區,因此使用者需要安裝完整的 OTA(覆蓋任何系統分割區修改)或刷新新的系統映像以啟用未來的 OTA。 - 嘗試更改已修改的檔案會導致更新失敗。對於文件和區塊 OTA 更新,如果 OTA 嘗試更改已修改的文件,則 OTA 更新會失敗。
- 嘗試存取已修改的檔案會產生錯誤(僅限 dm-verity) 。對於檔案和區塊 OTA 更新,如果啟用 dm-verity 並且 OTA 嘗試存取系統檔案系統的修改部分,則 OTA 會產生錯誤。