google提供的Smart App update,即应用增量升级,或叫差分升级。
其原理比较简单,就是将应用的旧版本与新版本做差分,得到更新的部分的补丁。用户在下载完差分包之后,需要在手机端将他们组合起来。可参考的做法是先将手机端的就版本软件,复制到SD卡或cache中,将它们和之前的差分patch进行组合,得到一个新版本的apk应用,如果不出意外,这个生成的apk和之前做差分的apk是一致的。

增量升级的操作
差分包patch的生成。可以借鉴OTA系统升级的差分生成OTA系统差分包的制作,使用命令:
./build/tools/releasetools/ota_from_target_files -n -i <旧包> <新包> <差分包名>
在ota_from_target_files中,可以知道最后做差分的工具: bsdiff
到此,就知道android提供的制作差分增量升级包的工具:bsdiff,其源码位于:\external\bsdiff
bsdiff是二进制差分工具,其对应的bspatch是相应的补丁合成工具。
注意增量升级的补丁包,是需要在服务器即PC端完成的,大致流程如下:
bsdiff oldfile newfile patchfile
eg: bsdiff xx_v1.apk xx_v2.apk xx.patch
将生成的补丁包xx.patch放到升级服务器上,供用户下载升级,对应多版本需要对不同版本进行差分。
用户在下载了xx.patch补丁包后,需要与系统安装的就应用和补丁合成的bspatch工具。就版本的apk可以通过copy系统data/app目录下的apk文件获取,而补丁合成的bspatch可以通过将bspatch源码稍作修改,封装成用户一个so哭,供手机端调用。
bapatch命令格式: bspatch oldfile newfile patchfile
和差分时的参数一样。合成新的apk便可以用于安装。
不足:
1.增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。   
2.增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk进行sha1sum校验,保证基础包的一致性。