原帖地址 http://quanminchaoren.iteye.com/blog/1344607
稍作修改,因為直接用會有些錯誤
根目錄下兩個命令:
1、make ——會生成系統的img文件,system.img,boot.img,userdata.img,recovery.img
2、make otapackage——會生成sd卡用的全部系統升級包,如msm8660_surf-target_files-eng.xxxx.zip
要生成差分升級包,需要先作出兩個全升級包,然后根據這兩個升級包做出差分升級包
1、制作全系統升級包
source目錄下:. build/envsetup.sh(.后有空格)
choosecom 1 1 7 eng
make
make otapackage(或m otapackage)
2、在用戶名下建立一個目錄,這個隨意,在哪里建都行
mkdir ~/OTA
3、將編譯生成的out/target/product/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip 拷貝並且更名放到目錄~/OTA/msm8660_surf-target_files-eng.A.zip
4、在代碼中做一些修改,
5、第二次make;make otapackage
6、第二次編譯生成的out/target/product/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip 拷貝並且更名放到目錄/OTA/msm8660_surf-target_files-eng.tangzm_B.zip
7、在src根目錄下執行制作差分包的命令,必須在src根目錄下執行,因為ota_from_target_files.py這個腳本里面寫定了相對路徑的引用文件。
./build/tools/releasetools/ota_from_target_files -x pagesize=xxxx -k xxxx -d MMC -i <A包> <B包> <差分包名>。
如: ./build/tools/releasetools/ota_from_target_files -x pagesize=4096 -k ~/project/build/target/product/security/testkey -d mmc -v -i ~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip ~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip ~/OTA/update.zip
~/OTA/update.zip 就是升級用的差分包。
注:
在源碼根目錄下采用步驟7中命令格式( ./build/tools/releasetools/ota_from_target_files -x pagesize=xxxx -k xxxx -d MMC -i <A包> <B包> <差分包名>。)不好用,因為我的是廠家自定義編譯腳本,需要用到外部.py文件,所以修改了build/core/Makefile文件,該文件中默認好像執行./build/tools/releasetools/ota_from_target_files生成FullOtaPackage,我在調用位置采用步驟7命令格式保存修改,編譯,根據log顯示看到能夠進行A、B包的差分比較。
-x pagesize=4096 是設置pagesize的大小,因為執行程序的過程中需要這個參數,否則會報錯keyerror。 還有一種情況不加-x,編譯時出現keyerror錯誤,可能是引用外部key-value時,key不存在導致(如:keyerror:'/recovery'),我編譯時折騰了一天,原因是編譯腳本是廠家自定義,里面包含android系統既存編譯命令m otapackage,在自定義的腳本中鍵值對為(recovery,recovery),而在調用build/tools/releasetools/ota_from_target_files中函數時傳的參數為"/recovery"。
-k 是在簽名的時候會用到的信息,不過貌似不加也可以成功,因為后面會執行java命令進行簽名
-d mmc 是指使用文件格式為ext4,默認為mtd,即yaffs2。因為我們這個系統使用了ext4文件系統的支持
-v 顯示具體命令
-i A.zip B.zip Update.zip 為產生增量包,后面跟着源文件和差分包的路徑名稱
不明確的話 ,可以直接打開ota_from_target_files 里面有各個命令的說明。
這個腳本被build/core/Makefile調用,因為Makefile中有引用外部變量所以不用特別設置,但是直接執行這個腳本則要設置import相關信息,好像很麻煩,還是用build/core/Makefile調用來的方便。
