你们想要的最全插件化更新bsdiff都在这里

插件化更新用到的一个工具类 :bsdiff

下载: bisdiff  

网页链接很简单

下载完成后解压缩,会得到一些.c等文件,里面有个Makefile文件,跳转到这个目录,执行make命令

如果出现一些报错可以参考这个链接,里面写的很全

执行成功后,我们就得到了一个bsdiff文件

然后把新包和老包放在这个文件里面,执行 MAC:   ./bsdiff old.apk new.apk patch 最后会生成一个差分包patch

可以把这个差分包传到服务器,然后通过APP下载.

开始写Demo了

创建一个Android C工程,然后把bspatch.c放入到cpp目录下,引入肯定会报红,因为有个#include <bzlib.h>这个找不到,我们这时就要把之前下载好的bzip2引入到项目,下载链接,需要翻墙,

下载完后,打开里面的Makefile文件可以看到以下内容

然后把这些相关的文件引入到项目中,最后项目就是这样

当然Cmake文件我们也要配置一下看图

配置基本就完成了,最后就是代码,

创建native方法

   private native void native_updataApk(String oldapk, String newpak,String path);

C方法

extern "C"
JNIEXPORT void JNICALL
Java_com_ancely_play_AncelyPlayer_native_1updataApk(JNIEnv *env, jobject instance, jstring oldapk_,
                                                    jstring newpak_, jstring path_) {
    const char *oldapk = env->GetStringUTFChars(oldapk_, 0);
    const char *newpak = env->GetStringUTFChars(newpak_, 0);
    const char *path = env->GetStringUTFChars(path_, 0);


    const char *argv[] = {"", oldapk, newpak, path};
    p_main(4, argv);
    env->ReleaseStringUTFChars(oldapk_, oldapk);
    env->ReleaseStringUTFChars(newpak_, newpak);
    env->ReleaseStringUTFChars(path_, path);
}

看到这个p_main,这个方法是bspatch.c里面的main方法,我把他改成p_main,好区别

 

一个插件化更新就这么集成完了,然后测试的化就是传参数,我简单处理,就是把老的apk和差分分全部都丢到SD卡里面,

  File oldApk = new File(Environment.getExternalStorageDirectory(), "old.apk");
                File newApk = new File(Environment.getExternalStorageDirectory(), "bisdiff.apk");
                File path = new File(Environment.getExternalStorageDirectory(), "path");
                mAncelyPlayer.updataApk(oldApk.getAbsolutePath(), newApk.getAbsolutePath(), path.getAbsolutePath());

结束.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值