Android_增量更新(BSDiff)详解

Android 增量更新,是在应用市场中非常常见的一个功能,并且很多游戏等 App 也会采用增量更新的方式升级版本,可以说是常见而且成熟的一门技术。

什么是增量更新

增量更新是基于 BSDiff 这个差量更新算法,基于两个 apk 字节码的差异,在服务端生成 patch 包,然后客户端通过同样的算法,把已安装的 apk 与 patch 包结合生成更新后的apk进行安装,以此减小 app 版本升级时的下载时间,提高更新效率。

增量更新有什么好处?

对于当前市场上大部分app,apk 体积一般在 100M 左右,假设网速 4M/s,那么全量更新需要的时间就是半分钟。至于增量更新,所需要的patch包与新老版本 app 改变的范围有关,绝大部分时间都可以减小一半以上的下载体积。

bsdiff 算法的原理

既然 bsdiff 是差量更新,那么这个算法的核心就在于,找不同。

首先,bsdiff 会记录以前缀分组的各个字符串组的最后一个字符串在old中的开始位置,这样对old文件中所有子字符串形成一个字典

static void qsufsort(long *I, long *V, u_char *pold, long oldsize)
{
    long buckets[256];
    long i, h, len;

    for (i = 0;i < 256;i++) buckets[i] = 0;
    for (i = 0;i < oldsize;i++) buckets[pold[i]]++;
    for (i = 1;i < 256;i++) buckets[i] += buckets[i - 1];
    for (i = 255;i > 0;i--) buckets[i] = buckets[i - 1];
    buckets[0] = 0;

    for (i = 0;i < oldsize;i++) I[++buckets[pold[i]]] = i;
    I[0] = oldsize;
    for (i = 0;i < oldsize;i++) V[i] = buckets[pold[i]];
    V[oldsize] = 0;
    for (i = 1;i < 256;i++) if (buckets[i] == buckets[i - 1] + 1) I[buckets[i]] = -1;
    I[0] = -1;

    for (h = 1;I[0] != -(oldsize +
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值