跟着红橙的视频学习热更新 需要使用到bspatch和bsdiff技术 本来打算在windows上搞的,无奈windows上各种编译错误 也没有提示。一怒之下下了个VMware 装了个虚拟机,结果从下载bsdiff到搞出效果不超过一个小时就搞完了。无怪乎那么多人喷Windows上开发那么不方便了,我在windows上可是尝试了十几个小时呢。。。。吐槽结束下面进入正题。

bspatch和bspatch简介

bspatch和bsdiff是一个基于C编写的第三方库文件,bsdiff可以对比A B两个文件的差异并生成一个patch,bspatch则可以将该patch与AB的其中一个文件合并 并形成新的A或者B,这个技术可以运用在热更新中 这样老用户只要下载一个patch包就可以得到新的apk 达到节省流量的目的

参考链接:
https://www.jianshu.com/p/33f75ace683c
https://blog.csdn.net/lmj623565791/article/details/52761658
第一步 下载bsdiff4.3 版本
官网链接:
http://www.daemonology.net/bsdiff/
但是我遇到问题You don’t have permission to access this resource.
我们可以从hongyang大神的博客中下载到他下载好的包
或者从这里下载:
https://src.fedoraproject.org/lookaside/pkgs/bsdiff/bsdiff-4.3.tar.gz/e6d812394f0e0ecc8d5df255aa1db22a/
或者从github下载
https://github.com/mendsley/bsdiff
不过从github下载的make文件是automake的格式的 我不是很了解如何编译
这里以
https://src.fedoraproject.org/lookaside/pkgs/bsdiff/bsdiff-4.3.tar.gz/e6d812394f0e0ecc8d5df255aa1db22a/
下载的资源为例
解压后如下

接着一步步解决编译错误

1.格式问题

hjcai@ubuntu:~/Desktop/bsdiff-4.3$ make
Makefile:13: *** missing separator.  Stop.


上面的第13行和第15行前面需要插入tab符 这是make的语法规则

2.依赖问题

hjcai@ubuntu:~/Desktop/bsdiff-4.3$ make
cc -O3 -lbz2    bsdiff.c   -o bsdiff
bsdiff.c:33:10: fatal error: bzlib.h: No such file or directory33 | #include <bzlib.h>|          ^~~~~~~~~
compilation terminated.
make: *** [<builtin>: bsdiff] Error 1
提示找不到 bzlib.h:
这里需要安装libbz2

执行
root@ubuntu:/home/hjcai/Desktop/bsdiff-4.3# sudo apt-get install libbz2-dev

3.编译问题

root@ubuntu:/home/hjcai/Desktop/bsdiff-4.3# make
cc -O3 -lbz2    bsdiff.c   -o bsdiff
/usr/bin/ld: /tmp/ccy6h0dp.o: in function `main':
bsdiff.c:(.text.startup+0x2be): undefined reference to `BZ2_bzWriteOpen'
/usr/bin/ld: bsdiff.c:(.text.startup+0x8d1): undefined reference to `BZ2_bzWrite'
/usr/bin/ld: bsdiff.c:(.text.startup+0x964): undefined reference to `BZ2_bzWrite'
/usr/bin/ld: bsdiff.c:(.text.startup+0xa0e): undefined reference to `BZ2_bzWrite'
/usr/bin/ld: bsdiff.c:(.text.startup+0xbbf): undefined reference to `BZ2_bzWriteClose'
/usr/bin/ld: bsdiff.c:(.text.startup+0xc15): undefined reference to `BZ2_bzWriteOpen'
/usr/bin/ld: bsdiff.c:(.text.startup+0xc3d): undefined reference to `BZ2_bzWrite'
/usr/bin/ld: bsdiff.c:(.text.startup+0xc60): undefined reference to `BZ2_bzWriteClose'
/usr/bin/ld: bsdiff.c:(.text.startup+0xcb3): undefined reference to `BZ2_bzWriteOpen'
/usr/bin/ld: bsdiff.c:(.text.startup+0xcdb): undefined reference to `BZ2_bzWrite'
/usr/bin/ld: bsdiff.c:(.text.startup+0xcfe): undefined reference to `BZ2_bzWriteClose'
collect2: error: ld returned 1 exit status
make: *** [<builtin>: bsdiff] Error 1

这里可能是编译器问题 修改Make文件

CFLAGS       +=    -O3 -lbz2PREFIX     ?= /usr/local
INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444all:        bsdiff bspatch
bsdiff:     bsdiff.ccc bsdiff.c ${CFLAGS} -o bsdiff  #增加
bspatch:    bspatch.ccc bspatch.c ${CFLAGS} -o bspatch #增加install:${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin.ifndef WITHOUT_MAN${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1.endif

这里要感谢
https://www.jianshu.com/p/33f75ace683c
的作者
再次编译 应该会生成两个文件bsdiff以及bspatch
到这里我们基本已经很接近成功了!
准备两个版本的apk 我这里准备的两个apk 一个text写的version1.0 一个text写的version2.0

