本文转载自: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. merge实现拉链表

    建表如下( 历史拉链表): 新表(每日更新的): 实现语句: MERGE INTO test_target t1 USING ( SELECT nvl(c.id, b.id) AS id ,CASE ...

  2. js intanceof 或 typeof

    typeof和instanceof的区别 typeof和instanceof都可以用来判断变量,它们的用法有很大区别: typeof会返回一个变量的基本类型,只有以下几种:number,boolean ...

  3. windows共享文件夹给centOS

    服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使用,所以就不打算搭建FTP和Samba服务器,直接通过CentOS挂载windows共享文件夹的方式来达到此目的. 既然是使用w ...

  4. 转载:DenseNet算法详解

    原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/a ...

  5. Laravel5.1 Migration数据库迁移文件

    Migration方便于团队开发,它就像数据库的版本控制一样,它的功能就是可以和别人共享你的数据库结构.这么说可能不太好理解,你跟着敲敲就明白了. 0 前提工作-配置数据库 找到你根目录的 .env ...

  6. 封装AFNetworking

    用了一下AFNetworking感觉比ASIHttprequest 真心好用一些,因为我还是个初学者吧,很多ASIHttprequest 的功能还没有用到,与ASIHttprequest 不用的是AF ...

  7. 【转】《JAVA与模式》之责任链模式

    <JAVA与模式>之责任链模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模 ...

  8. AGS Server 10.1 切图工具

    在AGS Sever中很重要的功能就是地图缓存的制作,安装AGS Sever会在catalog中增加相关的工具箱,利用这些工具可以制作.删除.更新切片 一.Convert map server cac ...

  9. vertical-align:middle;一般用于img和行内文字对齐方式

    vertical-align:top ;文字和行内块元素的顶部对齐 vertical-align:middle;居中 vertical-align:bottom;底对齐

  10. git常用配置项

    1.默认的编辑器:core.editor git config --global core.editor emacs 2.默认提交模版:commit.template 假设你创建了一个叫 ~/.git ...