Android下的配置管理之道之OTA 軟件包工具

OTA 軟件包工具

build/tools/releasetools 中提供的 ota_from_target_files 工具可以編譯兩種類型的軟件包:完整更新軟件包和增量更新軟件包。該工具將 Android 編譯系統生成的 target_files .zip 文件作爲輸入文件。

完整更新

完整更新是指軟件包將對設備的整個最終狀態(系統分區、啓動分區和恢復分區)進行更新。只要設備能夠接收軟件包並啓動恢復系統,軟件包就可以安裝所需的版本,而不受設備當前狀態的影響。

示例:使用發佈工具爲假設的 tardis 設備編譯完整更新:

# first, build the target-files .zip
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

target_files .zip 包含構建 OTA 軟件包所需的所有內容。

./build/tools/releasetools/ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_update.zip 現已準備就緒,可以發送到測試設備(所有內容均使用測試密鑰進行簽名)。對於用戶設備,請生成並使用自己的私鑰,有關詳情,請參閱對要發佈的版本進行簽名。

增量更新

增量更新包含一組要應用於設備上的已有數據的二進制補丁程序。以下原因可能會導致此類更新軟件包非常小:

未更改的文件不需要包含在其中。
更改的文件通常與之前的版本非常相似,因此軟件包中只需包含針對兩個文件之間的不同之處進行的編碼。
只有當設備具有構建相應軟件包所使用的舊版本或源版本時,您才能在設備上安裝增量更新軟件包。要構建增量更新,您需要擁有上一個版本(您要更新的版本)中的 target_files .zip 以及新版本中的 target_files .zip。

./build/tools/releasetools/ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip # make incremental from the older version

該版本與上一個版本非常相似,而且增量更新軟件包(約 1 MB)比對應的完整更新軟件包 (60 MB) 小得多。

注意:要爲後續更新生成基於塊的 OTA,請將 --block 選項傳遞到 ota_from_target_files。

僅當設備運行的上一個版本與相應增量更新軟件包的起點版本完全一樣時,才向其分發該增量更新軟件包。如果嘗試在運行其他版本的設備上安裝該增量包,系統將會顯示恢復錯誤圖標。此時用戶只要重新啓動設備,即可回到舊系統;軟件包會先驗證它要更新的所有文件是否已回到之前的狀態,然後再對其執行操作,因此,如果發生上述情況,設備不應留在半升級狀態。

注意:爲了提供最佳用戶體驗,您應當每 3-4 次增量更新提供 1 次完整更新。這樣有助於用戶及時更新到最新版本,並避免冗長的增量更新安裝序列。

更新軟件包

更新軟件包(ota_update.zip、incremental_ota_update.zip)是包含可執行二進制文件 META-INF/com/google/android/update-binary 的 .zip 文件。對軟件包上的簽名進行驗證後,恢復進程會將該二進制文件解壓到 /tmp 並運行它,同時傳遞以下參數:

更新二進制 API 版本號。如果向更新二進制文件傳遞的參數發生變化,此數字將遞增。
命令管道的文件描述符。更新程序可以使用此管道將命令發送回恢復二進制文件(主要用於界面變化,例如向用戶指示進度)。
更新軟件包 .zip 文件的文件名。
恢復軟件包可以使用任何靜態鏈接的二進制文件作爲更新二進制文件。OTA 軟件包構建工具使用更新程序(bootable/recovery/updater 中的源),該程序提供一種可以執行很多安裝任務的簡單腳本語言。您可以替換設備上運行的任何其他二進制文件。

要詳細瞭解更新程序二進制文件、edify 語法和內建函數,請參閱 OTA 軟件包內部探祕。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章