bsdiff实现APK增量更新原理和实现

本文介绍了bsdiff实现APK增量更新的原理,包括通过差量包和旧安装包合成新安装包的过程,以及其节省流量、快速升级等优点。同时,讨论了增量更新的缺点,如需要为每个版本生成差分补丁,以及对系统内置或修改过的apk的限制。详细阐述了功能实现步骤,包括bsdiff和bzip2的下载、JNI工程的创建、文件编译以及权限处理。最后,提供了demo代码链接供参考。
摘要由CSDN通过智能技术生成

增量更新原理

增量更新是由差量包和旧安装包合成新的安装包,再进行安装。
在这里插入图片描述

增量更新优缺点

优点:

由于下载的是差量包,所以可以快速升级且节省用户流量。

缺点:

1. 增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。

2. 增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好通过md5 或者其他方式对patch包进行完整性的校验。

摘自:https://www.jianshu.com/p/f0f2950dee74

功能实现

一、bsdiff下载
bsdiff下载地址:http://www.daemonology.net/bsdiff/,打开之后点击下图位置进行下载。
在这里插入图片描述
bsdiff下载后,解压bsdiff-4.3.tar.gz,取出目录中的bspatch.c文件,我们要用的就是这个文件中的bspatch_main方法。

二、bzip2下载

bzip2下载地址:https://sourceforge.net/projects/bzip2/或者在http://www.androidos.net.cn/android/9.0.0_r8/xref/external/bzip2取出文件blocksort.cbzip2.cbzlib.cbzlib.hbzlib_private.hcompress.ccrctable.cdecompress.chuffman.crandtable.c,因为bsdiff的编译需要依赖bzip2,所以需要这些c文件。

三、代码实现

1. 使用android studio创建JNI工程,可参考文章:https://blog.csdn.net/u010982507/article/details/85345985

2.bsdiff-4.3包中拷贝bspatch.ccpp目录下,如下图所示:
在这里插入图片描述

3. 需要会使用JNI技术,将bzip2中需要编译的文件拷贝到工程cpp目录下,如下图所示:
在这里插入图片描述

4.CMakeLists.txt文件中添加编译文件

# camke编译版本
cmake_minimum_required(VERSION 3.4.1)
# 引入文件,使用bzip变量引用
file(GLOB bzip src/main/cpp/bzip/*)
# 添加动态编译文件
add_library( native-lib SHARED src/main/cpp/native-lib.cpp ${bzip} src/main/cpp/bspatch.c)
# 添加NDK中log库
find_library( log-lib log )
# 编译库
target_link_libraries( native-lib ${log-lib} )

注意:编译bspatch.c文件时&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ruiurrui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值