初入开发不久,不知道能否实现Android应用程序的增量更新?求大神前来围观,,
随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,我查了一下,增量升级的原理就是将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,可是具体的步骤要怎么进行操作?
初入开发不久,不知道能否实现Android应用程序的增量更新?求大神前来围观,,
随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,我查了一下,增量升级的原理就是将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,可是具体的步骤要怎么进行操作?
7 回答5.3k 阅读
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答860 阅读
做过android手机OTA升级的同学应该注意到,在update.zip中的patch文件夹中有需要与系统文件同名但是以xxx.p 为后缀的文件,他们就是生成的差分patch文件。我们可以借鉴OTA系统升级的差分生成工具来生成我们单个应用apk的差分patch文件。
OTA系统差分包的制作,使用命令:
在查阅ota_from_target_files 的代码可知,是在函数WriteIncrementalOTAPackage里生成差分包的,在这个函数里边创建了common.Difference这个类,我们继续跟进,在common.py中的类 class Difference(object):里可以看到:
至此我们就看到了android中提供我们用来制作差分增量升级包的工具,"bsdiff",这是一个很牛X开源的二进制差分工具
bsdiff是二进制差分工具,其对应的bspatch是相应的补丁合成工具
需要注意的是增量升级的补丁包,是需要在服务器端,即PC端完成,大致流程如,制作补丁时调用bsdiff函数,根据两个不同版本的二进制文件,生成补丁文件。
将生成的补丁包 xx.patch放置在升级服务器上,供用户下载升级,对应多版本需要对不同的版本进行差分,对于版本跨度较大的,建议整包升级。
用户在下载了 xx.patch补丁包后,需要用到补丁所对应的apk,即原来系统安装的旧版本apk和补丁合成的bspatch工具。系统旧版本的apk可以通过copy系统data/app目录下的apk文件获取,而补丁合成的bspatch可以通过将bspatch源码稍作修改,封装成一个so库,供手机端调用。
和差分时的参数一样。合成新的apk便可以用于安装。
以上只是简单的操作原理,增量升级还涉及很多其他方面,例如,升级补丁校验等问题,可以参考android源码中bootable\recovery\applypatch的相关操作