概述
现在的APP更新频率非常高,apk的大小也在不断的变大。如果每次新版本的更新,都让用户去下载一个完整的apk,这对于用户的耐心和流量都是巨大的消耗。特别是做应用市场的,如果没有增量更新,那么就要额外的付出高额的流量费用。
原理
将手机已安装的apk与服务端最新的apk进行二进制对比,得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装的apk合并成新版的apk。
工具
bsdiff、bspatch
下载地址:http://www.daemonology.net/bsdiff/
编译源码:
Step1: make
出错信息:
Step2: 修改Makefile
文件,将install:下面的if
和endif
各添加一个缩进:
Step3: make
错误信息:
Step4: 在bspath.c中添加#include <sys/types.h>
Step5: make
生成差分包
代码语言:javascript复制./bsdiff v1.0.0.apk v1.0.1.apk 1.0.0-to-1.0.1.patch
合并差分包
代码语言:javascript复制./bspatch v1.0.0.apk new.apk 1.0.0-to-1.0.1.patch
对比文件是否一样:
在Android项目中使用bspatch
Step1:下载依赖库bzip
的源码(官网域名过期),可以从我的GitHub项目中拷贝:
下载地址:https://github.com/xch168/BsPatchTest
Step2:将bzip库,导入到Android项目中;
Step3:将bsdiff中的bspatch.c
文件导入到Android项目中,并将bspatch.c中的#include <bzlib.h>
改成#include "bzip2/bzlib.h"
Step4:编写CMakeLists.txt
Step4:编写代码
Java层:
BsPatchUtil.java
调用:
C层:
bspatch-util.h:
bspatch-util.c
Step5:将通过bsdiff生成的差量包1.0.0-to-1.0.1.patch
push到手机sdcard目录
Step6:运行程序,点击”增量更新“
参考链接
- https://www.jianshu.com/p/99d986db4db8
- https://blog.csdn.net/lmj623565791/article/details/52761658
- http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1222/3795.html
- https://blog.csdn.net/dd864140130/article/details/52928419
- https://www.cnblogs.com/lping/p/5833090.html