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.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 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有版本优化,所以反而小了。不用管他,执行如下操作:
[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.apk94fe99bc40bab8908bccce70aa6a68c5a4fd11b1 v1.1.apk
以上均无问题
最后将合成包安装到2.3.3系统上是没有任何问题!
下步是生成给android应用内调用的.so包,下篇文章会介绍,暂时没时间。
参考资料:
http://blog.csdn.net/hmg25
在这个人写的文章里,看到说有Courgette,更牛,到官网上看发现能达到几倍的压缩率 (http://www.oschina.net/code/explore/chromium.r67069/courgette 这里应该是开源出来的代码吧)
相关推荐
Android APP增量升级的实现方式
Android APP应用的自动升级更新,可以在本地或连接HTTP进行自动检测,提示是否升级,自动安装。
Android APP增量升级的实现方式文档 有兴趣的同学可以在下载下来看看,
网上找的可用,实现原理参考http://blog.csdn.net/hmg25/article/details/8100896
Android app 增量更新 参考https://github.com/cundong/SmartAppUpdates 该app未提供服务端代码(服务端代码的增量更新实现可参考diff.c和patch.c,原理和客户端一致) ScreenShoots Gradle compile '...
ReadMe:需要有生成差分patch的文件,与旧apk进行合并。生成差分包的patch方法可以如下列出的"参考文档"。Install bsdiff for Ubuntu:... 下载地址: ... 参考文档: ...
抓包工具 android APP抓包 fiddlersetup+HTTPAnalyzer v7+注册码
android app内部更新,版本升级,自动下载安装,可以直接集成至项目并应用
android简单实例,通过已知应用的包名打开该应用程序。
这个demo实现了android开发应用内下载安装apk升级版本的功能,非常简便轻量集成,完全原生代码即可实现,无需第三方框架。。。
使用Android Studio 4.1.1 开发的 自带升级功能的APP。本APP已经实现了支持Android5~11的适配,可以完美运行在Android5~11上。另外,本APP实现了在APP上通过RestAPI访问远程数据库功能,可以给初学者作为参考样例。
图文详解,Android App应用安全加固详细步骤
Android不同版本的升级,对APP应用来说是不可缺少的一部分,本程序介绍基于Android应用程序的升级Demo,可供大家学习借鉴,不足之处请原谅
android仿微信app应用,android仿微信app应用,android仿微信app应用,android仿微信app应用,android仿微信app应用,
随着APP的越来越大,增量升级已是必不可少的方法,根据新旧版本的APP,在PC上用diff工具生成差分包, 然后把差分包放到设备上或是从服务器下载到本地,并在本地使用差分包与已安装apk,合成新版apk。通过计算MD5值,...
Android应用源码安卓应用市场app商店源码.zip
在应用内升级主要是通过调用服务器端接口获取应用的升级信息,然后通过获取的服务器升级应用信息与本地的 App 版本比对,若服务器下发的最新的 App 版本高于本地的版本号,则说明有新版本发布,那么我们就可以执行...
网上找了一堆Delphi安卓APP程序自动升级方法都大多不太好用,有的需要配置WEB服务器,有的控制下载和升级管理麻烦,于是综合网上资料,根据项目需要整理了一个代码单元,可以直接调用,测试环境Delphi XE 10.3
应用市场 android 客户端代码分享 保护滑动加载,应用下载,断点续传,应用升级等
Android app缓存清理,封装了一个获取和清理缓存的工具类,可以直接使用,简化了开发的麻烦。