美文网首页
四、增量更新

四、增量更新

作者: ChiangCMBA | 来源:发表于2018-04-07 23:11 被阅读0次

一、原理

    1、服务端通过bsdiff工具根据新旧版本的apk生成差分包,然后将生成的差分包下发到客户端。差分包的大小会小于等于新旧apk包大小的差。
    2、客户端在得到差分包后,通过bspatch工具,将差分包和旧版本的本地安装包合成新的apk包。
    3、最后,通过安装新的apk包实现应用的升级。
【Binary diff/patch utility官网】http://www.daemonology.net/bsdiff/

二、步骤

1. 差分(在服务器端进行)

1.1 编译bsdiff生成动态链接库.so/.dll;
/*

* Class:     com_fmtech_update_ApkDiff

* Method:    diff

* Signature: ()V

*/

JNIEXPORT void JNICALL Java_com_fmtech_update_ApkDiff_diff

(JNIEnv *env, jclass jazz,jstring oldPath_jst, jstring newPath_jst, jstring patchPath_jst)
{
        int argc = 4;

        char *argv[4];

        char *oldPath = (char*)env->GetStringUTFChars(oldPath_jst, NULL);

        char *newPath = (char*)env->GetStringUTFChars(newPath_jst, NULL);

        char *patchPath = (char*)env->GetStringUTFChars(patchPath_jst, NULL);

        argv[0] = "bsdiff";

        argv[1] = oldPath;

        argv[2] = newPath;

        argv[3] = patchPath;

        bsdiff_main(argc, argv);

        env->ReleaseStringUTFChars(oldPath_jst, NULL);

        env->ReleaseStringUTFChars(newPath_jst, NULL);

        env->ReleaseStringUTFChars(patchPath_jst, NULL);

}
VS编译bsdiff动态链接库dll.png

说明:
#1.ApkDiff.h是在Eclipse下生成头文件;
#2.jni.h和jni_md.h是windows环境下的jni相关头文件;
#3.在bsdiff.cpp中引入ApkDiff.h,并实现其中的函数Java_com_fmtech_update_ApkDiff_diff,这个函数最终用于在服务器程序端调用,并生成差分文件;
#4.差分操作的核心函数;

1.2 编写服务器应用程序,在应用程序中加载动态链接库.so/.dll;


ServerBsDiff.png

1.3 Linux下编译bsdiff的.so库;

gcc -fPIC -shared blocksort.c decompress.c bsdiff.c  randtable.c  bzip2.c huffman.c compress.c bzlib.c crctable.c -o ApkDiff.so

生成的linux下动态库( 在服务器的后台可以直接使用,安卓客户端不能直接用 )。

2. 合并 (在客户端进行)

2.1 编译bspatch动态库到项目中。


bispatch.png

说明:
#1.编译BsPatch.so需要的源文件和头文件;
#2.com.fmtech.incrementalupdate.BsPatch生成的对应的头文件。

2.2 CMakeList.txt配置

cmake_minimum_required(VERSION 3.4.1)

file(GLOB my_c_path src/main/cpp/bzip2/*.c)

add_library(

BsPatch

SHARED

${my_c_path}

src/main/cpp/bspatch.c )

find_library(

log-lib

log )

target_link_libraries(

BsPatch

${log-lib} )

2.3、客户端获取差分包,合并,安装的逻辑


patchLogic.png

【相关源码】
Android:https://github.com/ChiangC/NDK/tree/master/IncrementalUpdate
C++:https://github.com/ChiangC/NDK/tree/master/IncrementalUpdateDiff/IncrementalUpdateDiff
Java:https://github.com/ChiangC/NDK/tree/master/IncrementalUpdateServer

相关文章

  • 四、增量更新

    一、原理     1、服务端通过bsdiff工具根据新旧版本的apk生成差分包,然后将生成的差分包下发到客户端。差...

  • ReactNative 增量热更新思路

    增量热更新 ReactNative 增量更新 ReactNative 增量更新的内容包含 JS 和图片,在每次应用...

  • android 增量更新

    android增量更新 android 4.1开始 google引入了应用程序的增量更新。增量更新的原理实际上是使...

  • 一、NDK:增量更新

    增量更新在Android开发中是一种很常见的技术。 增量更新的原理 增量更新的原理非常简单,就是将本地apk与服务...

  • ReactNative热更新&拆包

    目录 1)全量热更新-Android 2)拆包增量更新-Android 3)图片增量更新-Android 4)全量...

  • 手把手玩Android 增量更新

    前言: 增量更新已经出来几年了,而一些大的公司早就实现了增量更新。增量更新相较于全量更新的好处不言而喻,利用差分算...

  • 增量更新

    搭建ndk+cmake环境setting中system settings->android sdk->sdk t...

  • 增量更新

    思路 通过bsdiff库对new_apk和old_apk进行二进制对比,然后抽取差异化生成new_old.patc...

  • 增量更新

    差分(服务端需要做) 旧版本apk、新版本apkBsDiff开源项目(依赖于Bzip2)1.根据下载的bsdiff...

  • 增量更新

    github完整代码传送门 bsdiff 源码http://www.daemonology.net/bsdiff/...

网友评论

      本文标题:四、增量更新

      本文链接:https://www.haomeiwen.com/subject/esmuhftx.html