recovery 差分升级包制作超时
来源:互联网 发布:unity3d 就业 编辑:程序博客网 时间:2024/04/30 10:51
我们在对android系统升级的时候,可以减少升级包的大小,只升级差异部分,也就是差分包升级,相关的描述可以参考:http://blog.csdn.net/csdn66_2016/article/details/70256757
我们在对两个不同的文件进行差分的时候,使用到了两个工具,分别是imgdiff与bsdiff,通过这两个工具产生差异部分的patch,升级的时候打patch即可。这两个工具有什么区别呢,我们看看py中是怎么样区别的:
build/tools/releasetools/common.py:
DIFF_PROGRAM_BY_EXT = { ".gz" : "imgdiff", ".zip" : ["imgdiff", "-z"], ".jar" : ["imgdiff", "-z"], ".apk" : ["imgdiff", "-z"], ".img" : "imgdiff", }class Difference(object): def __init__(self, tf, sf, diff_program=None): self.tf = tf self.sf = sf self.patch = None self.diff_program = diff_program def ComputePatch(self): """Compute the patch (as a string of data) needed to turn sf into tf. Returns the same tuple as GetPatch().""" tf = self.tf sf = self.sf if self.diff_program: diff_program = self.diff_program else: ext = os.path.splitext(tf.name)[1] diff_program = DIFF_PROGRAM_BY_EXT.get(ext, "bsdiff")
基本上明白了,针对gz zip jar apk img这种压缩的格式,我们使用imgdiff工具来生成patch,否则我们使用bsdiff工具,这两个工具,有不同的针对性,imgdiff对压缩格式的文件效率更高,普通的不带格式的文件bsdiff更合适,我们姑且这么理解。
之前有个客户在制作差分包的时候失败了,后来看了下,发现是有两个300M+的文件在差分,好像提示超时了,然后我写了个sh,看看这两个文件的差分到底需要多久:
dateimgdiff file_old file_new file_patchdate
结果过了30+分钟之后,生成了file_patch
我们看看,这个common.py中定义的超时时间:
def ComputePatch(self): """Compute the patch (as a string of data) needed to turn sf into tf. Returns the same tuple as GetPatch().""" .......................... try: ptemp = tempfile.NamedTemporaryFile() if isinstance(diff_program, list): cmd = copy.copy(diff_program) else: cmd = [diff_program] cmd.append(stemp.name) cmd.append(ttemp.name) cmd.append(ptemp.name) p = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) err = [] def run(): _, e = p.communicate() if e: err.append(e) th = threading.Thread(target=run) th.start() th.join(timeout=300) # 5 mins if th.is_alive(): print "WARNING: diff command timed out" p.terminate() th.join(5) if th.is_alive(): p.kill() th.join()
这里默认的5分钟超时,那么当imgdiff大于5分钟的时候,就无法差分升级成功了,如果差分失败了,就需要修改这里的超时时间。
说个后话,用300M+的文件去差分升级,也是醉了,还不如直接整包升级得了。
阅读全文
0 0
- recovery 差分升级包制作超时
- [Recovery]如何编译差分升级包
- OTA 差分升级包的制作
- (三)android recovery差分升级过程掉电分析
- OTA--卡刷全包、差分升级包制作、分析(代码摘自Google)---2
- 整包升级与差分升级的区别
- 手动制作update升级包以及制作差分包
- Android系统Recovery工作原理1-- 升级包 的 制作
- Android系统Recovery工作原理3-- 升级包的制作
- Android Studio 差分升级
- android apk差分升级
- Android Recovery系统分析1----T卡升级包的制作步骤
- android 升级包制作
- Android 制作 升级包
- 制作android 升级包
- 升级包制作
- Android 制作 升级包
- 制作Android 升级包
- 33333333333
- spring 中的 RowMapper 类
- 守护进程
- 如何批量从库中导出DDL语句
- RecyclerView上拉刷新下拉加载
- recovery 差分升级包制作超时
- 队列->离散事件模拟-银行管理
- Android JSON原生解析的几种思路和GSON的使用方法
- Maven build jar 导出指定资源和排除指定资源配置
- 算法之阶乘
- runtime
- 部署maven项目出现错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Material Design常用设计标准
- 内核态和用户态