基于bsDiff拆分模式所做的资源包的热部署热更新

项目场景:

`最近项目中 有一个新的需求 本来我开发的app一些基于webview所作的网页静态资源 需要本地化到系统中 这样可以少消耗网络带宽以及流量 基于这个场景 引出了资源包的更新机制问题 emmm更新这玩意贼麻烦 因为你所持有的资源包 什么资源都有 接口的返回json文件 图片啊 视频啊 什么什么的 贼烦。那么有没有一种可以囊括所有文件格式 并做到更新的方式呢 有那就是基于二进制算法的bsdiff拆分形式。

原理

二进制这个东西 相信大家都不陌生 我们接触的所有文件格式 其实在计算机内部 都是二进制的编码 比如图片 就是在开头定义了图片的宽高 如果你用记事本的形式打开图片 然后删除前面一些部分 图片是不是打不开了 还真是 但是呢 你如果删除的是后半部分 那么你的图片还是能打开的 只是只会展示一半 应该大概也许不止我一个人这么干过吧虾h(~ ̄▽ ̄)~ 一前闲着无聊 咳咳廉颇老矣啊( *︾▽︾)

准备

需要的开源文件

这里我把需要用到的代码和工具都整理了一下放到了一起:https://www.aliyundrive.com/s/ALCxbGeWY2o在这里插入图片描述
bzip2:是bsdiff依赖的一个库,这里我只存放了需要用到的文件,完整版的下载地址为:https://sourceforge.net/projects/bzip2/files/latest/download
bsdiff-win:是编译好的Windows平台下的可执行文件,可以在Windows平台生成差异文件和合并文件
bsdiff-source:是bsdiff的源码,它的官网为:http://www.daemonology.net/bsdiff/

工具的使用方式

只需要在工具所在的目录打开命令行窗口
在这里插入图片描述

然后输入命令即可

#生成差异文件命令
bsdiff [旧文件] [新文件] [差异文件]
#合并文件命令
bspatch [旧文件] [新文件] [差异文件]
#生成差异文件命令
bsdiff [旧文件] [新文件] [差异文件]
#合并文件命令
bspatch [旧文件] [新文件] [差异文件]

例如我这创建两个文本文件old.txt和new.txt
old.txt
new.txt


在这里插入图片描述
在这里插入图片描述

然后我可以利用bsdiff命令生成差异文件

在这里插入图片描述
然后你就会看到我们生成出来的拆分包
在这里插入图片描述

这个时候我再利用bspatch命令,将old.txt和patch文件合成new2.txt。咳咳忽略俺打错的字
在这里插入图片描述
然后这个是时候 你看看 是不是就会有两个最新的文件一个new.txz/new2.txt
在这里插入图片描述
我们打开new2.txt发现与new.txt是一样的,瞅瞅是不是一毛一样
new2.txt

在这里插入图片描述

代码:

好 相信看到这里 大家也懂这个东西是干嘛的了 又怎么用的了吧 相对于这些 大家肯定还是想看的如何使用代码来进行这些操作!

集成

1.集成bspatch到项目
由于Android端只需要合并文件所以我们只需要集成bspatch即可,我们将bsdiff-source/bsdiff-4.3文件夹中的bspatch.c文件拷贝到cpp目录,然后将bzip2文件夹下的文件拷贝到cpp下的bzip(新建的目录)目录下
在这里插入图片描述
此外我们还要对bspatch.c进行修改,我们在文件顶部加入bzip2的引用

/** 导入bzip2的引用*/
#include "bzip/bzlib.c"
#include "bzip/crctable.c"
#
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值