最后可以安装new.apk 看看是否内容与2.0.apk内容一致
这一节只是学习bspatch bsdiff的使用 下一节学习在Android中使用这个工具

红橙Darren视频笔记 bsdiff bspatch 使用(Linux下)相关推荐

  1. 红橙Darren视频笔记 UML图简介

    整体架构复制自红橙原视频的课堂笔记 因为他这一课没有博客,所以没有转载链接,CSDN没有转载地址是无法作为转载类型的文章发表的,暂时标记为原创 参考链接 https://blog.csdn.net/r ...

  2. 红橙Darren视频笔记 代理模式 动态代理和静态代理

    红橙Darren视频笔记 代理模式 动态代理和静态代理(Android API 25) 关于代理模式我之前有过相关的介绍: https://blog.csdn.net/u011109881/artic ...

  3. 红橙Darren视频笔记 类加载机制(API28) 自己写个热修复 查看源码网站

    第一部分 类加载机制 一个Activity是如何被Android虚拟机找到的? 在之前的文章 红橙Darren视频笔记 自定义View总集篇(https://blog.csdn.net/u011109 ...

  4. 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复

    注意 由于AndFix在2017年左右就停止更新了,在最新版本的apk上遇到很多问题,我最终也没有成功进行热修复.本节主要是学习热修复的原理 在上一篇 红橙Darren视频笔记 自己捕获异常并保存到本 ...

  5. 红橙Darren视频笔记 Behavior的工作原理源码分析

    主要coordinatorlayout的代码来自coordinatorlayout-1.0.0-sources.jar 本文从源码介绍 CoordinatorLayout 的 behavior 怎么工 ...

  6. 红橙Darren视频笔记 仿QQ侧滑效果

    这一篇没有什么新的内容 就是改写 红橙Darren视频笔记 仿酷狗侧滑效果 的侧滑的效果 1.去掉淡入淡出效果 2.加上黑色模板效果 效果: 去掉淡入淡出效果很简单 就是注释掉onScrollChan ...

  7. 红橙Darren视频笔记 ViewGroup事件分发分析 基于API27

    本节目标,通过案例,先看程序运行结果,然后跟踪源码,理解为什么会有这样的输出,继而理解view group的分发机制,感觉和证明题很像呢. 考虑以下程序的运行结果: case1: public cla ...

  8. 红橙Darren视频笔记 热更新 bsdiff bspatch 在Android设备上的应用 架构篇1完结篇

    概述 当时红橙的视频讲解就差不多90分钟,但是真正自己做出来热更新的demo还是花了八九个晚上,期间遇到各种各样的问题,什么叫台上一分钟 台下十年功是深有体会了. 本节会涉及一部分NDK的知识 推荐阅 ...

  9. 红橙Darren视频笔记 view的绘制流程(上) onMeasure测量代码分析 基于API27

    一.准备工作Activity的onCreate和onResume调用过程 从ActivityThread的handleLaunchActivity开始进行代码跟踪 private void handl ...

最新文章

  1. hostapd中扫描的调用过程
  2. 【转】HTTP协议详解
  3. iOS 淘宝买 开发者证书 进行真机调试
  4. easyui-window窗口不遮挡_眼睛是心灵的窗口、佩戴舒适又时尚的米家防蓝光护目镜 Pro...
  5. 使用python的docker-py实现docker的api操作
  6. linux 的ip 设置lo_Linux服务器设置静态IP的方法
  7. php设置session 生命周期,设置session的生命周期(php)
  8. js 点击闭包_【新年跳槽必备】2020最新(前端原生JS专题)面试题 速领!
  9. Spring实现多数据源配置
  10. 开始gentoo之旅
  11. 知识、经验的漏洞还有很多很多
  12. moss 搜索 属性过滤 值被移除了
  13. 二维螺旋曲线方程式,弧长计算及作图实现
  14. fh 幅频特性曲线怎么画fl_数学老师用“函数曲线”绘出美图 学生舍不得擦黑板。唉,这样的老师我没有遇到!...
  15. Qt获取音频输入和输出设备
  16. C Primer Plus(第6版)第十章复习题答案
  17. Latex表格排版大全 基于 IEEE双栏论文(设置单元格行列间距,自动换行设置)
  18. 关于销售的成本和收入
  19. c++小游戏 走迷宫
  20. 开发随笔:transform: skew

热门文章

  1. dhclient常用命令
  2. 【第一章】MySQL数据概述
  3. 校外分散实习(14)
  4. IE11浏览器:请不要再叫我IE,谢谢
  5. 怎样练习一万小时(转)
  6. Excel与DataGridView的操作示例
  7. linux中如何自定义命令行,linux终端颜色和命令行自定义
  8. 资源放送丨《并行不悖——Oracle数据库并行的是是非非》PPT视频
  9. 如何使用SQL计算宝宝每次吃奶的时间间隔(文末含PPT)
  10. 事故现场:MySQL 中一个双引号的错位引发的血案