Android 增量更新

自从Android 4.1 开始, Google play 引入了应用程序的增量更新功能,App 使用该方式升级,可节省约2/3的流量。

现在国内的主流应用市场都支持应用的增量更新.

增量更新的原理: 就是将手机上已安装apk 与服务器最新的apk进行二进制对比,得到差分包,用户在更新程序时,只需要已安装,合成新版apk.

apk 文件差分,合成,可以通过开源二进制比较工具bsdiff 来实现,又因为bsdiff 依赖bzip2, 所以还需要用到bzip. bsdiff 中,bsdiff.c 用于生成差分包, bspatch.c 用于合成文件。

实现增量更新步骤:

1)在服务端,生成两个版本apk的差分包

2)在手机客户端,使用已安装的apk 与这个差分包进行合成, 得到新版的apk

3) 校验新合成的apk文件是否完整,MD5或SHA1是否正确,如正确,则引导用户安装。

 

App 合并插件增量包

使用开源增量包制作工具 ApkPatchLibrary , 这是一个 libApkPatchLibrary.so, 将so 文件放在宿主App的jniLibs/armeabi目录下, 然后在宿主App 中新建一个包, 名为 com.cundong.utils, 在其中创建PatchUtils.java

/**
 * 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 patch(String oldApkPath, String newApkPath,
                        String patchPath);

在MainActivity类中,使用PatchUtils类进行文件合并。

1) 在MainActivity类中, 增加一个静态函数,初始化ApkPatchLibrary

static {
    System.loadLibrary("ApkPatchLibrary");
}

2)  进行pathch.zip 的解压缩,以及合并

//1.download
String downloadFile = download();
//2. unzip
Utils.Unzip(downloadFile, Environment.getExternalStorageDirectory() + "/myunzip/");
//合并patch
int patchResult = PatchUtils.patch(oldApkPath, newFilePath, patchFilePath);
if(patchResult == 0) {
    Log.e("msg", patchResult + "合并成功");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值