OTA 升级是 Android 系统提供的标准软件升级方式。 它功能强大,提供了完全升级、增量升级模式,可以通过 SD卡升级,也可以通过网络升级。

那如何生成差分升级包呢?

Android源码的根目录下有以下两个命令:

1、make ——会生成系统的img文件,system.img,boot.img,userdata.img,recovery.img

2、make otapackage——会生成sd卡用的全部系统升级包,如msm8974-target_files-eng.xxxx.zip

要生成差分升级包,需要先制作出两个全升级包,然后根据这两个升级包做出差分升级包,这里以高通的msm8974为例,讲诉Android差分包的制作过程。

1、制作全系统升级包

1.1 使能编译脚本  在Android源码目录下运行source build/envsetup.sh

1.2 选择具体机型  在终端运行lunch,随后会打印机型列表,通过输入数字选择具体的机型

1.3 编译 在终端运行make,如果之前没有编译过Android源码,该过程相当久。

1.4  make otapackage

注(1.1-1.3也是Android源码官方的标准编译方式,其实也是输出一些临时变量,供编译时使用,可通过    printenv查看具体的配置信息,很简单对不对)

2、建立一个目录

这个随意,在哪里建都行, 主要要于保存升级文件如

mkdir ~/OTA

注(~代表为用户目录,一般为/home/用户名,可通过cd ~,然后通过pwd查看路径)

3、将编译生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip 拷贝并且更名放到目录~/OTA/A.zip

4、在代码中做一些修改,产生一些差异

5、第二次make;make otapackage(修改于Android源码后out/target/product/msm8974/文件在重新编译后,某个文件(如apk)虽已不再生成,但该文件不会自动删除(上一次的生成文件残留),个人感觉这个有BUG,希望谷歌方面改进一下,这样我们在make之前,最好手动删除一下out/target/product/msm8974/system这个目录)

6、将第二次编译生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip 拷贝并且更名放到目录~/OTA/B.zip

7、在src根目录下执行制作差分包的命令,必须在src根目录下执行,因为ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。

./build/tools/releasetools/ota_from_target_files  -i     。

如: ./build/tools/releasetools/ota_from_target_files -i ~/OTA/A.zip ~/OTA/B.zip ~/OTA/update.zip

注:-i指定制作差分包,~/OTA/update.zip  就是升级用的差分包,这个脚本要在Android源码的根目录下执行。

8、升级原理

打开update.zip,有一个升级脚本META-INF/com/google/android/updater-script。Android就是根据这个脚本进行升级的,有兴趣的可以研究一下。当然升级失败了,最好从这个脚本中找原因了,因为这个文件会打印升级过程中的信息。通过adb shell,进入/tmp目录,有个文件记录了升级过程的信息,可通过这个文件查看升级失败的原因。

9、应用升级包

差分包制作好后,可以用Android的recovery应用该升级包。应用该升级包的时候,遇到了两个问题,这里给大家分享一下。

9.1时间戳失败

时间戳失败即OTA包必须比recovery的编译时间要早,这个在编译的时候控制一下即可。当然,你也可屏蔽OTA包的时间戳检测,见http://blog.csdn.net/mike8825/article/details/49332249

9.2指纹校验失败。差分升级包就是比较现存基础包与原来的基础包的差异而生成的,即该OTA包有特定的应用背景(用于两个差分包之间)。升级过程中,升级脚本(打开该升级包,如下图所示)会检测fingerprint,确保该升级包被正确应用。fingerprint这个属性存在于/build.prop,可通过adb shell进入根路径,通过cat build.prop查看这个属性(或getprop)。如果自己做版本控制的话,这个也可以屏蔽。关于指纹校验该篇博客有较详细的介绍http://blog.csdn.net/huangyabin001/article/details/44465145。

9.3提示system分区不够大,升级失败。这里的system分区为500M,剩余200M。这里感觉挺奇怪的,200M的的空间还升级不了一个20多M的升级包。开始的时候认为是selinux引起的,因为串口会打印一下selinux的错误,尝试改正这些错误后,升级包并没有应用成功。这里,单纯一点,它提示system分区容量不够,那咱就给它大一点哦。尝试修改将system分区的容量改为1G后,成功升级。

