Android App应用包增量升级(one)

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.gz
cd bsdiff-4.3

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

[root@kinggoo.com bsdiff-4.3]# cat 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

开始编译安装bsdiff和bspatch

[root@kinggoo.com bsdiff-4.3]# make
[root@kinggoo.com bsdiff-4.3]# ls
bsdiff  bsdiff.1  bsdiff.c  bspatch  bspatch.1  bspatch.c  Makefile

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

[root@kinggoo.com bsdiff-4.3]# ls -l
总计 11260
-rwxr-xr-x 1 root root   14102 05-28 14:25 bsdiff
-rw-r--r-- 1 1001 1002    2226 2005-08-17 bsdiff.1
-rw-r--r-- 1 1001 1002   10107 2005-08-17 bsdiff.c
-rwxr-xr-x 1 root root   11463 05-28 14:25 bspatch
-rw-r--r-- 1 1001 1002    2038 2005-08-17 bspatch.1
-rw-r--r-- 1 1001 1002    5996 2005-08-17 bspatch.c
-rw-r--r-- 1 1001 1002     324 05-28 14:25 Makefile
-rwxr-xr-x 1 root root 3805331 05-28 14:53 v1.0.apk
-rwxr-xr-x 1 root root 3740504 05-28 14:53 v1.1.apk

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

[root@kinggoo.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,将其增量部分与上一版本包合成

[root@kinggoo.com bsdiff-4.3]# ./bspatch v1.0.apk v1.1_diff_patch.apk ./diff.patch 

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

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

sha1效验

[root@kinggoo.com bsdiff-4.3]# sha1sum  v1.1_diff_patch.apk 
94fe99bc40bab8908bccce70aa6a68c5a4fd11b1  v1.1_diff_patch.apk
[root@kinggoo.com bsdiff-4.3]# sha1sum  v1.1.apk 
94fe99bc40bab8908bccce70aa6a68c5a4fd11b1  v1.1.apk

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

参考资料:

http://blog.csdn.net/hmg25

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

- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/bsdiffupdate.htm
发表评论?

6 条评论。

  1. 下步是生成给android应用内调用的.so包,下篇文章会介绍

    求更新

  2. 文章很好,期待有更好的作品.最近天气真热,烦躁!

  3. 博主辛苦,谢谢分享!有空来坐坐!

  4. 喜欢这个网站,感谢分享!欢迎回访!哈哈!

  5. 谢谢分享,网站不错!也欢迎您来访!

发表评论