Android 增量更新

增量更新的原理非常简单,就是将手机上已安装apk与服务器端最新apk进行二进制对比,并得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装apk,合成新版apk。


apk文件的差分、合成,可以通过开源的二进制比较工具bsdiff来实现(Link:http://www.daemonology.net/bsdiff/)

  因为bsdiff依赖bzip2,所以我们还需要用到bzip2(Link:http://www.bzip.org/downloads.html)

  bsdiff中,bsdiff.c用于生成查分包,bspatch.c用于合成文件。

  接下来,我们分开说,需要做3件事。

  1.在服务器端,生成这两个版本微博的差分包;

  2.在手机客户端,使用已安装的旧版apk与这个差分包,合成为一个新版微博apk;

  3.校验新合成的微博客户端文件是否完成,签名时候和已安装客户端一致,如一致,提示用户安装。

  过程分析

  1 生成差分包

  这一步需要在服务器端来实现,一般来说,每当apk有新版本需要提示用户升级,都需要运营人员在后台管理端上传新apk,上传时就应该由程序生成之前所有旧版本们与最新版的差分包。

  例如: 你的apk已经发布了3个版,V1.0、V2.0、V3.0,这时候你要在后台发布V4.0,那么,当你在服务器上传最新的V4.0包时,服务器端就应该立即生成以下差分包:

  V1.0 ――> V4.0的差分包;

  V2.0 ――> V4.0的差分包;

  V3.0 ――> V4.0的差分包;

  ApkPatchLibraryServer工程即为Java语言实现的服务器端查分程序。

  下面对ApkPatchLibraryServer做一些简单说明:

  1.1 C部分

  ApkPatchLibraryServer/jni 中,除了以下4个:

  com_cundong_utils_DiffUtils.c com_cundong_utils_DiffUtils.h com_cundong_utils_PatchUtils.c com_cundong_utils_PatchUtils.h

  全部来自bzip。

  com_cundong_utils_DiffUtils.c com_cundong_utils_DiffUtils.h

  用于生成差分包。

  com_cundong_utils_PatchUtils.c com_cundong_utils_PatchUtils.h

  用于合成新apk文件。

  其中,com_cundong_utils_DiffUtils.c修改自 bsdiff/bsdiff.c,com_cundong_utils_PatchUtils.c修改自bsdiff/bspatch.c。

   我们在需要将jni中的C文件,build输出为动态链接库,以供Java调用(Window环境下生成的文件名为 libApkPatchLibraryServer.dll,Unix-like系统下为 libApkPatchLibraryServer.so,OSX下为libApkPatchLibraryServer.dylib)。

  Build成功后,将该动态链接库文件,加入环境变量,供Java语言调用。


你可能感兴趣的:(android,增量)