Android APP增量更新

 最近项目推进app的增量更新方案,特意看了几篇文章,先来两个博客地址

http://my.oschina.net/liucundong/blog/160436

https://github.com/cundong/SmartAppUpdates

 主要是通过使用bsdiff和bspatch,实现Android应用的增量更新

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

例如,当前手机中已安装微博V1,大小为12.8MB,现在微博发布了最新版V2,大小为15.4MB,我们对两个版本的apk文件查分比对之后,发现差异只有3M,那么用户就只需要要下载一个3M的差分包,使用旧版apk与这个差分包,合成得到一个新版本apk,提醒用户安装即可,不需要整包下载15.4M的微博V2版apk。


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

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

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

3.校验新合成的微博客户端文件是否完成,

过程分析

1 生成差分包

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

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

  1. V1.0 ——> V4.0的差分包;

  2. V2.0 ——> V4.0的差分包;

  3. V3.0 ——> V4.0的差分包;

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

我们直接通过bsdiff工具完成【实际开发中由服务端生成差分包】

2.使用旧版apk与差分包,在客户端合成新apk

需要在手机客户端实现,ApkPatchLibrary工程封装了这个过程。

2.1 C部分

ApkPatchLibrary/jni/bzip2目录中所有文件都来自bzip2项目。

ApkPatchLibrary/jni/com_cundong_utils_PatchUtils.c、ApkPatchLibrary/jni/com_cundong_utils_PatchUtils.c实现文件的合并过程,其中com_cundong_utils_PatchUtils.c修改自bsdiff/bspatch.c。

我们需要用NDK编译出一个libApkPatchLibrary.so文件,生成的so文件位于libs/armeabi/ 下,其他 Android 工程便可以使用该libApkPatchLibrary.so文件来合成apk。

2.2 Java部分

com.cundong.utils包,为调用C语言的Java实现;

调用,com.cundong.utils.PatchUtils中patch()方法,可以通过旧apk与差分包,合成为新apk。

/**
 * 类说明:   APK Patch工具类
 * 
 * @author  Cundong
 * @date    2013-9-6
 * @version 1.0
 */
public class PatchUtils {

    /**
     * native方法
     * 使用路径为oldApkPath的apk与路径为patchPath的补丁包,合成新的apk,并存储于newApkPath
     * @param oldApkPath
     * @param newApkPath
     * @param patchPath
     * @return
     */
    public static native int patch(String oldApkPath, String newApkPath,
            String patchPath);
}

3.校验新合成的apk文件

新包和成之后,还需要对客户端合成的apk包与最新版本apk包进行MD5或SHA1校验,如果校验码不一致,说明合成过程有问题,新合成的包将不能被安装。

注意事项

增量更新的前提条件,是在手机客户端能让我们读取到当前应用程序安装后的源apk,如果获取不到源apk,那么就无法进行增量更新了。

另外,如果你的应用程序不是很大,比如只有2、3M,那么完全没有必要使用增量更新,增量更新适用于apk包比较大的情况,比如游戏客户端。

一些说明

源码中,包含以下文件:

1.ApkPatchLibraryServer:Java语言实现的,服务器端生成差分包工程;

2.ApkPatchLibrary:客户端使用的apk合成库;

3.ApkPatchLibraryDemo:引用ApkPatchLibrary Library 的Demo,以新浪微博客户端的升级为例,假设手机上安装的是V4.5.0,最新版是V4.5.5,用户需要从V4.5.0升级到V4.5.5。

4.TestApk:用于测试的,旧版本的微博客户端,以及使用ApkPatchLibraryServer生成的新旧新浪微博差分包;






我把我使用到的工具和操作的DEMO传了上来可以看看


http://download.csdn.net/detail/yaya_soft/9374375















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值