Android Fota包制作

  • Fota包生成步骤
  • 问题

Fota包生成步骤

在Android系统编译(make)完成后,执行 make otapackage即可生成制作差分包所需的target package。
target包路径:android/out/target/product/msm_xxxx/target_files-package.zip
解压target_files-package.zip后,会看到一个ota_target_files.zip,这是制作Fota包需要的ota包。

Fota包是利用base版本(刷在手机中版本)ota_target_files.zip和目标版本的ota_target_files.zip进行制作的。
将base版本的ota_target_files.zip重命名为base.zip,目标版本的ota_target_files.zip重命名为target.zip,将base.zip复制到目标版本target_files-package.zip的解压目录,然后在该目录下执行Fota生成命令。

Fota生成命令:
使用testkey签名Fota包:
./build/tools/releasetools/ota_from_target_files -v --block -p out/host/linux-x86 -k build/target/product/security/testkey -i base.zip target.zip update.zip
使用releasekey签名Fota包:
./build/tools/releasetools/ota_from_target_files -v --block -p out/host/linux-x86 -k build/target/product/security/releasekey -i base.zip target.zip update.zip

对update包重新签名:
java -Xmx2048m -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/releasekey.x509.pem build/target/product/security/releasekey.pk8 update.zip update1.zip
Note:不同平台Fota包的生成命令可能存在差异。

问题

在Fota的生成过程中,我遇到过如下问题:
错误log:

Exception in thread Thread-1:
Traceback (most recent call last):File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_innerself.run()File "/usr/lib/python2.7/threading.py", line 754, in runself.__target(*self.__args, **self.__kwargs)File "/home/huangxiaobin/fota/0112/build/tools/releasetools/blockimgdiff.py", line 1535, in SplitLargeApkssrc_name, tgt_name, imgdiff_output)
AssertionError: Failed to create imgdiff patch between //system/app/FactoryTest/FactoryTest.apk and //system/app/FactoryTest/FactoryTest.apk:
W/ziparchive(350584): Zip: bad offsets (dir 16961536, size 18126, eocd 16176846)
imgdiff E 04-20 11:49:38 350584 350584 imgdiff.cpp:661] Failed to open zip file /tmp/src-AyMOMQ: Invalid offset


log提示在对FactoryTest.apk制作差分的时候出错了,疑似system.map不匹配导致的(可能是集成应用所用方法不完善)。

解决方案:
FactoryTest.apk无法制作差分,对该apk进行整体升级。
修改build/make/tools/releasetools/blockimgdiff.py脚本。

diff --git a/build/make/tools/releasetools/blockimgdiff.py b/build/make/tools/releasetools/blockimgdiff.py
--- a/build/make/tools/releasetools/blockimgdiff.py
+++ b/build/make/tools/releasetools/blockimgdiff.py
@@ -192,6 +192,27 @@ class Transfer(object):self.src_sha1 = src_sha1self.style = style+    if tgt_name == "//system/app/FactoryTest/FactoryTest.apk":
+        self.style = "new"
+    #如果多个应用报错,按照相同方式可以添加多个apk
+ # We use OrderedDict rather than dict so that the output is repeatable;# otherwise it would depend on the hash values of the Transfer objects.self.goes_before = OrderedDict()
@@ -220,7 +241,7 @@ class Transfer(object):sum(sr.size() for (_, sr) in self.use_stash))def ConvertToNew(self):
-    assert self.style != "new"
+    #assert self.style != "new"self.use_stash = []self.style = "new"self.src_ranges = RangeSet()
@@ -1357,11 +1378,11 @@ class BlockImageDiff(object):# Split large APKs with imgdiff, if possible. We're intentionally checking# file types one more time (CanUseImgdiff() checks that as well), before# calling the costly RangeSha1()s.
-      if (self.FileTypeSupportedByImgdiff(tgt_name) and
-          self.tgt.RangeSha1(tgt_ranges) != self.src.RangeSha1(src_ranges)):
-        if self.CanUseImgdiff(tgt_name, tgt_ranges, src_ranges, True):
-          large_apks.append((tgt_name, src_name, tgt_ranges, src_ranges))
-          return
+      #if (self.FileTypeSupportedByImgdiff(tgt_name) and
+      #    self.tgt.RangeSha1(tgt_ranges) != self.src.RangeSha1(src_ranges)):
+      #  if self.CanUseImgdiff(tgt_name, tgt_ranges, src_ranges, True):
+      #    large_apks.append((tgt_name, src_name, tgt_ranges, src_ranges))
+      #    returnAddSplitTransfersWithFixedSizeChunks(tgt_name, src_name, tgt_ranges,src_ranges, style, by_id)

