流程step1 使用bsdiff生成差异包PATCH.patch
step2 在手机上合并base包和差异包,生成新版本的安装包
step3 安装新的安装包
准备bsdiff-4.3 (用于生成差异包,合并新包)
bzip2 (bsdiff要使用到)
试验step1 解压bsdiff4.3的压缩包
step2 修改Makefile文件,将.ifndef和.endif缩进,要么无法进行后面的操作CFLAGS += -O3 -lbz2
PREFIX ?= /usr/localINSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444
all: bsdiff bspatch
bsdiff: bsdiff.c
bspatch: bspatch.c
install: ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endifstep3 在该文件夹的命令行里执行make命令,会生成bsdiff和bspatch两个可执行的文件。如果是从上面的地址下载的bsdiff的话,会爆出bspatch.c:39:21: error: unknown type name 'u_char'; did you mean 'char'?这样的错误。这是由于bspatch.c中缺少了#include ,加上即可。然后执行make命令。bogon:bsdiff-4.3 Tony$ make
cc -O3 -lbz2 bsdiff.c -o bsdiff
cc -O3 -lbz2 bspatch.c -o bspatchstep4 准备两个同一签名的apk,old.apk和.apk,放在bsdiff-4.3解压后的文件夹里。
step5 使用bsdiff生成差异文件PATCH.patch,命令格式:bsdiff oldfile newfile patchfile(这一步操作可以放在服务端来执行)bogon:bsdiff-4.3 Tony$ ./bsdiff old.apk new.apk PATCH.patch
-step6 使用bspatch合成新的apk,dest.apk。命令格式:bspatch oldfile newfile patchfilebogon:bsdiff-4.3 Tony$ ./bspatch old.apk dest.apk PATCH.patchstep7 验证生成的dest.apk和之前的new.apk使用一样,验证两个apk的md5值,即可。bogon:bsdiff-4.3 Tony$ md5 new.apk
MD5 (new.apk) = 55005cec2de8ad3668a0fd5bd8746f43
bogon:bsdiff-4.3 Tony$ md5 dest.apk
MD5 (dest.apk) = 55005cec2de8ad3668a0fd5bd8746f43
bogon:bsdiff-4.3 Tony$ md5 old.apk
MD5 (old.apk) = 822cc0938694008089ea5523f86585d7
bogon:bsdiff-4.3 Tony$
在Android中使用增量更新
ndk部分step1 新建一个PatchUtils的类,用于调用native的方法public class PatchUtils { static PatchUtils instance; public static PatchUtils getInstance() { if (instance == null) {
instance = new PatchUtils();
} return instance;
} static {
System.loadLibrary("patchutils");
} /**
* native方法 使用路径为oldApkPath的apk与路径为patchPath的补丁包,合成新的apk,并存储于newApkPath
*
* 返回:0,说明操作成功
*
* @param oldApkPath 示例:/sdcard/old.apk
* @param newApkPath 示例:/sdcard/new.apk
* @param patchPath 示例:/sdcard/xx.patch
* @return
*/
public static native int bspatch(String oldApkPath, String newApkPath, String patchPath);
}step2 使用javah命令生成PatchUtils的头文件,或者使用ndk-build里的javah生成头文件。会在jni文件夹下生成一个com_bigademo_updatedemo_PatchUtils.h的文件,其中com_bigademo_updatedemo是我的包名。
step3 将bsdiff4.3文件夹中的bspatch.c文件导入到jni文件夹下。
step