Board logo

标题: 增量更新(1) [打印本页]

作者: look_w    时间: 2019-2-19 16:16     标题: 增量更新(1)

思路

通过bsdiff库对new_apk和old_apk进行二进制对比,然后抽取差异化生成new_old.patch补丁包,然后app下载增量补丁包与old_apk合并,生成new_apk,然后安装替换,完成更新
工具

bsdiff库
bsdiff库依赖bzip库
增量文件生成

这步放在服务器,主要生成各个老版本对新版本的增量补丁包patch,以及对新版本生成md5值,到时候下发给app补丁包以及md5值用于验证合成是否正确
(主要通过JAVA JNI调用bsdiff编译的.dll或者.so库文件)
增量文件合成

    用android stuido2.2进行NDK开发
    android stuido2.2 NDK环境配置

    了解cmake相关知识,as 2.2是通过cmake进行编译
    cmake教程

    通过NDK生成.so库
    1.将bspatch.c文件拷贝到cpp目录,新建bzip目录将bzip库的.c .h文件拷贝进去如下:




2.然后配置cmake的CMakeList.txt文件,这个文件as已经生成好了,添加如下:

    aux_source_directory (src/main/cpp/bzip BZIP_SRC)       # 将当前目录(不包含子目录)下所有源文件保存在变量 BZIP_SRC 中
     
    add_library( # Sets the name of the library.
                 bsdiff
     
                 # Sets the library as a shared library.
                 SHARED
     
                 # Provides a relative path to your source file(s).
                 # Associated headers in the same location as their source
                 # file are automatically included.
                 src/main/cpp/bspatch.c
                 src/main/cpp/cn_qh_dn_patch_PatchUtils.h
                 ${BZIP_SRC})
     

3.Java方面的调用代码如下:

    public class PatchUtils {
     
        static {
            System.loadLibrary("bsdiff");
        }
     
        /**
         * 合成补丁包
         * @param oapk 当前版本的apk位置
         * @param patch 补丁文件位置
         * @param napk 新apk存放位置
         * @return 0代表成功
         */
        public static native int patchNewApk(String oapk, String patch, String napk);
    }

通过javac javah生成 xx_xx_xx_PatchUtils.h头文件




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0