http://kinggoo.com/bsdiffupdate.htm

Android增量升级这东西很不错,当时我们这运营的人把百度的一个管理软件拿过来说他们这个升级包提示可以节省流量是怎么回事,当时各种猜测,难道是有什么特殊算法将包压缩了?特意试了一下压缩,根本大小就没变化~后来开发的人找到是增量升级,文章抛给我研究下。拿过来后发现如果单纯的用命令处理真的很简单,当时想法也是很简单,就是让开发把bspatch这个命令内嵌到Apk包里,反正它不大,但后来我在Android模拟器里试了一下,发现根本不行,在继续看参考的那篇文章,发现下面还有,c++这部分要弄成so包,然后在通过javah 去生成一个中间的class才能执行bspatch(另一个开发研究的,在参考的那篇文章里也有这个处理方法)
bsdiff网站http://www.daemonology.net/bsdiff/
下载bsdiff百度网盘
windows:
http://sites.inka.de/tesla/download/bsdiff4.3-win32.zip (32bit)
http://sites.inka.de/tesla/download/bsdiff4.3-win32-src.zip (32bit)
linux:
http://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz

执行

tar -zxvf bsdiff-4.3.tar.gzcd bsdiff-4.3

编辑Makefile,因为编译器的问题多数编译会出问题(Makefile:13: *** 遗漏分隔符 。 停止。)
原因是:目标体下一行的,命令要用TAB键开头,且不能隔一行。
也就是说在.ifndef的前面要有TAB开头才可以~因为他是安装的下一个子集命令。
修改文件为:

[[email protected].com bsdiff-4.3]# cat Makefile CFLAGS          +=-O3 -lbz2PREFIX          ?=/usr/localINSTALL_PROGRAM ?=      ${INSTALL}-c -s -m 555INSTALL_MAN     ?=      ${INSTALL}-c -m 444all:            bsdiff bspatchbsdiff:         bsdiff.cbspatch:        bspatch.cinstall:        ${INSTALL_PROGRAM} bsdiff bspatch ${PREFIX}/bin        .ifndef WITHOUT_MAN        ${INSTALL_MAN} bsdiff.1 bspatch.1 ${PREFIX}/man/man1        .endif

开始编译安装bsdiff和bspatch

[[email protected].com bsdiff-4.3]# make[[email protected].com bsdiff-4.3]# lsbsdiff  bsdiff.1  bsdiff.c  bspatch  bspatch.1  bspatch.c  Makefile

好了,我们要得到的两个文件bsdiff、bspatch都有了
由于测试一下,所以我就直接传到这台机器上两个apk文件,名为v1.1.apk、v1.0.apk
先来看下当前文件夹内文件信息(因为是测试,所以是直接在bsdiff源码目录下直接操作的)
注意一下,那两个apk文件的大小

[[email protected].com bsdiff-4.3]# ls -l总计11260-rwxr-xr-x 1 root root   1410205-2814:25 bsdiff-rw-r--r--11001100222262005-08-17 bsdiff.1-rw-r--r--110011002101072005-08-17 bsdiff.c-rwxr-xr-x 1 root root   1146305-2814:25 bspatch-rw-r--r--11001100220382005-08-17 bspatch.1-rw-r--r--11001100259962005-08-17 bspatch.c-rw-r--r--11001100232405-2814:25Makefile-rwxr-xr-x 1 root root 380533105-2814:53 v1.0.apk-rwxr-xr-x 1 root root 374050405-2814:53 v1.1.apk

v1.0.apk大小3805331(3.8M)
v1.1.apk大小3740504(3.7M)
由于1.1有版本优化,所以反而小了。不用管他,执行如下操作:

[[email protected].com bsdiff-4.3]#./bsdiff v1.0.apk   v1.1.apk diff.patch

格式: bsdiff 上一版本apk包 本版本 对比增量差异部分
通过ls -l查看发现多出 diff.patch文件,大小为1842353(1.8M),用户也就只需要下载这1.8M大小的增量包即可
在使用bspatch,将其增量部分与上一版本包合成

[[email protected].com bsdiff-4.3]#./bspatch v1.0.apk v1.1_diff_patch.apk ./diff.patch 

对合成升级版本的apk包及最新版本apk包进行MD5、SHA1效验
md5效验

[[email protected].com bsdiff-4.3]# md5sum  v1.1_diff_patch.apk  #合成包a7d9af832a5e546e3fdce2d1b29c930e  v1.1_diff_patch.apk[[email protected].com bsdiff-4.3]# md5sum v1.1.apk#原始升级包a7d9af832a5e546e3fdce2d1b29c930e  v1.1.apk

sha1效验

[[email protected].com bsdiff-4.3]# sha1sum  v1.1_diff_patch.apk 94fe99bc40bab8908bccce70aa6a68c5a4fd11b1  v1.1_diff_patch.apk[[email protected].com bsdiff-4.3]# sha1sum  v1.1.apk94fe99bc40bab8908bccce70aa6a68c5a4fd11b1  v1.1.apk

以上均无问题
最后将合成包安装到2.3.3系统上是没有任何问题!
下步是生成给android应用内调用的.so包,下篇文章会介绍,暂时没时间。

参考资料:

http://blog.csdn.net/hmg25

在这个人写的文章里,看到说有Courgette,更牛,到官网上看发现能达到几倍的压缩率 (http://www.oschina.net/code/explore/chromium.r67069/courgette 这里应该是开源出来的代码吧)

版权声明:

转载原创文章请注明,文章出处: http://kinggoo.com
原文地址: http://kinggoo.com/bsdiffupdate.htm

更多相关文章

  1. android中 spannable的使用【转】
  2. [Android][工具类]FileUtils
  3. Android(安卓)获取存储空间
  4. Android(安卓)package名要区分大小写
  5. android 卸载程序、清除数据、停止服务用法
  6. 内容为引用别人的文章,备自己学习之用.
  7. android动态修改drawable颜色及大小
  8. androidpn No response from server
  9. Android中View的绘制流程详解

随机推荐

  1. SQL Server 跨库同步数据
  2. SQL Server中的RAND函数的介绍和区间随机
  3. 浅析SQL Server中的执行计划缓存(下)
  4. 浅析SQL Server中的执行计划缓存(上)
  5. sqlserver锁表、解锁、查看销表的方法
  6. SQLServer存储过程中事务的使用方法
  7. SqlLoader怎么使用
  8. SQL LOADER错误小结
  9. SQL Server中Check约束的学习教程
  10. 详解SQL中drop、delete和truncate的异同