编译和使用bsdiff
在android开发中,越到后面生成apk文件越来越大,每次用户更新都是全部下载更新,浪费时间和流量,如果能增量更新就不错了,使用bsdiff就是为了生成更新包
bsdiff下载地址:http://www.daemonology.net/bsdiff/
下载后解压文件,到文件目录中,执行make
你会发现不能通过,报错了
Makefile:13: *** missing separator. Stop.
这是makefile文件的内容的格式不对,
CFLAGS += -O3 -lbz2 PREFIX ?= /usr/local
INSTALL_PROGRAM ?= ${INSTALL} -c -s -m 555
INSTALL_MAN ?= ${INSTALL} -c -m 444 all: bsdiff bspatch
bsdiff: bsdiff.c
bspatch: bspatch.c install:
${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin
.ifndef WITHOUT_MAN
${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1
.endif
13行开始到最后前面加TAB,为什么要这样请自行查阅makefile的规则了
保存后再make
还是有问题,不过bsdiff正常生成了
bspatch.c:39:21: error: unknown type name 'u_char'; did you mean 'char'?
static off_t offtin(u_char *buf)
^~~~~~
char
bspatch.c:65:8: error: expected ';' after expression
u_char header[32],buf[8];
^
;
bspatch.c:65:2: error: use of undeclared identifier 'u_char'; did you mean
'putchar'?
u_char header[32],buf[8];
^~~~~~
putchar
/usr/include/stdio.h:261:6: note: 'putchar' declared here
int putchar(int);
^
bspatch.c:65:9: error: use of undeclared identifier 'header'
u_char header[32],buf[8];
^
bspatch.c:65:20: error: use of undeclared identifier 'buf'
u_char header[32],buf[8];
^
bspatch.c:66:2: error: use of undeclared identifier 'u_char'; did you mean
'putchar'?
u_char *old, *new;
^~~~~~
putchar
/usr/include/stdio.h:261:6: note: 'putchar' declared here
int putchar(int);
^
bspatch.c:66:10: error: use of undeclared identifier 'old'
u_char *old, *new;
^
bspatch.c:66:16: error: use of undeclared identifier 'new'
u_char *old, *new;
^
bspatch.c:93:12: error: use of undeclared identifier 'header'
if (fread(header, 1, 32, f) < 32) {
^
bspatch.c:100:13: error: use of undeclared identifier 'header'
if (memcmp(header, "BSDIFF40", 8) != 0)
^
bspatch.c:104:19: error: use of undeclared identifier 'header'
bzctrllen=offtin(header+8);
^
bspatch.c:105:19: error: use of undeclared identifier 'header'
bzdatalen=offtin(header+16);
^
bspatch.c:106:17: error: use of undeclared identifier 'header'
newsize=offtin(header+24);
^
bspatch.c:137:5: error: use of undeclared identifier 'old'
((old=malloc(oldsize+1))==NULL) ||
^
bspatch.c:139:12: error: use of undeclared identifier 'old'
(read(fd,old,oldsize)!=oldsize) ||
^
bspatch.c:141:6: error: use of undeclared identifier 'new'
if((new=malloc(newsize+1))==NULL) err(1,NULL);
^
bspatch.c:147:43: error: use of undeclared identifier 'buf'
lenread = BZ2_bzRead(&cbz2err, cpfbz2, buf, 8);
^
bspatch.c:151:19: error: use of undeclared identifier 'buf'
ctrl[i]=offtin(buf);
^
bspatch.c:159:42: error: use of undeclared identifier 'new'
lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]);
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [bspatch] Error 1
错误很明显,找不到u_char等,因为缺少了头文件
在文件中加入
#include <sys/types.h>
一般这个文件会放到/usr/include/sys/types.h,可以自行查看源码,很简单
再次make就好了
bsdiff使用很简单
bsdiff oldfile newfile patchfile
oldfile:旧的文件
newfile:生成的新文件
patchfile:生成的patch文件
编译和使用bsdiff的更多相关文章
- android黑科技系列——应用市场省流量更新(增量升级)原理解析
一.前言 最近在看热修复相关的框架,之前我们已经看过了阿里的Dexposed和AndFix这两个框架了,不了解的同学可以点击这里进行查看:Dexposed框架原理解析 和 AndFix热修复框架原理解 ...
- bsdiff的编译与使用
bsdiff是一个差异包比较工具,可以用来实现增量更新. 下载地址:http://www.daemonology.net/bsdiff 编译 Mac环境 版本:macOS 10.12 1.解压下载的b ...
- android源码编译1
一.环境说明: 1.liunx系统:Ubuntu12.04 2.jdk:sun-java6-jdk 3.g++4.5 gcc4.5 二.android源码的目录结构 |-- Makefile |-- ...
- 下载编译Chrome详细步骤
文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.org/developers/ho ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- bsdiff差分算法
bsdiff的基本原理 bsdiff是由Conlin Percival开源的一个优秀的差分算法,而且是跨平台的.在Android系统中所使用的imgdiff本质上就是bsdiff. bsdiff的依据 ...
- Android OTA在线升级二(升级包编译原理分析) 【转】
本文转载自:http://blog.csdn.net/huryjiang/article/details/7590015 1 升级包的制作 基本命令: Ø makeMtk [project[flav ...
- I.MX6 Android 5.1.1 下载、编译
/************************************************************************* * I.MX6 Android 5.1.1 下载. ...
- 编译Chrome详细步骤
编译Chrome详细步骤 文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.or ...
随机推荐
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
- 使用 IntelliJ IDEA 开发一般 Java 应用程序时配置 Allatori 进行代码混淆
使用 IntelliJ IDEA 开发一般 Java 应用程序时通过 Allatori 进行代码混淆非常容易配置,下面总结一下本人经验,介绍一下配置方法. 首先在 IDEA 的 Module 所在硬盘 ...
- Unity3d Inspector面板实现set/get访问器
简单说一下属性和字段的区别:字段就是成员变量,而属性确实提供给外部访问内部成员变量的接口.之所以会有属性的出现,就是为了避免外部对类的成员的直接访问,通俗的说就是OOP中的封装思想. using Un ...
- SQL盲注工具BBQSQL
SQL盲注工具BBQSQL SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具 ...
- python pip包管理器安装
下载 http://peak.telecommunity.com/dist/ez_setup.py 执行:python ez_setup.py 下载: http://pypi.python.or ...
- SQL SERVER 工具
http://www.cnblogs.com/fygh/archive/2012/04/25/2469563.html
- Android -- native关键字
native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口 ...
- 转:在CentOS下编译安装GCC
转:https://teddysun.com/432.html 在CentOS下编译安装GCC 技术 秋水逸冰 发布于: 2015-09-02 更新于: 2015-09-02 6519 次围观 ...
- Git以及github的使用方法(六),管理修改
现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...
- ubuntu 16.04 更新 gcc/g++ 4.9.2
ubuntu 转载 2016年10月12日 :: 标签:ubuntu /g++ /gcc [html] view plain copy sudo dpkg -l g++ 最近在学C++primer , ...