Android OTA 差分包升级
Android OTA 差分包升级
lxp198837 发表于5年前
Android OTA 差分包升级
  • 发表于 5年前
  • 阅读 3681
  • 收藏 3
  • 点赞 1
  • 评论 4

腾讯云 新注册用户 域名抢购1元起>>>   

之前做的差分包升级任务,期间调查并遇到的问题,总结分享一下,备用:)

根目录下两个命令:

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调用来的方便

共有 人打赏支持
粉丝 4
博文 29
码字总数 1087
评论 (4)
fancyTest
博主我make otapackage出现make:no rule to make target otapackage。
我去makefile里看,里面include build/core/main.mk ,但是main.mk里面就没有otapackage这个target。求解。
lxp198837

引用来自“踩小强”的评论

博主我make otapackage出现make:no rule to make target otapackage。
我去makefile里看,里面include build/core/main.mk ,但是main.mk里面就没有otapackage这个target。求解。

生成差分包,首先确保在source目录下执行make
其次看看makefile文件中类似
.PHONY: otapackage
otapackage: $(INTERNAL_OTA_PACKAGE_TARGET)
找不到INTERNAL_OTA_PACKAGE_TARGET。
其他没想到,你可以再研究一下。
学者bo
博主你好!我用android2.3代码通过make target-files-package先后做出了zip包,但我用脚本对这两个zip包生成update.zip的时候遇到跟你类似的情况,就是KeyError: '/system',我通过-k什么的指定key都试过了,还是出这个问题,请博主给分析一下。。。。
学者bo

引用来自“踩小强”的评论

博主我make otapackage出现make:no rule to make target otapackage。
我去makefile里看,里面include build/core/main.mk ,但是main.mk里面就没有otapackage这个target。求解。

兄弟,你的这个问题解决了吗?我也遇到了,如若解决了还望赐教啊
×
lxp198837
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: