Liunx服务器增量更新BSDiff实操记录

  • 作者:彭老师
  • 日期:2019-11-28
  • 类型:Android
  • 说明:本文源于彭老师手写摘要,如需转载请带上链接或注明出处!

BSDiff(增量更新),官网:http://www.daemonology.net/bsdiff/

依赖bzip2库:https://nchc.dl.sourceforge.net/project/gnuwin32/bzip2/1.0.5/bzip2-1.0.5-src.zip

  • 核心思想
  • 尽可能多的利用old文件中已有的内容,尽可能少的加入新的内容来构建new文件
  • 通常的做法是对old文件和new文件做子字符串匹配或使用hash技术
  • 提取公共部分,将new文件中剩余的部分打包成patch包
  • 在Patch阶段中,用copying和insertion两个基本操作即可将old文件和patch包合成new文件
  • BSDiff基本步骤
  • 1.对old文件中所有字符串形成一个字典
  • 2.对比old文件和new文件,产生diff string和extra string
  • 3.将diff string和extra string以及相应的控制用zip压缩成一个patch包

观察一个应用是否使用过增量更新,最简单粗暴的方式:
把apk解压,打开lib包,看看有没有libbspatch.so文件


环境和工具,老鸟带过

  • 服务器:CenterOS6.5+
  • 连接工具:Xshell 5(百度一堆)

废话不多说,直接上服务器命令,演示如果在Liunx环境做差分包


1、BSDiff官网下载:bsdiff-4.3.tar.gz

或者点击此处下载:http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz

2、登录服务器后,删除和创建命令

rm -rf bsdiff/  (删库到跑路)
mkdir bsdiff/ (创建文件夹:bsdiff)

3、创建文件夹后进入文件夹

cd bsdiff

4、上传 bsdiff-4.3.tar.gz

rz
  • 可能会碰到问题:服务器没有 rz 环境

    wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz(下载)
    tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20(解压)
    ./configure && make && make install(安装)
    cd /usr/bin(进入目录)
    ln -s /usr/local/bin/lrz rz(创建软链接)
    ln -s /usr/local/bin/lsz sz(创建软链接)
  • 再次执行 rz 命令上传 bsdiff-4.3.tar.gz 到服务器指定目录

5、查看文件夹内容命令

ls  (列表)
ll (列表 + 详情)

6、解压 bsdiff-4.3.tar.gz

tar xvf bsdiff-4.3.tar.gz

7、进入 bsdiff-4.3 解压后的目录中,执行编译

make
  • 可能会碰到问题:服务器 gcc 环境

    Makefile:13: *** missing separator.  Stop.
  • 编辑 Makefile 文件

    vim Makefile(进入编辑)
    insert(只读切换成编辑)
    esc(退出编辑)
    :(进入命令行输入)
    wq(保存退出)
  • 如果出现 vim 无法识别,说明服务器真的很丐版:

    vim: command not found
  • 执行 vim 安装命令:

    rpm -qa | grep vim(查看vim命令在什么软件包)
  • 结果显示:

    vim-minimal-7.4.160-4.el7.x86_64(版本可能不同)
  • 安装 vim 相关的软件包

    yum install -y vim*
    rpm -qa | grep vim

2、
  • 再次执行 make 命令编译

  • 可能会碰到问题:服务器 bzip2 环境

    yum -y install bzip2-devel.x86_64(在线安装)
  • 再次执行 make 命令编译

8、直至通过,查看列表 ls 看到如下:

9、查看文件属性

file bsdiff

10、帮助信息

./bsdiff
  • 最终差分包命令:

    ./bsdiff oldfile newfile patchfile
  • 其中 oldfile 比如:old.apk

  • newfile 比如:app-release.apk

  • patchfile 差分包,可自定义

安卓端的代码操作,有公开课演示,这里就不做累赘了