客户端软件增量更新

增量更新使用到一个开源库bsdiff,bsdiff是一个差分算法,原理是旧文件跟新文件对比,尽可能多的利用old文件中已经有的内容,尽可能少的加入新的内容来构建new文件。
通常的做法是对旧文件和新文件做字符串匹配或者使用hash技术提取公共部分,然后把新文件的剩余部分打成patch包(差分包中记录着新内容相对旧内容的偏移地址),
在Patch阶段中用copying和insertion两个操作把旧文件和patch文件合成新文件。
增量更新的流程:
	在服务器端,使用bsdiff工具把旧的apk和新的apk进行比对得到差分包patch包,
	通过网络下载到本地,通过bspatch工具把本地旧的apk和patch包合成新的apk包。最后安装新的apk


缺点:
我们不能保证所有用户都能升级完成,比如我们最新的patch包是2.0版本和3.0版本差分出来的,
如果用户此时用的1.0版本,那就无法升级成功,所以还要做一个1.03.0之间的差分包。
随着版本的越来越多,需要做的差分包也越来越多。可以在Linux中写一个自动的脚本来完成。
如果差分包在下载的过程中被篡改也无法合成成功,可以下载完后通过md5 或者其他方式对patch包进行完整性的校验。


bsdiff增量更新
BSDiff是一个差量更新算法,它在服务器端运行BSDiff算法产生patch包,在客户端运行BSPatch算法,将旧文件和patch包合成新文件。
差量更新算法的核心思想
尽可能多的利用old文件中已有的内容,尽可能少的加入新的内容来构建new文件。通常的做法是对old文件和new文件做子字符串匹配或使用hash技术,提取公共部分,将new文件中剩余的部分打包成patch包,在Patch阶段中,用copying和insertion两个基本操作即可将old文件和patch包合成new文件。

BSDiff算法的改进
Insertion操作会引起大量的指针变动和修改,要记录这些值才能在Patch阶段给修改过的区域重新定位,由于这些指针控制字必须在BSDiff阶段加入patch包,产生的patch包会较大。BSDiff通过引入diff string的概念,大大减少了要记录的指针控制字的数目,从而使得patch包更小。

BSDiff的三个基本步骤如下:
1.对old文件中所有子字符串形成一个字典;
2.对比old文件和new文件,产生diffstring和extra string;
3.将diffstring 和extra string 以及相应的控制字用zip压缩成一个patch包。

BSPatch基本步骤:
客户端合成patch的基本步骤如下:
1.接收patch包;
2.解压patch包;
3.还原new文件。




双目录更新思路:
随着更新包越来越大,更新下载和安装的时间也越来越长,造成用户长时间等待,有的软件采用了后台下载后台更新的方式。所谓后台下载就是无论用户是否点了立刻更新,
只要有新版本就在后台偷偷给用户下载下来,有点流氓,但这也是为了用户体验呢。那么后台更新呢,正在运行的程序,每个文件都是被占用的,是不能更新的。还是Chrome想出来的,
双目录更新,把就版本先复制到另一个目录,然后更新这份新复制的,下次用户启动的时候就直接启动新版本。比如 Chrome有如下的目录结构 
Chrome
    +Application
        +35.0.1916.153
        +35.0.1916.114
         chrome.exe 
它用版本号做目录名,每次升级的时候更新新版本,旧版本在另一个目录运行不受影响。下次启动的时候 Chrome.exe永远加载最新版本的dll运行就好了。
chrome.exe是个很小的程序,里面的逻辑就是检测下版本号加载最新版本的dll,这样简单的程序本身几乎不需要更新。


1.csdn博文
https://blog.csdn.net/darling757267/article/details/80652267
2.简书
https://www.jianshu.com/p/ca40bfc4a81f?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo
3.github地址
https://github.com/mendsley/bsdiff
4.知乎
https://www.zhihu.com/question/24263552
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值