Google I/O 2012大会上Google预览了Jelly Bean 4.1系统的一些新功能,由于是x.1的版本号,所以改进不是很大,但是还是有一些给力的内容,其中的一条就是Smart app updates,也就是增量升级,你可以只下载应用升级的数据,而不必下载整个应用了。在2012年9月29号,腾讯的应用宝也退出了增量更新功能,举个例子来说,比如你现在要更新微信,旧版有10M,新版有14M,那么你不需要下载完整的14M文件,只需要下载更新部分就可以,而更新部分可能只有5、6M(不是14减10)。腾讯发来一份他们对增量升级的研究报告:
现在就能大概知道增量升级的原理了:服务器端比较差异生成patch,用户下载的是patch文件,手机上的商店程序需要把data/app下面的相应apk拷贝到sd卡上然后与patch合成,最后生成新的apk。
网上搜索到大神写的一篇博客,大家可以参考:http://blog.csdn.net/hmg25/article/details/8100896。
这里借用一个小实验,实验材料请大家去http://download.csdn.net/detail/hmg25/4676737下载。我这里把实验步骤演示一下(在win7下)。
首先模拟服务器端的生成patch的过程:
bsdiff.exe ..\iReader1.6.2.0(v35).apk ..\iReader1.8.0.1(v40).apk ..\iReader.patch然后是手机上的组装过程:
bspatch.exe ..\iReader1.6.2.0(v35).apk ..\new.apk ..\iReader.patch最后散列,比较一下iReader1.8.0.1(v40).apk和new.apk文件:
文件名称:test\iReader1.8.0.1(v40).apk
文件大小:3400660 字节
修改时间:2012年10月22日 23:48:38
MD5 :4DBCE86AAE8987A8B115670D1AC2364D
SHA1 :DE249C9C3A961F8A5FF86073BA4EDEFE4627F1B1
CRC32 :285E9531
文件名称:test\new.apk
文件大小:3400660 字节
修改时间:2012年11月22日 14:53:08
MD5 :4DBCE86AAE8987A8B115670D1AC2364D
SHA1 :DE249C9C3A961F8A5FF86073BA4EDEFE4627F1B1
CRC32 :285E9531
可以看出散列值是一样的,说明生成的新的apk是OK的。
这里面涉及的知识还是比较多的,比如服务器端使用脚本语言编写自动化脚本比较差异,手机上需要使用JNI去调用bspatch的功能,嗯,我还得加油,早日做出个原型来。今天就到这里。