###前言
在上节中,我们已经学习了`Android增量更新`的实现原理,那么在Android开发的移动端,我们需要涉及到的其实是`文件合成`的这个流程。
那么,今天就来讲讲增量更新合成流程的实现吧。
今天涉及内容:
1. Android端代码需要实现的部分
2. 制作so文件
2.1 准备工作
2.2 准备工作`so`文件制作要点
2.3 制作流程
3. 生成`so`文件和`jar`包
4. MainActivity中使用代码
5. 项目结构图
####一.Android端代码需要实现的部分
我们知道Android增量更新需要两步:
- 生成增量文件
```
bsdiff old.apk new.apk old-to-new.patch
```
- 合成新文件
```
bspatch old.apk new2.apk old-to-new.patch
```
一般`生成增量文件`是在服务端完成,而客户端需要的是用代码实现`合成新文件`的流程。
这里涉及到 `java`调用`c/c++`的问题,所以需要我们新建一个`JNI`项目,然后利用跟这个项目生成一套`so+jar`的库,最后在你项目中使用这个库文件,实现增量更新的合成过程。
####二.制作`so`文件
#####2.1 准备工作
JNI环境的搭建请查看
[JNI(一)—NDK环境搭建](https://www.jianshu.com/p/fa95d74a017d)
JNI生成`so`库的过程,查看
[JNI(二)—创建JNI项目,生成so文件](https://www.jianshu.com/p/9f3b321bfa89)
需要`bsdiff`工具包和`bzip2`压缩包。因此我们只需要获得源码来使用即可.
[bsdiff 下载地址](http://www.daemonology.net/bsdiff/)
[bsdiff 依赖bzip2(zip压缩库)](https://sourceforge.net/projects/bzip2/)
#####2.2 准备工作`so`文件制作要点
新建`jni`项目后,解压`bsdiff`工具包,将`bsptch.c`拷贝到项目的`cpp/`文件夹下,如下图:
![](/contentImages/image/20200107/lE1MrqZmJN5nORv730h.png)
解压`bzip2`压缩包,在`cpp/`文件夹下新建`bzip`文件夹,然后将`bzip2`压缩包中以下文件拷贝到`bzip`文件夹下:
![](/contentImages/image/20200107/jGLRXwyGm8uC1FZP3f9.png)
#####2.3 制作流程
1. 新建java文件,建立jni桥梁
2. 编辑`cpp`文件
3. 编辑`CMakeLists.txt`文件
4. `app_module`中配置`CMakeLists.txt`文件路径
5. 运行项目,生成`so`库文件
6. 制作`jar`文件
####三.生成`so`文件和`jar`包
生成后的`so`截图如下:
![](/contentImages/image/20200107/2N11Wf6bWu8rUfiglYh.png)
`jar`包截图
![](/contentImages/image/20200107/bGKojszIgKIMAGDlzbl.png)
####四。MainActivity中使用代码
Mainactivity中使用参考重要代码如下:
```
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText("哈德罗克经济");
// //此为参考代码
// BsPatcher.bsPatch("old.apk","new.patch","new.apk");
}
}
```
####五.项目结构图
![](/contentImages/image/20200107/cysOGXBU2lq9KCcVO2Y.png)
ok,今天的内容就讲到这里了。详情下载demo查看