美文网首页
NDK--Linux系统下利用bsdiff生成差分文件及安卓应用

NDK--Linux系统下利用bsdiff生成差分文件及安卓应用

作者: aruba | 来源:发表于2020-04-23 19:15 被阅读0次

    上次说到微软windows平台下bsdiff的运用,而我们服务器一般都是linux系统,今天来搭建自己的服务器,并且在linux平台下增量更新的文件差分操作;最后在安卓应用中下载服务器差分文件,将旧APK和差分文件合并,实现增量更新

    1.环境配置

    首先需要有一个linux服务器,我这边使用的是一个装载了CentOS的虚拟机,所以后续操作都需要在同一个网络下面。
    环境配置分为2步:1:安装JDK 2:安装tomcat

    1.安装JDK,在命令行输入以下命令

    yum install java-1.8.0-openjdk-devel.x86_64
    

    2.安装tomcat
    安装教程:https://blog.csdn.net/zhaoyanjun6/article/details/79131856
    注意:tomcat需要使用8080端口,防火墙可能会禁用该端口,最快解决方法:直接关闭防火墙

    systemctl stop firewalld.service
    

    2.下载linux平台下的bsdiff,并放入linux服务器中

    bsdiff:http://www.daemonology.net/bsdiff/
    bzip:http://www.bzip.org/downloads.html(需要翻墙)
    我这边将bzip上传到了网盘:https://pan.baidu.com/s/1TJcU9cxY50ok0chcHkc7Og 提取码:jcd1

    将解压后的两个文件夹中所有的.c .cpp .h文件复制到一个文件夹中
    将所有文件拖入notepad++,重命名所有main方法,因为我们是要java调用c/c++方法,c/c++生成的只是动态链接库,含有main方法会报错
    修改完成后将这些文件上传到服务器,我这边是利用sftp
    使用gcc编译
    gcc -fPIC blocksort.c decompress.c bsdiff.c  randtable.c  bzip2.c huffman.c compress.c bzlib.c crctable.c -o bsDiff
    
    把之前两个apk文件传入服务器后,执行差分操作
    执行:
    ./bsDiff oldApk.apk newApk.apk apk.patch
    

    接下来是安卓中使用bspatch对文件进行合并

    将.c和.h文件入NDK工程
    编写native方法,并最终调用bspatch方法
    package com.dn.tim.dntimlsn12bspatch;
    
    
    public class BsPatch {
    
        public native static int patch(String oldfile, String newFile, String patchFile);
    
        static {
    
            System.loadLibrary("TimBisPatch");
        }
    }
    
    
    /*
     * Class:     com_dn_tim_dntimlsn12bspatch_BsPatch
     * Method:    patch
     * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
     */
    JNIEXPORT jint JNICALL Java_com_dn_tim_dntimlsn12bspatch_BsPatch_patch
            (JNIEnv *env, jclass jazz, jstring oldPath_jstr, jstring newPath_jstr, jstring patchPatch_jst) {
    
        int ret= -1;
        LOGD(" jni patch begin");
    
        char *oldPath = (*env) -> GetStringUTFChars(env, oldPath_jstr, JNI_FALSE);
        char *newPath = (*env) -> GetStringUTFChars(env, newPath_jstr, JNI_FALSE);
        char *patchPath = (*env) -> GetStringUTFChars(env, patchPatch_jst, JNI_FALSE);
    
        int argc = 4;
        char *argv[4];
    
        argv[0] = "TimBsPatch";
        argv[1] = oldPath;
        argv[2] = newPath;
        argv[3] = patchPath;
    
        //如果成功ret等于0
        ret = bspatch_main(argc,argv);
        (*env) -> ReleaseStringUTFChars(env, oldPath_jstr, oldPath);
        (*env) -> ReleaseStringUTFChars(env, newPath_jstr, newPath);
        (*env) -> ReleaseStringUTFChars(env, patchPatch_jst, patchPath);
        return ret;
    
    }
    
    从服务器下载文件后合并并安装
    demo地址:https://gitee.com/aruba/bspatchApplication.git

    相关文章

      网友评论

          本文标题:NDK--Linux系统下利用bsdiff生成差分文件及安卓应用

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