Android_增量更新(BSDiff)详解

本文详细介绍了Android增量更新技术,特别是基于BSDiff算法的实现原理和步骤。通过对比全量更新,阐述增量更新在节省下载时间和提高更新效率方面的优势。文中还通过实例演示了如何使用BSDiff生成patch包,并讨论了增量更新在实际业务中的应用及其注意事项。
部署运行你感兴趣的模型镜像

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 + 1);h += h) {
        len = 0;
        for (i = 0;i < oldsize + 1;) {
            if (I[i] < 0) 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值