Android OTA增量包update.zip的生成

 Android OTA增量包update.zip的生成

         在上面的過程中生成的update.zip升級包是全部系統的升級包。大小有80M多。這對手機用戶來說,用來升級的流量是很大的。而且在實際升級中,我們只希望能夠升級我們改變的那部分內容。這就需要使用增量包來升級。生成增量包的過程也需要上文中提到的ota_from_target_files.py的參與。

         下面是製作update.zip增量包的過程。

          ① 在源碼根目錄下依次執行下列命令
           $ . build/envsetup.sh
           $ lunch 選擇17
           $ make
           $ make otapackage
           執行上面的命令後會在out/target/product/tcc8800/下生成我們第一個系統升級包。我們先將其命名爲A.zip
          ② 在源碼中修改我們需要改變的部分,比如修改內核配置,增加新的驅動等等。修改後再一次執行上面的命令。就會生成第二個我們修改後生成的update.zip升級包。將  其命名爲B.zip。

          ③ 在上文中我們看了ota_from_target_files.py腳本的使用幫助,其中選項-i就是用來生成差分增量包的。使用方法是以上面的A.zip 和B.zip包作爲輸入,以update.zip包作  爲輸出。生成的update.zip就是我們最後需要的增量包。

              具體使用方式是:將上述兩個包拷貝到源碼根目錄下,然後執行下面的命令。

              $ ./build/tools/releasetools/ota_from_target_files -i A.zip B.zip update.zip。

              在執行上述命令時會出現未找到recovery_api_version的錯誤。原因是在執行上面的腳本時如果使用選項i則會調用WriteIncrementalOTAPackage會從A包和B包中的META目錄下搜索misc_info.txt來讀取recovery_api_version的值。但是在執行make  otapackage命令時生成的update.zip包中沒有這個目錄更沒有這個文檔。

              此時我們就需要使用執行make otapackage生成的原始的zip包。這個包的位置在out/target/product/tcc8800/obj/PACKAGING/target_files_intermediates/目錄下,它是在用命令make otapackage之後的中間生產物,是最原始的升級包。我們將兩次編譯的生成的包分別重命名爲A.zip和B.zip,並拷貝到SD卡根目錄下重複執行上面的命令:

               $ ./build/tools/releasetools/ota_form_target_files -i A.zip B.zip update.zip。

              在上述命令即將執行完畢時,在device/telechips/common/releasetools.py會調用IncrementalOTA_InstallEnd,在這個函數中讀取包中的RADIO/bootloader.img。

              而包中是沒有這個目錄和bootloader.img的。所以執行失敗,未能生成對應的update.zip。可能與我們未修改bootloader(升級firmware)有關。此問題在下一篇博客已經解決。


             在下一篇中講解制作增量包失敗的原因,以及解決方案。


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