本文转载自:https://blog.csdn.net/csdn66_2016/article/details/73800349

我们在对android系统升级的时候,可以减少升级包的大小,只升级差异部分,也就是差分包升级,相关的描述可以参考:http://blog.csdn.net/csdn66_2016/article/details/70256757

我们在对两个不同的文件进行差分的时候,使用到了两个工具,分别是imgdiff与bsdiff,通过这两个工具产生差异部分的patch,升级的时候打patch即可。这两个工具有什么区别呢,我们看看py中是怎么样区别的:

build/tools/releasetools/common.py:

  1. DIFF_PROGRAM_BY_EXT = {
  2. ".gz" : "imgdiff",
  3. ".zip" : ["imgdiff", "-z"],
  4. ".jar" : ["imgdiff", "-z"],
  5. ".apk" : ["imgdiff", "-z"],
  6. ".img" : "imgdiff",
  7. }
  8. class Difference(object):
  9. def __init__(self, tf, sf, diff_program=None):
  10. self.tf = tf
  11. self.sf = sf
  12. self.patch = None
  13. self.diff_program = diff_program
  14. def ComputePatch(self):
  15. """Compute the patch (as a string of data) needed to turn sf into
  16. tf.  Returns the same tuple as GetPatch()."""
  17. tf = self.tf
  18. sf = self.sf
  19. if self.diff_program:
  20. diff_program = self.diff_program
  21. else:
  22. ext = os.path.splitext(tf.name)[1]
  23. diff_program = DIFF_PROGRAM_BY_EXT.get(ext, "bsdiff")

基本上明白了,针对gz zip jar apk img这种压缩的格式,我们使用imgdiff工具来生成patch,否则我们使用bsdiff工具,这两个工具,有不同的针对性,imgdiff对压缩格式的文件效率更高,普通的不带格式的文件bsdiff更合适,我们姑且这么理解。

之前有个客户在制作差分包的时候失败了,后来看了下,发现是有两个300M+的文件在差分,好像提示超时了,然后我写了个sh,看看这两个文件的差分到底需要多久:

  1. date
  2. imgdiff   file_old   file_new  file_patch
  3. date

结果过了30+分钟之后,生成了file_patch

我们看看,这个common.py中定义的超时时间:

  1. def ComputePatch(self):
  2. """Compute the patch (as a string of data) needed to turn sf into
  3. tf.  Returns the same tuple as GetPatch()."""
  4. ..........................
  5. try:
  6. ptemp = tempfile.NamedTemporaryFile()
  7. if isinstance(diff_program, list):
  8. cmd = copy.copy(diff_program)
  9. else:
  10. cmd = [diff_program]
  11. cmd.append(stemp.name)
  12. cmd.append(ttemp.name)
  13. cmd.append(ptemp.name)
  14. p = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  15. err = []
  16. def run():
  17. _, e = p.communicate()
  18. if e:
  19. err.append(e)
  20. th = threading.Thread(target=run)
  21. th.start()
  22. th.join(timeout=300)   # 5 mins
  23. if th.is_alive():
  24. print "WARNING: diff command timed out"
  25. p.terminate()
  26. th.join(5)
  27. if th.is_alive():
  28. p.kill()
  29. th.join()

这里默认的5分钟超时,那么当imgdiff大于5分钟的时候,就无法差分升级成功了,如果差分失败了,就需要修改这里的超时时间。

说个后话,用300M+的文件去差分升级,也是醉了,还不如直接整包升级得了。

recovery 差分升级包制作超时【转】的更多相关文章

  1. recovery 差分升级包制作超时

    我们在对android系统升级的时候,可以减少升级包的大小,只升级差异部分,也就是差分包升级,相关的描述可以参考:http://blog.csdn.net/csdn66_2016/article/de ...

  2. android OTA升级包制作

    0.签名 java -Xmx2048m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/t ...

  3. android OTA升级包制作【转】

    本文转载自:http://www.thinksaas.cn/topics/0/445/445670.html 0.签名 java -Xmx2048m -jar out/host/linux-x86/f ...

  4. OTA升级包制作工具处理过程分析

    http://blog.csdn.net/ly890700/article/details/56048815 Android Recovery(30)  1.概述  OTA升级包制作工具是一个用pyt ...

  5. Android系统OTA升级包制作【转】

    本文转载自:http://blog.csdn.net/dingfengnupt88/article/details/52882788 Android系统升级分为整包升级和差分包升级,整包升级就是将系统 ...

  6. Android开发小问题集

    由于安卓系统比较复杂,开发中会发中会碰见各种小问题,在此做一些记录,只要觉得有必要就会添加进来. 1.触屏鼠标模式和触屏模式 开发android4.3高通400平台时,用atmel_max 640T作 ...

  7. 制作OTA升级包

    OTA 软件包工具 本文地址http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate-ota-update-zi ...

  8. nno_setup制作升级包必须面临的几个问题 2

    这两天的时间一直在制作应用程序的升级包,期间碰到一些问题这里一并记录下来,相信这是制作升级包必须面临和解决的问题: 1. 升级包安装程序如何不再产生新的安装.卸载程序 Inno_setup中AppId ...

  9. Inno_setup制作升级包必须面临的几个问题

    Inno_setup制作升级包必须面临的几个问题 分类: c/c++/GamingAnyWhere JavaScript linux shell基础知识 2013-12-18 22:14 1496人阅 ...

随机推荐

  1. 转:: 刺鸟:用python来开发webgame服务端(5)

    来源:http://ciniao.me/article.php?id=19 --------------- 刺鸟原创文章,转载请注明出处    在前面的文章中,我们已经开始了不少逻辑功能的开发,在这期 ...

  2. SCSS详解

    SCSS入门 CSS预处理器 定义了一种新的专门的编程语言,编译后成正常的CSS文件.为CSS增加一些编程的特性,无需考虑浏览器的兼容问题,让CSS更加简洁,适应性更强,可读性更佳,更易于代码的维护等 ...

  3. Django项目部署(django+guncorn+virtualenv+nginx)

    一.说明 为了django项目部署到生产环境上,能够稳定的运行,且能够同时指出http和https的访问,对django的部署进行了一些研究,决定采用django + gunicorn + virtu ...

  4. 1070 Bash游戏 V4

    1070 Bash游戏 V4 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量最少1个,最多不超过对手上 ...

  5. 合并子目录(hash)

    题目2 : 合并子目录 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的电脑的文件系统中一共有N个文件,例如: /hihocoder/offer22/soluti ...

  6. eval()和exec()函数的区别

    (1)eval(str [,globals [,locals ])函数将字符串str当成有效Python表达式来求值,并返回计算结果.(2)exec()函数将字符串str当成有效的Python表达式来 ...

  7. SSL逐渐演变到TLS

    w https://zh.wikipedia.org/wiki/超文本传输安全协议

  8. qt sql 模块有哪些类?

    Class Description translate.google QSqlDatabase Handles a connection to a database 处理与数据库的连接 QSqlDri ...

  9. PAT 1067. 试密码(20)

    当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度不超过20的.不包含空格.Ta ...

  10. 4.5 基于STM32+MC20远程短信控制开关

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...