###前言

在上节中,我们已经学习了`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查看

android cpp做成so库,Android增量更新(二)—制作合成文件so库相关推荐

  1. 群晖Nas通过jellyfin搭建本地影音库详细全过程(二):jellyfin影音库信息手动刮削和相关设置(100%扫库成功)

    前言,上期讲了如何安装jellyfin,根据我个人使用感受,我很开心的将收藏的电影复制到媒体库中,在jellyfin中新建了媒体库,然后发现自动刮削就是shit,还有一大半电影直接不显示,很多人可能会 ...

  2. 国二试题库c语言,国二c语言笔试试题库(试题).doc

    PAGE 49 第一章 C语言概述 一 单项选择题 1.一个C程序的执行是从( ). A) 本程序的main函数开始,到main函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结 ...

  3. 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端客户端

    Incremental-update-master 项目地址: ccj659/Incremental-update-master 简介:采用 bsdiff 开源库 Android 的增量更新,差分更新 ...

  4. python增量更新数据_Python标准库——加密

    增量更新 散列计算器的update()方法可以反复调用.每次调用时,都会根据提供的附加文本更新摘要.增量更新比将整个文件读入内存更高效,而且能生成相同的效果. 新建hashlib_update.py文 ...

  5. java实现增量更新_Android 增量更新的完整实现步骤

    本文的代码在:https://github.com/czl0325/android_app_update 1.下载bsdiff库 首先增量更新用到了开源的bsdiff库,先到官网下载,地址是http: ...

  6. 创建制作SDK的静态库工程

    因为公司需要持续性向别人提供一套蓝牙锁SDK,按照传统的方式打包静态库真是太痛苦,SDK依赖的一些私有库会有频繁的更新,依赖的第三方库也是错综复杂.我迫切需要找到一种更方便的打包静态库的方式,既能随时 ...

  7. Mongodb数据库转换为表格文件的库

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 却嫌脂粉污颜色,淡扫蛾眉朝至尊. ...

  8. Android增量更新 bsdiff bspatch库加入到Android工程

    最近项目中要使用增量更新去下载更新我们app内部的H5离线资源包,现把遇到的问题总结一下 用到的库 都要科学上网 bsdiff 第一次进入官网感觉很懵逼,没找到download的字眼,不要急,慢慢往下 ...

  9. Android Apk增量更新

    前言 有关APK更新的技术比较多,例如:增量更新.插件式开发.热修复.RN.静默安装. 下面简单介绍一下: 什么是增量更新?   增量更新就是原有app的基础上只更新发生变化的地方,其余保持原样. 与 ...

最新文章

  1. iphone开发UITable内嵌不同风格Table
  2. web中的cookies以及作用--web testing 学习笔记
  3. Nature Cancer | 发现非肿瘤药物的抗癌潜力
  4. 章鱼有9个大脑能编辑基因,智商高到无法理解,为何没发展出文明
  5. python fileinput模块next_Python中的fileinput模块的简单实用示例
  6. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
  7. Boost:求容器的最小元素和最大元素
  8. [html] canvas透明度是0.6的矩形和透明度是0.2的矩形叠加到一起,透明度是多少
  9. pandas中DataFrame的学习笔记~
  10. 2021爱分析·中国房企数字化实践报告
  11. 微信小程序|基于小程序实现人脸识别对比
  12. 一篇论文8778个作者:人均写5个字,署名用了17页
  13. ubuntu分区大小
  14. 联通沃云发布全新战略:强大基座,就在身边
  15. Java之IK 分词器
  16. 团队执行力(企业管理培训)
  17. 无偏估计、有效性、相合性
  18. 内存地址[bx+idata]、[bx+si/di]、[bx+si/di+idata]的灵活定位
  19. 基于electron的音视频播放器
  20. 计算机在工商管理中的应用,计算机在企业管理中的应用.doc

热门文章

  1. adb mac电脑 pull_有史以来最贵的苹果Mac笔记本,PowerBook 5300ce(1995)体验
  2. 使用 nginx 同域名下部署多个 vue 项目,并使用反向代理
  3. 三层交换机工作原理(转载)
  4. iOS学习资源(三)
  5. Eclipse 菜单
  6. Jscript 随记
  7. Javascript学习总结三(Array对象的用法)
  8. 【Android】4.3 屏幕布局和旋转
  9. MyBatis 注释
  10. C#数组排序(按列)