NDK--Linux系统下利用bsdiff生成差分文件及安卓应用中合并差分文件实现增量更新...

上次说到微软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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值