Android NDK开发-APK增量更新

概述

现在的APP更新频率非常高,apk的大小也在不断的变大。如果每次新版本的更新,都让用户去下载一个完整的apk,这对于用户的耐心和流量都是巨大的消耗。特别是做应用市场的,如果没有增量更新,那么就要额外的付出高额的流量费用。

原理

将手机已安装的apk与服务端最新的apk进行二进制对比,得到差分包,用户更新程序时,只需要下载差分包,并在本地使用差分包与已安装的apk合并成新版的apk。

工具

bsdiff、bspatch

下载地址:http://www.daemonology.net/bsdiff/

编译源码:

Step1: make

出错信息:

Step2: 修改Makefile文件,将install:下面的ifendif各添加一个缩进:

Step3: make

错误信息:

Step4: 在bspath.c中添加#include <sys/types.h>

Step5: make

生成差分包

./bsdiff v1.0.0.apk v1.0.1.apk 1.0.0-to-1.0.1.patch 

合并差分包

./bspatch v1.0.0.apk new.apk 1.0.0-to-1.0.1.patch

对比文件是否一样:

在Android项目中使用bspatch

Step1:下载依赖库bzip的源码(官网域名过期),可以从我的GitHub项目中拷贝:

下载地址:https://github.com/xch168/BsPatchTest

Step2:将bzip库,导入到Android项目中;

Step3:将bsdiff中的bspatch.c文件导入到Android项目中,并将bspatch.c中的#include <bzlib.h>改成#include "bzip2/bzlib.h"

Step4:编写CMakeLists.txt

Step4:编写代码

Java层:

BsPatchUtil.java

调用:

C层:

bspatch-util.h:

bspatch-util.c

Step5:将通过bsdiff生成的差量包1.0.0-to-1.0.1.patchpush到手机sdcard目录

Step6:运行程序,点击”增量更新“

参考链接

  1. https://www.jianshu.com/p/99d986db4db8
  2. https://blog.csdn.net/lmj623565791/article/details/52761658
  3. http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1222/3795.html
  4. https://blog.csdn.net/dd864140130/article/details/52928419
  5. https://www.cnblogs.com/lping/p/5833090.html

原文发布于微信公众号 - 编码前线(gh_acef1225aadd)

原文发表时间:2018-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏宝哥的专栏

Docker系列学习文章 - 存储基本配置(八)

| 导语 通过前面的文章学会后,我们运行一个容器,打包制作一个镜像没啥问题了。但是要真正在生产上运用docker,我们还差两招很重要的。一个是数据卷的配置,还有...

1.6K280
来自专栏IT综合技术分享

二、kvm安装与虚拟机绑定虚拟网桥

BIOS——>config——>CPU——> Intel(R) Virtualization Technology (Enabled) Intel(R) V...

24530
来自专栏数据科学与人工智能

【Python环境】Python的数据分析(二)——pandas安装及使用

一. 安装pandas 1. Anaconda 安装pandas、Python和SciPy最简单的方式是用Anaconda。Anaconda是关...

24560
来自专栏bboysoul

使用docker搭建zabbix

再次之前我们要知道zabbix的主要架构是怎样的,zabbix有一个server端是最主要的,主要是用来收集agent传来的数据然后进行处理等一系列操作,当然有...

23130
来自专栏杨建荣的学习笔记

数据刷新中的并行改进(二) (r5笔记第76天)

在之前的博文【数据刷新中的并行改进(r5笔记第72天)】中分享了数据刷新中的并行改进建议,但是对于方案的落地还是有很多的细节需要实现。 首先是关于很多的表怎么把...

26640
来自专栏吴伟祥

Docker学习——Docker 三剑客(七) 顶

19210
来自专栏finleyMa

docker学习系列15 Docker在PHPStorm中的使用

下面介绍怎么通过PHPStorm创建并运行一个docker容器项目,以Windows系统为例

1.3K30
来自专栏架构说

阅读准备-构建redis容器

docker容器默认只提供一个服务, 我试图ssh进去 gdb git tcpdump strace valgrind 又安装redis 折腾很长时间 主要遇如...

42860
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Docker安装Prometheus

Prometheus是一个开源监控系统和时间序列数据库。它涉及监控的许多方面,例如度量标准的生成和收集,在仪表板上绘制结果数据以及针对异常情况发出警报。为实现这...

22500
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Docker Bench对Docker主机进行安全性审核

使用Docker来容纳您的应用程序和服务可以为您提供开始即用的一些安全优势,但默认的Docker安装仍然有一些空间可用于一些与安全相关的配置改进。在互联网安全中...

17930

扫码关注云+社区

领取腾讯云代金券