JNI--MicrosoftWindows平台下使用bsdiff生成差分文件的运用

增量更新是很多大型企业常用的技术,目的是为了节省服务器流量来更新版本,运用范围也非常广泛,pc客户端,游戏,移动端应用,甚至服务器代码更新都可以使用。今天来介绍微软windows平台下如何使用增量更新

对于服务器而言,增量更新一般是对旧版本文件和新版本文件进行差分,形成差分文件

对于客户端而言,增量更新一般是拿到服务器的差分文件,和旧版本文件进行合并,形成新版本文件

所以对于服务器开发者而言,只需要学习如何对文件进行差分即可

使用增量更新需要用到第三方开源库

1.bsdiff:http://www.daemonology.net/bsdiff/
2.bzip:http://www.bzip.org/downloads.html(需要翻墙)

这两个网站默认都只提供linux平台下,其中bsdiff依赖bzip。
windows版可以使用:https://pan.baidu.com/s/1XB63VWuzGdJbNg1GGdW6qQ 提取码:406f
下载解压后如下:
bsdiff4.3-win32-src.png
我们使用vs创建一个新的工程,并新增两个文件夹,include存放.h文件,src存放c和cpp文件
将bsdiff中的文件拷贝到相应目录
include.png
src.png
在vs的头文件和源文件中分别右击添加现有项后,我这边是64位平台,所以选择64位(看具体是32位还是64位)编译
接下来配置头文件目录,在右击->属性->c/c++->附加包含目录中选择编辑
新建一个,然后点击右边的...图标,选择目录
重新生成下解决方案,发现了几个报错:
_CRT_SECURE_NO_WARNINGS只是一个警告,我们在继续来到属性->c/c++->预编译器->预编译定义中新增_CRT_SECURE_NO_WARNINGS
重新生成解决方案,有新的报错:
这个问题把SDL检查关闭就可以了
最后我们只要生成拆分文件,所以把bspatch.cpp移除,最后成功生成exe文件
查看bsdiff中的mian方法,执行exe需要传入三个参数,第一个是旧文件路径,第二个是新文件路径,第三个是生成的差分文件路径
if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]);
这边有两个apk,然后我们在命令行中执行差分
最后结果:
生成的差分包大小要比全量更新小的多,达到省流量的目的
当然如果服务器端是使用Java,只需要添加windows平台jni支持,使用native方法调用第三方库中的c/c++代码就可以了。

你可能感兴趣的:(JNI--MicrosoftWindows平台下使用bsdiff生成差分文件的运用)