HardBirch

Android APP应用市场 APK增量更新技术方案阐述

时间:14-05-14 栏目:Android探究 作者:魔豆先生 评论:4 点击: 8,541 次

1.下载方式:
APP应用市场中的应用划分两类:普通应用(以下简称普通)和动态打包应用(以下简称动态,在下载的时候,将channnelId与storeId动态的打入apk包内)
普通全量下载:普通应用以全量的形式进行下载,就是我们常见的整个APK的形式下载。
普通增量下载:普通应用以增量的形式进行下载,增量包是对旧版本APK与新版本APK进行diff生成。
动态全量下载:动态打包应用以全量的形式进行下载,全量包实际上还是会拆分成固定部分和动态部分,进行分别下载;
动态增量下载:动态打包应用以增量的形式进行下载,增量是指对固定部分进行diff出来的部分,动态部分直接下载;

关于固定部分和动态部分的说明:
(1)apk包实际上是属于zip格式,zip文件包含三个部分,数据区+目录区+end (loc + cen + end)
(2)当增加channnelId和storeId的时候,数据区会增加,目录区会增加,end部分会重新生成,结构变成,loc+loc_dyn + cen+cen_dyn + end
由于loc和cen保持原样,loc_dyn,cen_dyn和end都是动态生成的,所以固定部分是指loc+cen,动态部分是指 loc_dyn + cen_dyn + end部分

 

2.为什么需要动态增量
看到这里你肯定会问,要这么复杂干嘛,动态打包的应用,新旧版本直接diff,下发patch给客户端,然后patch上去不就OK了么,为何要这么复杂呢?
复杂还是为了简单。实际上动态打包,随着channnelId和storeId越来越多,服务端维护的版本版本差异会非常惊人,为了节省这个存储和计算资源。
把动态打包的公共部分(固定部分)提取提取出来diff,就足够了。

3.增量更新的大前提
是不是所有的应用都有必要增量更新?不是的,某些应用全量下载的大小就不大,生成的patch文件比全量文件还要大,这个时候显然是不适合的。

4.全量与增量下载的判断依据:
-------------------------------------------------------------------------------
1.普通全量下载
(1)普通应用第一次从冒泡市场下载的,则采用普通全量的形式下载;
(2)普通应用上一次从第三方市场下载(或者用户自行拷贝安装)的,则采用普通全量的形式下载;

2.普通增量下载
(1)普通应用后续升级,如果上一次下载是从冒泡市场下载的,则采用 普通增量形式下载;

3.动态全量下载
(1)动态打包应用第一次从冒泡市场下载的,则采用动态全量的形式下载;
(2)动态打包应用上一次从第三方市场下载(或者用户自行拷贝安装)的,则采用动态全量的形式下载;

4.动态增量更新
(1)动态打包应用后续升级,如果上一次下载是从冒泡市场下载的,则采用动态量形式下载;
--------------------------------------------------------------------------------

5.客户端生成完整APK包

(1)普通增量patch:
客户端下载到新旧版本的patch文件,直接对旧版本进行patch,生成新版本APK即可。

(2)动态全量Merge:
客户端下载到loc, cen, loc_dyn, cen_dyn+end 四部分merge成loc+loc_dyn+cen+cen_dyn+end这样的形式(随机文件读写)。

(3)动态增量Merge:
客户端下载到loc+cen的patch文件,先进行patch,再进行文件Merge:

先计算新版本的 固定部分(loc+cen),
再进行动态全量的Merge动作。

6.下载过程交互逻辑
增量更新-终端流程

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Android APP应用市场 APK增量更新技术方案阐述

Android APP应用市场 APK增量更新技术方案阐述:目前有4 条留言

  1. 4楼
    lanzx:

    :?: 请教魔豆先生动态增量的思路,怎么从差分文件path分离出固定部分和动态的部分?

    2014-09-15 14:27 [回复]
  2. 地板
    llllll:

    希望得到魔豆先生的赐教,谢谢

    2014-09-15 14:30 [回复]
  3. 板凳
    llllll:

    :?: 请教魔豆先生动态增量的思路,怎么从差分文件path分离出固定部分和动态的部分?希望得到魔豆先生的赐教,谢谢

    2014-09-15 14:30 [回复]
  4. 沙发
    llll0:

    请教魔豆先生动态增量的思路,怎么从差分文件path分离出固定部分和动态的部分?希望得到魔豆先生的赐教,谢谢

    2014-09-15 14:31 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