Android Fota(差分包)制作相关推荐

  1. Android OTA差分包制作(RK平台)

    一.步骤说明 1. 编译两个新旧版本,需要用到两个版本的rk3566_r-target_files-eng.zip文件. 2. 将两个版本的rockdev/Image-rk3566_r/rk3566_ ...

  2. Android M 差分包的制作流程

    曾经参考了网上很多制作差分包的流程,结果一直起不来, 最后经过各种摸索和测试,终于在android M 上制作出了可以正常工作Android M 差分包. 希望献给正在迷茫于此的你. Android ...

  3. fota 差分包_FOTA升级

    分以下三个模块分析FOTA升级介绍 1.在一个高通安卓项目中部署FOTA升级 2.Android ota升级的基本过程 3.Android ota升级异常分析 升级: 从方法上分为整个文件替换,以打p ...

  4. fota 差分包_艾拉比FOTA差分升级助力电力厂商加速软件迭代

    电力载波作为电力系统特有的通信方式,广泛应用在远程抄表领域.但是由于电力载波拥有可靠性差,通讯不稳定的缺点,使得设备的升级成功率比较低.本期的小课堂,艾拉比将系统介绍下我们提供的FOTA差分升级是如何 ...

  5. Android 差分包制作流程分析

    整包与差分包生成流程 差分包生成指令 make otapackage 将编译生成的(xxx项目为例) out/target/product/xxxxxxx/full_xxx_hxxxx-target_ ...

  6. Fota 升级-差分包制作

    Fota 升级差分包制作 1. 升级包打包 make otapackage 编译界面输入 make otapackage,主要生成 target_files 和 ota 文件 \out\target\ ...

  7. fota 差分包_FOTA相关知识总结

    Android OTA升级,顾名思义是指over-the-air升级方式.通过在线下载安装包的形式,对整个系统进行升级. 在说FOTA之前,先看看Android的系统分区.具体参考官方网页 Andro ...

  8. fota 差分包_chaoFOTA

    远程升级套件 简介 远程升级(Firmware Over The Air)可通过无线网络实现固件升级.OneOS的OTA为差分升级,采用此方式可极大降低升级包的大小.OneOS OTA组件分两部分:B ...

  9. RK3326平台Android9.0OTA差分包制作

    源码全编成功后执行make otapackage 会生成两个OTA包,路径如下 #整包 out/target/product/rk3326/rk3326-ota-eng.ubuntu.zip #用于制 ...

最新文章

  1. 使用C语言扩展Python(三)
  2. jmeter 监听的介绍
  3. c++求解自行车慢速比赛问题_一元一次方程应用专题,十大题型(包括数轴上动点问题)...
  4. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符
  5. 10行代码实现小程序支付功能!丨实战
  6. QString与中文问题
  7. c语言limits.h_ (limits.h)C ++中(整数类型的大小)的宏常量
  8. php asserttrue,PHP8.0的新特性:错误处理方面已经改进
  9. 黑鱼资源网完整版织梦整站源码打包分享
  10. 设计模式学习笔记——装饰(Decorator)模式
  11. fcc无线充电认证_FCC规定了无线路由器固件,轮椅和胰岛素的开放状态以及更多新闻
  12. Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)
  13. asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
  14. java中使用QBC的好处_使用QBC的方式应用多对多关系中的查询
  15. android 禁用剪切板_如何阻止应用程序阅读Android剪贴板以保护您的隐私
  16. 如何设置修改 Windows 7 开机启动项
  17. 文字绘制——pygame之旅
  18. ORACLE DataGuard环境搭建详细步骤(新方法)
  19. 开放API接口整合多元办公能力,企业微信助IT企业打造高效办公平台
  20. 爱上一个人的七种表现

热门文章

  1. 腾讯Oceanus实时计算平台架构设计
  2. 【基础试题】输出如下图形 Time Limit:1000MS Memory Limit:65536K Total Submit:604 Accepted:384 Description   输
  3. 当“性价比”失败时,小米应该如何突破?
  4. java 导入excel工具类_java Excel工具类,导入导出Excel数据
  5. 港府:“同股同权”制度也有调整空间 尊重阿里
  6. JS特效-星空太空效果-极简
  7. 人人车被曝近百员工聚集北京总部维权
  8. 用汇编写的计算阶乘N!的程序
  9. 诺基亚7.2 刷入第三方ROM
  10. 扩散模型(Diffusion Model,DDPM,GLIDE,DALLE2,Stable Diffusion)