02.增量更新之apk和差分包的合并

本文介绍了在Android应用中实现增量更新的方法,包括下载差分包后如何利用bsdiff和bzip2将旧版本apk与差分包合并成新版本。详细步骤涉及将bsdiff和bzip2文件导入项目、修改bspatch.c、编写native方法、调整Android.mk文件以及在MainActivity中处理下载和合并操作。
摘要由CSDN通过智能技术生成

概述

在应用中做增量更新,一般都会这样做,提示用户升级(也就是下载差分包),当用户下载了差分包后,将当前版本和差分包合并成最新版本,然后提醒用户安装新版本的apk。

上一篇中通过bsdiff的win版已经可以将两个版本的apk差分出差分包,然后将差分包放到服务器中,提示用户下载即可。

下载好差分包后,需要将旧版本的apk和差分包合并起来,这就用到了bsdiff,而bsdiff依赖于bzip2。直接到网上下载bsdiff和bzip2就行。

步骤

1.将bsdiff和bzip下的文件拷贝到项目中

新建android项目,然后下载 bsdiff解压后,将其中的bspatch.c复制到项目中的jni目录下,由于bsdiff是依赖bzip2的,所以需要下载bzip2,解压并将其包下的所有的c文件和.h文件复制到jni的bzip2目录下.
这里写图片描述

2.修改bspatch.c

修改bspatch.c的头文件引用,将bzip2下的所有c文件都引用过来。这里引用的是是.c文件而不是.h文件,如果要引用.h文件也是可以的,但需要在Android.mk下将所有的c文件配置,否则编译通不过。

//将bzip2中的所有c都引入到文件中
#include "bzip2/bzlib.c"
#include "bzip2/crctable.c"
#include "bzip2/compress.c"
#include "bzip2/decompress.c"
#include "bzip2/randtable.c"
#include "bzip2/blocksort.c"
#include "bzip2/huffman.c"


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <err.h>
#include <unistd.h>
#include <fcntl.h>

仔细阅读 bspatch.c 的源码

int bspatch_main(int argc,char * argv[])
{
    ...
    if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
    ...
}

在bspatch.c中可以做合并的方法,就是int main方法,可以看到其中的参数,和差分时的差不多,这就可以看出,如果你上回的差分做了,这次合并做法是同样的,将main修改为bspatch_main。

3.编写native方法

根据bspatch中的方法,java中可以提供这样的native方法

public class PatchUtil {
   

    /**
     * 合并
     * @param oldApkPath 老apk路径
     * @param newApkPath 合并成新的apk路径
     * @param diffPath 差分包
     */
    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值