android OTA差分包的生成方法

在make android系统后,会生成系统的img文件。

make otapackage 会生成sd卡用的全部系统升级包,有260M多。要生成增量升级包。需要按以下步骤。

  1. mkdir ~/OTA 

  2. source build/envsetup.sh;

  3. choosecombo 1 1 7 eng

  4. make -jxx ;

  5. 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.A.zip

  1. 在代码中产生一些更新

  2. 第二次make;make otapackage

  3. 第二次编译生成的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

  4. -在src根目录下执行./build/tools/releasetools/ota_from_target_files -i 包> 包> <差分包名>。这里必须在src根目录下执行,因为ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。

如: ./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 包> 包>  <差分包名>。)不好用,因为我的是厂家自定义编译脚本,需要用到外部.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调用来的方便

你可能感兴趣的:(OMA,DM)