Android 增量更新
最近的项目需求,最近对这个增量更新有了一些认识,另外把增量更新的一下资料整理给大家分析一下优势和劣势。
增量更新的原理
首先增量更新不是热修复,两个概念不同,增量更新就是比较两个apk之间的二进制差异,生成patch包然后打入旧的apk里面从而达到生成新的apk。例如说:第一个版本是3M的apk ,第二个是8M的apk ,生成的patch包可能就在4M左右,甚至更小,但也不是单纯的两个apk相减的差值,有可能两个大小差不多的apk,生成patch包可能在1M左右,这个也是看包里的改动大小。生成的 patch下载到Android设备上跟较低版本的apk合成一个新版本的apk文件,如果不出意外的话,这个生成的apk和你之前做差分的apk是一致的。这么做就会为用户去节省很多的流量,就不会让用户去下载完整的apk。
升级步骤
bsdiff和bspatch这些工具如何获取和使用在后面介绍
首先通过bsdiff 生成patch包 命令:bsdiff oldfile newfile patchfile 例如: bsdiff xx_v1.0.apk xx_v2.0.apk xx.patch
bspatch生成新的APK: 命令: bspatch oldfile newfile patchfile 例如: bsdiff xx_v1.0.apk xx_v2.0.apk xx.patch
无论是windows端还是Linux端都是执行的这两个命令
缺点
增量升级并非完美无缺的升级方式,至少存在以下两点不足:
1.增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。
2.增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好通过md5 或者其他方式对patch包进行完整性的校验。
bsdiff网站:http://www.daemonology.net/bsdiff/
bsdiff的源码链接:
这个源码反正我是看不懂,能看懂的同学可以去研究一下,代码变量太变态而且没有注释,附上源码下载链接:
http://pan.baidu.com/s/1nvLe3O1 密码:pvl4
在Ubuntu下获取bsdiff工具
在Ubuntu下获取bsdiff的方法很简单直接敲bsdiff命令就可以了,如果没有安装就会提示你用命令 sudo apt-get install bsdiff 直接就OK了
在windows下使用bsdiff工具
bsdiff工具 :http://sites.inka.de/tesla/download/bsdiff4.3-win32.zip(32bit)
bsdiff工具源码: http://sites.inka.de/tesla/download/bsdiff4.3-win32-src.zip(32bit)
这个是在bsdiff上源码上修改的能够直接在VS上直接编译修改有其他需求的同学可以拿来用
在Android上使用bsdiff工具
这个也是在bsdiff上源码上修改的,通过jni调用来使用bsdiff的这些功能,其实Android上只需要使用bspatch就可以了应该是不大会用到bsdiff这个功能反正源码中也是都涵盖了这两个功能,可以随意使用下面附上代码连接:链接:http://pan.baidu.com/s/1hsNW0Kk 密码:f31o
网友评论