初入开发不久,不知道能否实现Android应用程序的增量更新?

初入开发不久,不知道能否实现Android应用程序的增量更新?求大神前来围观,,
随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,我查了一下,增量升级的原理就是将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,可是具体的步骤要怎么进行操作?

阅读 3.9k
1 个回答

做过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的相关操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题