<Excerpt in index | 首页摘要>
Android差分生成-下-Linux服务器So生成
<The rest of contents | 余下全文>
概述
因为服务器一般是跑在linux服务器上的
而linuxjni需要的动态库是so不是dll
所以我们需要专门去生成linux下服务器拆分文件所需要的so动态库
需要的东西
1>bzip2
2>bsdiff
3>eclipse
4>linux服务器一台(可以是模拟器)
流程
首先创建一个目录.
然后解压bzip2把里面所有的.c .h文件放入目录中
然后解压bsdiff,把其中的bsdiff.c放在目录中
打开bsdiff.c 修改main函数名为 bsdiff_main
打开bzip2.c 修改main函数名为 bzip2_main
用eclipse创建一个java项目
首先创建JniUtils.java
内容如下:
1 | package com.gloomyer.demo; |
然后创建Test.java
1 | package com.gloomyer.demo; |
然后进入项目的src目录.打开命令行.
输入:javah JniUtils全路径名称(带包名的那种) 生成.h头文件
把这个生成的头文件拷贝到之前创建的目录里面去
找到你的android ndk目录
里面的platforms里面随便一个android-xx目录的里面随便一个目录下的usr目录->include目录 找到jni.h
拷贝到刚才创建的目录中
编辑我们生成的那个.h文件
然后编辑里面的include jni 把尖括号换成双引号
编辑bsdiff.c
删除:
1 |
|
然后吧include bzlib.h的尖括号改成双引号
然后在文件顶部加入:
1 |
文件末尾加入:
1 | JNIEXPORT void JNICALL Java_com_gloomyer_demo_JniUtils_diff |
最后的目录结构如下:
然后吧整个目录上传至服务器
然后ssh连接至服务器
然后进入刚才上传的目录中
输入:
1 | gcc -fPIC -shared blocksort.c decompress.c bsdiff.c randtable.c bzip2.c huffman.c compress.c bzlib.c crctable.c -o bsdiff.so |
然后将之前用eclipse创建的项目打包成jar,上传至我们刚才上传至服务器的目录中去
然后生成 v1, v2版本的apk取名为v1.apk v2.apk 也上传到刚才那个目录中去
然后在刚才那个目录下执行
1 | java -jar diff.jar |
ok 我这里成功的运行了起来。那么说明我这里的so文件是创建正确的。
然后就可以将这个so交给后端使用啦!