美文网首页
JNI——增量更新

JNI——增量更新

作者: 追寻米K | 来源:发表于2018-10-10 23:09 被阅读0次

bspatch 官网:http://www.daemonology.net/bsdiff/

bzip2 官网:http://www.bzip.org/

流程:客服端会请求网络把vesioncode 发送给服务端,然后服务端根据vesioncode 判断需不需要更新,如果要更新就使用新的包(new.apk)和 老包(old.apk)生成一个差分包(apk.patch),客服端在下载这个apk.patch,和本地old.pak合并得到一个new.apk。

服务器有可能是windows环境的也有可能是linux环境的。

windows环境的差分:

1、生成windows 的差分工具

从官网下载windows环境的bsdiff(可能会打不开)

解压下载下来的bsdiff,已经有编译好的diff.exe和patch.exe(做差分和合并用的),但是我们要的是一个动态库(dll动态库),所以我们自己生成一个动态库。

第一步:首先使用Visual Studio 新建一个C++的空项目

第二步:然后在项目中新建两个文件夹

include放头文件,src中放源文件

把绿色的头文件拷入include,红框的源文件拷入src文件,因为是生成差分工具所以只需要bsdiff.cpp,如果要生成合并工具只要bspatch.cpp,他们二者只能取其一。其他.c文件都需要。

右键源文件——》添加——》现有项,然后选择src里面的源文件,头文件也是这样操作。

然后有点C_Diff ——》属性——》C/C++——》常规——》附加包含目录——》编辑——》选择inculde目录(这个是解决bsdiff.cpp中头文件出错的问题)

准备好这些赶紧编译吧,结果一堆错误。。。

第三部:解决错误,先把警告去掉:右键C_Diff ——》属性——C/C++——》预处理器——》预处理器定义,把_CRT_SECURE_NO_WARNINGS拷贝进去。

继续编译 只有两个错误了。

这是错误是安全检查,并不是代码问题。

右键C_Diff ——》属性——C/C++——》常规——》SDL检查  把是改成否。

第三步:右键C_Diff ——》属性——》配置类型 由应用程序(.exe)改为动态库(.dll)

第四步:编写JNI代码,eclipse新建一个服务器项目,创建一个类,一个native的差分方法,生成头文件。

然后把头文件拷入刚才的Visual Studio项目的include里面,同样的添加现有项,然后再把jni.h和jni_md.h两个头文件也拷进去(主意这里是生成windows平台的差分工具,所以jni.h和jni_md.h要在windows版本的NDK中拷贝)。

第五步:把都文件中的方法diff复制到bsdiff.cpp中,别忘了导入头文件,然后就可以编写JNI了。

把bsdiff.cpp中的main方法改名叫bsdiff_main了

生成解决方案得到一个dll动态库,拷贝到项目中就可以用啦。

linux 生成差分包:

使用ftp把上面说到的那些C文件都上传到linux环境的文件中,

修改C文件中的main方法(随便起个名字)bsdiff.c除外,然后执行

gcc -fPIC -shared blocksort.c bzip2.c bsdiff.c bzlib.c 。。。-o  mik.so就能得到linux环境下的so库了,只能在服务器中使用,安卓客户端不能直接使用。

具体的上传 后面的shell脚本会讲

Android 客户端生成合并包:

把下载的linux环境的bsdiff包和bzip2包解压,把bsdiff包中的bspatch.c和bzip2中的所有.c文件和.h文件都复制到Android Studio项目中(main/cpp下),别忘记修改c文件中的main方法(其实dlltest.c、mk251.c、spewG.c、unzcrash.c、bzip2recover.c没有用到)把bsdiff.c中的#include<bzlib.h>改为#include "bzlib.h"

然后就开始写JNI方法了。

因为在data/app目录中会有本地的APK(除非root之后删除),所以不用担心本地没有旧的apk。

源码

相关文章

  • JNI——增量更新

    bspatch 官网:http://www.daemonology.net/bsdiff/ bzip2 官网:ht...

  • ReactNative 增量热更新思路

    增量热更新 ReactNative 增量更新 ReactNative 增量更新的内容包含 JS 和图片,在每次应用...

  • android 增量更新

    android增量更新 android 4.1开始 google引入了应用程序的增量更新。增量更新的原理实际上是使...

  • 一、NDK:增量更新

    增量更新在Android开发中是一种很常见的技术。 增量更新的原理 增量更新的原理非常简单,就是将本地apk与服务...

  • ReactNative热更新&拆包

    目录 1)全量热更新-Android 2)拆包增量更新-Android 3)图片增量更新-Android 4)全量...

  • 手把手玩Android 增量更新

    前言: 增量更新已经出来几年了,而一些大的公司早就实现了增量更新。增量更新相较于全量更新的好处不言而喻,利用差分算...

  • 增量更新

    搭建ndk+cmake环境setting中system settings->android sdk->sdk t...

  • 增量更新

    思路 通过bsdiff库对new_apk和old_apk进行二进制对比,然后抽取差异化生成new_old.patc...

  • 增量更新

    差分(服务端需要做) 旧版本apk、新版本apkBsDiff开源项目(依赖于Bzip2)1.根据下载的bsdiff...

  • 增量更新

    github完整代码传送门 bsdiff 源码http://www.daemonology.net/bsdiff/...

网友评论

      本文标题:JNI——增量更新

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