关于OTA包的详解见

http://blog.csdn.net/thl789/article/details/8743743

linux差分包升级流程,OTA 差分升级包的制作相关推荐

  1. Android 系统(136)---OTA 差分升级包的制作

    OTA 差分升级包的制作 OTA 升级是 Android 系统提供的标准软件升级方式. 它功能强大,提供了完全升级.增量升级模式,可以通过 SD卡升级,也可以通过网络升级. 那如何生成差分升级包呢? ...

  2. Air780E|FOTA|IOT|FotaToolkit|空中下载软件升级|云平台|CSDK|差分包升级|编译|官方demo|学习(1):example_fota_iot差分包升级示例

    目录 基础资料 探讨重点 硬件准备 ​内容参考 2.1 编译底包 2.2 编译升级包 2.3 Fota CSDK样例使用说明 2.4 差分包生成 三.差分包升级测试流程 基础资料 基于Air780E开 ...

  3. android ota服务器搭建,Android OTA 差分包升级

    稍作修改,因为直接用会有些错误 另外附上超详细的recovery模式update.zip升级分析说明的地址: 根目录下两个命令: 1.make --会生成系统的img文件,system.img,boo ...

  4. android差分升级原理,BigNews Android 增量更新框架差分包升级 @codeKK c开源站

    支持增量包/差分包/升级包 原理:在服务器端使用 bsdiff 工具将新老安装包的差异打包为一个体积较小的差分包/升级包,然后在 App 端通过 bspatch 工具(和 bsdiff 配套的)用差分 ...

  5. RK3288 RK3368 瑞芯微RK系列Android生成OTA差分升级包

    一.OTA完整包生成方法 OTA完整包可用于T卡本地升级和OTA在线升级.OTA完整包包含完整的system.recovery. 和boot.img. 发布一个版本固件正确顺序: make -j4 m ...

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

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

  7. 升级包的制作与升级流程简介

    #升级包的制作与升级的流程 一.升级包的制作 1.Makefile make otapackage是一个.PHONY伪目标,查看\build\core\Makefile: .PHONY: otapac ...

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

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

  9. android ota升级服务,android 标准OTA升级流程

    标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...

最新文章

  1. 自动配置原理精讲||@Conditional ||怎么知道哪些自动配置类生效? 启用debug=true属性(在配置文件配置);
  2. 用系统滚动条实现NumericUpDown的原理
  3. [Android Pro] 通过IMSI判断手机是移动、联通、电信
  4. P6834-[Cnoi2020]梦原【数学期望,树状数组】
  5. TypeScript BigInt
  6. Linux的逻辑卷状态不可用,linux – 逻辑卷在引导时处于非活动状态
  7. iOS开发 IAP苹果内购
  8. jquery 弹出层
  9. 使用weui滚动加载结合php实现分类页数据列表
  10. seq()函数--R语言
  11. 最全事业单位考试计算机基础知识试题,最全的事业单位考试计算机基础知识试题...
  12. QT图形显示和处理7
  13. 国家公祭日悼念:黑白网页背景设置教程
  14. 搜索引擎优化核心关键词策略
  15. 用C语言实现移位密码加密与解密
  16. 运动耳机品牌推荐,热门六款运动耳机推荐
  17. 使用APICloud AVM框架开发人事档案管理助手APP
  18. MTBF平均故障间隔时间
  19. SQL Server 的几个故障
  20. 阿伟,别打电动了,休息一下好不好

热门文章

  1. java 字符串转dom对象_xml类型的字符串转换为Dom对象
  2. python正向切片_使Python切片正常(正/正向+无无+无负索引+在边界内)
  3. IDEA里的web.xml页面的Servlet名称报错下方出现红色下划线
  4. 默认选中_双击dwg图纸,怎么设置默认天正打开?
  5. iOS里面MVC模式详解
  6. html列目录带图片,根据目录下的图片的个数,往html文件填充对应数量的img标签,请问有没有实现这种需求的工具?...
  7. 图片动画效果html5,8个实用炫酷的HTML5图片动画应用
  8. python回车键绑定按钮_python tkinter 绑定回车键
  9. python环境变量的配置 alias_配置别名
  10. modifying的博客