实现流程:
1.需要生成一个差分包,然后放在服务器上,也可以动态让服务器生成
2.Android端下载差分包
3.合并差分包,并安装
服务器:
服务器分为Linux和Windows,Linux识别.so库,使用文件运行文件(Linux 可执行文件无后缀名)
Windows服务器:识别.dll动态库,使用.exe运行文件
Windows服务器实现:
需要去bspatch 官网:http://www.daemonology.net/bsdiff/
下载差分和合并.c文件
bisdiff.c 是差分文件 bspatch.c 是合并文件
然后在下载压缩.c文件,http://www.bzip.org/downloads.html 捣鼓半天没有下载下来,
给一个我找的资源:链接:https://pan.baidu.com/s/1GSprUyjjb_7ctLpjiNbQow 密码:7s62
资源里面:bsdiff4.3-win32-src下有bsdiff.exe 文件,直接可以通过这个文件生成差分包;
windows 服务器下命令:bsdiff.exe old.apk new.apk pat.patch
这样就生成差分文件了,但是我不希望如此,通过自己编译源码生成.exe 和动态.dll文件
生成.exe 差分执行文件
1.首先准备资源文件
bsdiff4.3-win32-src 将文件下的.c .cpp 和.h 文件
2.导入生成.exe
将准备好的资源分别导入Visual studio 头文件和资源文件,然后运行生成.exe 文件,.exe文件也可以用上面的命令生成差分包
生成.dll文件
1.为什么好处
windows服务器可以动态生成差分包,这样版本升级不需要每次手动生成差分包
2.步骤
1)需要在服务器引用,我这里就用一个测试java列子
使用javah 命令生成 .h 文件
然后在Visual studio中引用
因为是编译器找不到 jni 和jni_md 文件 这个是jdk 中include 文件中的资源需要手动复制过来 jni_md在win32里面
动态库由于是.cpp文件 需要懂点c++ 和jni 当然如果不会,那只能看案列,靠测试了
需要把main函数改成diff_mian 然后把需要的参数设置好,这个时候把配置调理器调成64位,
然后生成解决方案,就可以把生成的.dll 文件复制到Window 服务器了
这个时候服务器可以动态运行生成差分包
Linux 服务器生成差分包
1.准备资源
首先你要安装两个软件,很小很简单,Xftp 和Xshell ; Xftp上传资源,Xshell 连接服务器使用gcc命令;将bzip2-1.0.6里面的. c和.h文件和bsdiff-4.3文件下的bsdiff.c 上传到服务器
2.使用Xshell 生成可执行文件
首先必须把所有文件里面的main方法改成不是main方法 ,bsdiff.c中的入口main函数留着,把引用改了#include "bzip2/bzlib.h"
命令:gcc -fPIC blocksort.c bzip2recover.c bzlib_private.h decompress.c mk251.c bsdiff.c bzlib.c compress.c dlltest.c randtable.c unzcrash.c bzip2.c bzlib.h crctable.c huffman.c spewG.c -o TimBsdiff
这个命令就生成可执行文件
3.生成差分包
命令:./Timbsdiff appOld.apk appNew.apk apk.path
使用Xshell 生成.so文件
1.准备资源 同上
2.要生成动态库,需要对应调用文件下生成.h 文件
这个步骤给个详细链接:https://blog.csdn.net/qfanmingyiq/article/details/70215295
和上面生成.dll文件有些像似,首先把资源文件放到Visual studio 中,然后把bsdiff.c 中main函数改成不是主函数diff_main(..),然后把对应引用的java文件生成Javah 生成.h 文件 ,在bsdiff.c中引用这个.h 文件 ,但是这个.h文件需要引用jni.h 由于等会要在Linux中生成.so 文件,平台是Linux这个jni 使用Android sdk中的ndk文件jni,
3.编写jni
4.使用命令生成.so 库
gcc *.c fPIC -shared -o test.so