Android开发 使用差分算法实现增量更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android开发 使用差分算法实现增量更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3432字,纯文字阅读大概需要5分钟。
内容图文
![Android开发 使用差分算法实现增量更新](/upload/InfoBanner/zyjiaocheng/617/de90b5893daa44fc9418cac1a4bb622a.jpg)
还是老样子先上效果图,由于上传图片限制压缩有点严重凑合看吧:
首先使用差分算法bsdiff计算出差分包,感兴趣的可以自己点击进去下载源码,然后就是使用bzip2压缩工具打包生成补丁差分包文件和合并补丁包文件;由于这里提供的都是C语言程序所以我们需要借助NDK/JNI实现增量更新了。
我们先去bsdiff地址下载bsdiff.c和bspatch.c这两个文件,然后去bzip2下载源码包解压复制粘贴出我们需要的文件:
bzip2/blocksort.c\
bzip2/bzip2.c\
bzip2/bzip2recover.c\
bzip2/bzlib.c\
bzip2/bzlib.h\
bzip2/bzlib_private.h\
bzip2/compress.c\
bzip2/crctable.c\
bzip2/decompress.c\
bzip2/huffman.c\
bzip2/randtable.c
好了准备工作我们都做好了就开始创建JNI文件吧:
1.创建一个java文件例如:DiffPatchUtil,然后使用命令进入该文件目录下用命令编译“javac DiffPatchUtil.java”生成DiffPatchUtil.class文件,再执行“javah com.xhiston.diffpatch
.DiffPatchUtil”生成com_xhiston_diffpatch_DiffPatchUtil.h文件这一步大家需要注意一下命令目录回退一下到DiffPatchUtil的最外层包名下面不然命令提示找不包名下文件。DiffPatchUtil.java创建的时候可以简单的只放JNI回调的相关方法,生成com_xhiston_diffpatch_DiffPatchUtil.h文件后再修改添加其他方法。
package com.xhiston.diffpatch;
import android.content.Context;
import android.os.Looper;
import android.widget.Toast;
/**
* Created by xie on 2020/10/20.
*/
public class DiffPatchUtil {
static {
System.loadLibrary("diffpatch");
}
/**
* 采用差分算法将当前包与新包打patch补丁包,生成xxx.patch文件
**/
public native int diff(String oldApk, String newApk, String patch);
/**
* 采用差分算法将patch补丁包与当前包合并生成新包,生成apk文件
**/
public native int patch(String oldApk, String newApk, String patch);
}
com_xhiston_diffpatch_DiffPatchUtil.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_xhiston_diffpatch_DiffPatchUtil */
#ifndef _Included_com_xhiston_diffpatch_DiffPatchUtil
#define _Included_com_xhiston_diffpatch_DiffPatchUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_xhiston_diffpatch_DiffPatchUtil
* Method: diff
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_xhiston_diffpatch_DiffPatchUtil_diff
(JNIEnv *, jobject, jstring, jstring, jstring);
/*
* Class: com_xhiston_diffpatch_DiffPatchUtil
* Method: patch
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_xhiston_diffpatch_DiffPatchUtil_patch
(JNIEnv *, jobject, jstring, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
2.创建com_xhiston_diffpatch_DiffPatchUtil.c以及JNI配置文件Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
APP_ABI := All
APP_PLATFORM := android-16
LOCAL_C_INCLUDES :=bzip2
LOCAL_MODULE := diffpatch
LOCAL_SRC_FILES := com_xhiston_diffpatch_DiffPatchUtil.h\
com_xhiston_diffpatch_DiffPatchUtil.c\
bspatch.c\
bsdiff.c\
myerr.h\
myerr.c\
bzip2/blocksort.c\
bzip2/bzip2.c\
bzip2/bzip2recover.c\
bzip2/bzlib.c\
bzip2/bzlib.h\
bzip2/bzlib_private.h\
bzip2/compress.c\
bzip2/crctable.c\
bzip2/decompress.c\
bzip2/huffman.c\
bzip2/randtable.c\
include $(BUILD_SHARED_LIBRARY)
修改一下bspatch.c、bsdiff.c里的main方法名然后com_xhiston_diffpatch_DiffPatchUtil中就可以重新调用了,可以参考我的源码进行修改,确保代码无误后便可以ndk-buildd编译生成so库了,当然编译的时候也会检查代码报错的需要自行修改,不过这个就要求大家有一定的C语言基础了,没基础的话可以现学一下不是多难。
3.如果大家不想修改,我这里已经为大家封装成library库了,大家直接下载导入diffpatch库引用一下就可以直接使用了非常简单;
内容总结
以上是互联网集市为您收集整理的Android开发 使用差分算法实现增量更新全部内容,希望文章能够帮你解决Android开发 使用差分算法实现增量更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。