思路
通过bsdiff库对new_apk和old_apk进行二进制对比,然后抽取差异化生成new_old.patch补丁包,然后app下载增量补丁包与old_apk合并,生成new_apk,然后安装替换,完成更新
工具
bsdiff库
bsdiff库依赖bzip库
增量文件生成
这步放在服务器,主要生成各个老版本对新版本的增量补丁包patch,以及对新版本生成md5值,到时候下发给app补丁包以及md5值用于验证合成是否正确
(主要通过JAVA JNI调用bsdiff编译的.dll或者.so库文件)
增量文件合成
用android stuido2.2进行NDK开发
android stuido2.2 NDK环境配置
了解cmake相关知识,as 2.2是通过cmake进行编译
cmake教程
通过NDK生成.so库
1.将bspatch.c文件拷贝到cpp目录,新建bzip目录将bzip库的.c .h文件拷贝进去如下:
2.然后配置cmake的CMakeList.txt文件,这个文件as已经生成好了,添加如下:
aux_source_directory (src/main/cpp/bzip BZIP_SRC) # 将当前目录(不包含子目录)下所有源文件保存在变量 BZIP_SRC 中
add_library( # Sets the name of the library.
bsdiff
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included.
src/main/cpp/bspatch.c
src/main/cpp/cn_qh_dn_patch_PatchUtils.h
${BZIP_SRC})
3.Java方面的调用代码如下:
public class PatchUtils {
static {
System.loadLibrary("bsdiff");
}
/**
* 合成补丁包
* @param oapk 当前版本的apk位置
* @param patch 补丁文件位置
* @param napk 新apk存放位置
* @return 0代表成功
*/
public static native int patchNewApk(String oapk, String patch, String napk);
}
通过javac javah生成 xx_xx_xx_PatchUtils.h头文件 |