前言
大家应该都有注意到,各大应用市场都在使用增量升级的技术。那么,今天,就来记录下,bsdiff和bspatch。
尝试
我们先去Binary diff/patch utility 中,把相关的资源下载下来,下载下来之后,我们进行编译,在编译之前,我们需要修改一点东西。
Makefile文件修改成如下:
|
|
就是在倒数第一行和倒数第三行增加缩进。
然后修改bspatch.c文件,增加如下代码:
|
|
然后就可以进行编译了。
|
|
编译完成之后,我们就能进行初次尝试了。
首先我们用as,生成两个新旧的apk,old.apk new.apk
然后,我们终端进入bsdiff的目录,执行如下命令生成patch包。
|
|
然后,我们再用旧的apk和patch包,生成新的new.apk
|
|
最后,我们验证下new.apk 和我们生成的new_patch.apk的md5值和sha值
|
|
观察值是否相同,进行测试。
如何移植到Android
我们客户端要关心的,就是合成的过程,也就是bspatch,那么我们如何移植到Android上呢。
目前有两种移植到Android上的方案。
- jni,讲bspatch.c稍微改造下,编译成so文件,但是我们这里需要注意的是,因为Android中没有bzip2相关的东西,我们需要将bzip2相关的源码也拿出来。具体参考bzip,源码也可在哪里下载。下载完成之后,将.c和.h等有效文件移植到我们的项目即可。
- 使用bspatch.c的java翻译版本,tinker中有相关的翻译版本,我们可以使用.java翻译版本 ,我大致看了下,没有对magic进行校验,如果有需要,可自行加上校验,校验规则,参考bspatch.c
总结
- bsdiff生成的patch包,虽然比完整包小,但是还是比较大。
- 版本多了之后,难以管理,建议控制在三个版本
如果想了解原理 可以阅读这篇文章,并结合源码进行。