天天看點

OTA更新Google官方文檔翻譯——OTA Package Tools

英語是硬傷,本文僅為個人了解,希望能與大家一起學習進步,如果有翻譯不當之處,歡迎大家指正,以免誤導他人,謝謝。

原文網址:https://source.android.com/devices/tech/ota/tools

OTA Package Tools

build/tools/releasetools 目錄下的ota_from_target_files工具可以生成兩種類型的更新包:整包和差分增量更新包。工具以target-files.zip中間包作為輸入。

整包更新

整包更新會更新包括system、boot、recovery分區在内的左右資料。隻要裝置可以接受到更新包并且可以進入到recovery模式下,那麼更新就可以進行,同時整包更新對裝置目前的版本沒有要求。

以下是給出的舉例:

# first, build the target-files .zip

. build/envsetup.sh && lunch tardis-eng

mkdir dist_output

make dist DIST_DIR=dist_output

重點是最後一步,根據target中間包生成ota_update.zip更新包,也就是最終的整包。預設可以用testkey簽名調試用,對于正式發貨的機器,各家會生成自己的private key,這個具體怎麼做後面也會介紹。

差分增量更新

差分增量更新與整包不同,更新包中包含的是一個個的二進制patch,這麼做的主要原因是減少更新包的大小,畢竟每次都用整包下載下傳的時間較長,而且有些裝置還隻能用流量下載下傳。

  • 對于不涉及更新的檔案更新包中不會涉及
  • 對于有差異的檔案更新包中隻會包含前後兩個版本之間的變化部分

對于差分更新,不同于整包對基礎版本的不限制,差分要求固定的基礎版本,同時在做包時,需要前後兩個版本的target.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
           

如果是做block-based的差分更新包,在其中加入—block參數即可。

差分更新包的制作類似于整包,但是大小會小很多,大概是1MB代替60MB。

差分更新包隻能釋出到具有相同基礎版本的裝置上,如果嘗試安裝到其他基礎版本的裝置上會發生錯誤,在recovery正式更新之前,會有一步校驗的操作,校驗更新包的來源,這樣在校驗失敗後,重新開機裝置後可以傳回到原始的系統中,避免更新包與基礎版本的不比對造成更新一半失敗的情況。

更新包

更新包(不論是整包還是差分增量更新包)是一個zip格式的壓縮包,包含了一個可執行的二進制腳本,路徑在META-INF/com/google/android/update-binary下。在完成更新包的簽名校驗後,recovery會解壓這個腳本到/tmp目錄下,然後運作,腳本對應的解析部分在bootable/recovery/updater目錄下,詳細後面繼續介紹。