android增量更新

bspatch :http://www.daemonology.net/bsdiff/

bzip2: http://www.bzip.org/downloads.html

通过新旧apk通过哈夫曼算法对比,将不同之处生成.patch差分包,客户端下载差分包与旧版本的apk合并新的apk,进行安装。

第一步:创建native方法,javah生成头文件
/**
*
* @param oldApk 旧版apk
* @param newApk 新版apk
* @param patch 差分包路径
* @return
*/
public static native int bspatch(String oldApk, String newApk, String patch);

jni方法
JNIEXPORT jint JNICALL Java_com_xiukun_bspatch_BsPatchUtils_bspatch
(JNIEnv *env, jclass cls,
jstring old, jstring new, jstring patch){
int argc = 4;
char * argv[argc];
argv[0] = “bspatch”;//随意定义
argv[1] = (char*) ((*env)->GetStringUTFChars(env, old, 0));
argv[2] = (char*) ((*env)->GetStringUTFChars(env, new, 0));
argv[3] = (char*) ((*env)->GetStringUTFChars(env, patch, 0));

int ret = patchMethod(argc, argv);

(*env)->ReleaseStringUTFChars(env, old, argv[1]);
(*env)->ReleaseStringUTFChars(env, new, argv[2]);
(*env)->ReleaseStringUTFChars(env, patch, argv[3]);
return ret;

}

第二步:提取apk
public static String getApkPath(Context context){
Context applicationContext = context.getApplicationContext();
ApplicationInfo applicationInfo = applicationContext.getApplicationInfo();
String apkPath = applicationInfo.sourceDir;
return apkPath;

}

除非用户root删除了这个apk,不然都会提取到这个apk;

第三步:合并apk
File destApk = new File(Environment.getExternalStorageDirectory(), “dest.apk”);
File patch = new File(Environment.getExternalStorageDirectory(), “PATCH.patch”);
BsPatchUtils.bspatch(apkPath,destApk.getAbsolutePath(),patch.getAbsolutePath());

    if (destApk.exists()){
        ApkUtils.installApk(MainActivity.this,destApk.getAbsolutePath());
    }else{
        Toast.makeText(MainActivity.this, "apk文件不存在", Toast.LENGTH_SHORT).show();
    }

到这里就完成了,差分包是在服务器端下载的,这里放在sd里模拟从服务器段下载过程。

源码:https://github.com/luXiuKun/bspatch

生成差分包工具:http://download.csdn.net/download/chedandehuiyi/9940599
使用:打开cmd, lxkdiff.exe 旧版apk名称 新版apk名称 差分包名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值