安装包合成方法、装置、终端及存储介质与流程

文档序号:17547947发布日期:2019-04-30 17:58阅读:358来源:国知局
安装包合成方法、装置、终端及存储介质与流程

本申请涉及应用升级技术领域,尤其涉及一种安装包合成方法、装置、终端及存储介质。



背景技术:

在终端中的应用存在版本更新时,终端需要从服务器端下载补丁包,以对终端中的应用进行版本升级。而为了降低终端下载补丁包所需耗费的流量,服务器端一般会采用增量更新方式生成应用升级所需的补丁包。

其中,增量更新的原理是对应用的新版本安装包与旧版本安装包做差分,以找出新版本安装包与旧版本安装包中不一样的内容生成差分包,该差分包就是应用更新所需的补丁包。相应的,在服务器端采用增量更新的方式生成差分包的情况下,终端在对应用更新时,只需要从服务器下载该差分包,并利用差分包与该终端中该应用的旧版本安装包进行合成,就可以形成该应用的新版本安装包。相对于应用的新版本安装包,该差分包所包含的数据量较小,有利于减少终端对应用进行升级所需耗费的网络流量。

然而,由于在终端从服务器端下载了应用的差分包之后,终端还需要将该差分包与该终端中该应用的旧版本安装包进行合成,而合成过程的耗时较长,导致终端中应用升级所需的耗时过长。



技术实现要素:

有鉴于此,本申请提供了一种安装包合成方法、装置、终端及存储介质,以减少等待合成应用的新版本安装包所需的时长,从而降低终端中应用升级所需耗费的时长。

为实现上述目的,一方面,本申请提供了一种安装包合成方法,包括:

当检测到应用升级请求时,确定终端中待升级的目标应用的当前版本以及所述目标应用待升级到的目标版本;

从终端中获取所述目标应用的当前版本的当前版本安装包;

从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

在下载所述目标差分包的过程中,当从所述目标差分包中下载到至少一个第一文件标识时,对所述当前版本安装包中所述至少一个第一文件标识表征的至少一个第一目标文件进行解压缩,所述第一文件标识表征当前版本安装包中需要参与合成计算的第一目标文件的标识;

当从所述目标差分包中下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及所述差异文件,合成至少一个合成文件,所述合成文件为对所述目标版本的安装包中需要参与差分计算的第二目标文件进行解压缩得到的,所述差异文件为通过对所述至少一个合成文件与所述经过解压缩的至少一个第一目标文件进行差分计算得到的;

压缩所述至少一个合成文件,并将所述压缩后的至少一个合成文件合成到待合成的目标版本安装包中。

另一方面,本申请提供了一种安装包合成装置,包括:

版本确定单元,用于当检测到应用升级请求时,确定终端中待升级的目标应用的当前版本以及所述目标应用待升级到的目标版本;

旧版本获取单元,用于从终端中获取所述目标应用的当前版本的当前版本安装包;

差分包下载单元,用于从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

解压缩单元,用于在所述差分包下载单元下载所述目标差分包的过程中,当从所述目标差分包中下载到至少一个第一文件标识时,对所述当前版本安装包中所述至少一个第一文件标识表征的至少一个第一目标文件进行解压缩,所述第一文件标识表征当前版本安装包中需要参与合成计算的第一目标文件的标识;

文件合成单元,用于当所述差分包下载单元从所述目标差分包中下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及所述差异文件,合成至少一个合成文件,所述合成文件为对所述目标版本的安装包中需要参与差分计算的第二目标文件进行解压缩得到的,所述差异文件为通过对所述至少一个合成文件与所述经过解压缩的至少一个第一目标文件进行差分计算得到的;

压缩单元,用于压缩所述至少一个合成文件,并将所述压缩后的至少一个合成文件合成到待合成的目标版本安装包中。

另一方面,本申请提供了一种终端,包括:

处理器和存储器;

所述处理器,用于调用并执行所述存储器中存储的程序;

所述存储器用于存储所述程序,所述程序至少用于:

当检测到应用升级请求时,确定终端中待升级的目标应用的当前版本以及所述目标应用待升级到的目标版本;

从终端中获取所述目标应用的当前版本的当前版本安装包;

从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

在下载所述目标差分包的过程中,当从所述目标差分包中下载到至少一个第一文件标识时,对所述当前版本安装包中所述至少一个第一文件标识表征的至少一个第一目标文件进行解压缩,所述第一文件标识表征当前版本安装包中需要参与合成计算的第一目标文件的标识;

当从所述目标差分包中下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及所述差异文件,合成至少一个合成文件,所述合成文件为对所述目标版本的安装包中需要参与差分计算的第二目标文件进行解压缩得到的,所述差异文件为通过对所述至少一个合成文件与所述经过解压缩的至少一个第一目标文件进行差分计算得到的;

压缩所述至少一个合成文件,并将所述压缩后的至少一个合成文件合成到待合成的目标版本安装包中。

另一方面,本申请提供了一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行以上所述的安装包合成方法。

经由上述的技术方案可知,在下载升级目标应用至目标版本所需的目标差分包的过程中,当下载到当前版本安装包中参与合成计算的至少一个第一目标文件的至少一个第一文件标识时,便依据该第一文件标识对当前版本安装包中的第一目标文件进行解压缩;并在下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及该差异文件,进行文件合成,从而可以一边下载目标差分包,一边对终端中当前版本安装包内的需要参与合成计算的文件进行解压缩,并进行文件合成,有效利用了下载目标差分包的时长,从而可以减少基于差异文件进行文件合成所需的等待时长,从而减少了下载目标差分包以及合成目标版本安装包所需的总时长,进而降低了应用升级所需的耗时。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1示出了本申请的一种安装包合成方法的一种应用场景的组成结构示意图;

图2a示出了一款应用的旧版本安装包与新版本安装包中包含的文件的对比示意图;

图2b示出了服务器基于新、旧版本安装包中文件内容存在更新的多个文件生成差异文件的示意图;

图2c示出了终端基于差异文件以及旧版本安装包中文件内容存在更新的文件,合成新版本安装包中文件内容更新后的文件的示意图;

图3示出了本申请实施例中基于增量差分算法生成的差分包的组成格式示意图;

图4a示出了差分包中的差分文件的一种组成格式示意图;

图4b示出了本申请实施例中差分文件所采用的一种组成格式示意图;

图5示出了本申请一种安装包合成方法一个实施例的流程示意图;

图6示出了本申请一种安装包合成装置一个实施例的组成结构示意图;

图7示出了本申请的安装包合成方法所适用的终端的一种组成结构示意图。

具体实施方式

为了便于理解,先对本申请实施例的安装包合成方法所适用的应用场景的一种组成架构进行介绍。如图1,在图1所示的应用场景中可以包括:终端10以及服务器11。

其中,终端10可以为手机、平板电脑等等。

在本申请实施例中,该终端10中安装有至少一款应用程序101,以及用于控制终端中安装的应用程序进行升级的升级管理应用102。

其中,服务器11中存储有多个发生版本更新的应用程序的补丁包,该补丁包为采用增量更新算法生成的补丁包。也就是说,对于一款应用而言,应用的补丁包也就是说按照增量更新算法(也称为差量更新算法),确定出的该应用的旧版本安装包与新版本安装包之间的差分包(也称为差分文件)。其中,应用的旧版本安装包为应用当前待升级的版本所对应的安装包,而新版本安装包为应用需要升级到的版本所对应的安装包。

其中,终端10中的升级管理应用从服务器中获取待升级的应用程序的补丁包,并将该补丁包与该待升级的应用程序的旧版本安装包进行合成,以得到该应用的新版本安装包,从而完成对该待升级的应用程序的升级。

如,增量更新算法可以为二进制差异bsdiff算法,相应的,服务器可以使用bsdiff算法产生差分包,而终端可以利用bspatch算法将应用的旧版本安装包与差分包合成该应用的新版本安装包。

为了便于理解,服务器侧利用增量更新算法生成差分包,以及终端利用差分包合成新版本安装包的过程,下面结合一个实例进行介绍。

如,参见图2a,其示出了一款应用的旧版本安装包与新版本安装包中包含的文件的对比示意图。由图2a可以看出,应用的旧版本安装包中包括:文件a、文件b、文件c、文件d和文件e,而应用的新版本安装包中包括:文件a1、文件b、文件d1、文件e1和文件f。

针对新、旧安装包中所包含的文件的不同情况,可以分为几下几种处理方式:

(1)、对于为新版本安装包中包含,而旧版本安装包中不包含的新增文件,如文件f(为了便于描述,后续称为新增文件f),服务器侧生成的差分包中可以携带有该新增文件f的文件头以及新增文件f的文件内容。相应的,终端在依据差分包和旧版本安装包合成新版本安装包时,可以直接将该文件f的内容作为新版本安装包中的一个文件内容。

(2)、对于新版本安装包中不存在,而旧版本安装包中存在的文件,如文件c,服务器侧生成的差分包中不携带有该文件c的文件头。相应的,终端在依据差分包和旧版本安装包合成新版本安装包时,则可以直接删除旧版本安装包中的该文件c,从而使得合成的新版本安装包中不包含该文件c。

(3)、对于新版本安装包以及旧版本安装包都存在的文件,且文件内容相同的未更新文件,如文件b(为了便于描述,后面称为未更新文件b),则服务器生成的差分包中可以仅携带有该未更新文件b的文件头,而不携带该未更新文件的文件内容。相应的,终端在依据差分包和旧版本安装包合成新版本安装包时,则可以从旧版本安装包中获取该未更新文件b,并将未更新文件b合成到所需合成的新版本安装包中。

(4)、对于新版本安装包与旧版本安装包中都存在,但是文件内容发生更新的文件,如文件a与文件a1分别为旧版本安装包中以及新版本安装包中文件内容发生更新的文件,也就是说,文件a为旧版本安装包中待更新的待更新文件,而文件a1为对旧版本安装包中的文件a进行更新之后的更新后文件。由于后续需要利用文件a与文件a1进行差分计算,因此,文件a属于旧版本安装包中参与差分计算的文件,而文件a1属于新版本安装包中参与差分计算的文件。为了便于区分,将旧版本安装包中参与差分计算的文件称为第一目标文件,而将新版本安装包中参与差分计算的文件称为第二目标文件。相应的,文件d与文件d1也分别属于相对应的待更新文件以及更新后的文件,文件e与文件e1也分别属于相对应的待更新文件以及更新后的文件。

针对(4)中所提到的需要参与差分计算的文件,服务器侧所执行的操作可以参见图2b。如图2b所示,服务器分别对旧版本安装包中的每个需要参与差分计算的第一目标文件进行解压缩,即解压缩文件a、文件d以及文件e,并将解压缩后的文件a、文件d以及文件e合并为一个文件,为了便于区分,将合成的该文件称为旧版本安装包中用于差分计算的旧文件,如图2b中旧文件中包含对文件a、文件d和文件e分别解压缩后所得到的文件a、文件d和文件e。同时,服务器分别对新版本安装包中的每个需要参与差分计算的第二目标文件进行解压缩,即对文件a1、文件d1以及文件e1进行解压缩,并将文件a1、文件d1以及文件e1解压缩后所得到的文件a1、文件d1和文件e1合并为一个文件,为了便于区分,将此处合成的该文件称为新版本安装包中用于差分计算的新文件。如图2b中新文件中包含对文件a1、文件d1和文件e1解压缩后所得到的文件a1、文件d1和文件e1。然后,服务器利用增量更新算法(如图2b中服务器利用bsdiff差分算法),对旧文件与新文件进行差分计算,得到新旧安装包中存在差异的差异文件,如图2b中的差异文件为bsdiff文件。在该种情况下,服务器在生成的差分包中携带有该差异文件的文件头以及该差异文件的文件内容。

相应的,结合图2c,终端在依据差分包和旧版本安装包合成新版本安装包时,可以依据差分包中携带的文件头,确定出旧版本安装包中参与差分计算的文件a、文件d和文件e,对文件a、文件d以及文件e进行解压缩,得到文件a、文件d和文件e,并将得到文件a、文件d和文件e合并为旧文件,利用合成算法(如图2c中的bspatch算法)对旧文件和差异文件(如图2c中的bsdiff文件)进行合成计算,从而合成新版本安装包中参与差分计算的合成文件,该合成文件就相当于前面提到新文件,如图2c该新文件包括文件a1、文件d1和文件e1,这样,对文件a1、文件d1和文件e1进行解压缩,得到新版本安装包中的文件a1、文件d1以及文件e1。

当然,以上仅仅是以一种情况为例,对服务器利用增量更新算法生成差分包,以及终端利用差分包合成新版本安装包的过程进行了简单介绍,但是在实际应用中,服务器利用增量更新算法生成差分包以及终端合成新版本安装包的过程还可以有其他种可能,在此不加以限制。

发明人经过对终端合成新版本安装包的过程进行研究发现:目前,终端需要对某款应用进行升级时,终端会从服务器下载该应用的差分包,而下载差分包需要一定的时长,终端需要等待差分包下载完成之后,再基于差分包中差异文件以及该应用的旧版本安装包合成新版本安装包中参与差分计算的各个文件,并基于合成的各个文件、差分包中的新增文件以及旧版本安装包中未更新文件,形成新版本安装包,这样,终端等待下载完差分包的所有数据以及合成新版本安装包都需要耗费时间,使得终端对应用升级所需的耗时较长。

为了降低终端升级应用所需的耗时,本申请的安装包合成方法中,在终端下载差分包的过程中,依据应用的旧版本安装包以及已经下载的差分包的数据,合成新版本安装包中的文件,实现了边下载边合成,有效利用了终端下载差分包所需的时长,从而大大降低了等待应用升级所需的耗时。

下面结合以上共性,对本申请实施例的方案进行详细介绍。

首先,对本申请实施例的服务器生成的差分包的各部分组成进行介绍,如图3,其示出了本申请利用增量差分算法生成的差分包的组成格式示意图。

结合图3,服务器利用增量差分算法生成的差分包包括以下几部分:

包头部pfh,其表示差分包头部信息,在pfh中包含服务器所采用的增量更新算法的版本、应用的旧版本等信息。

更新文件数diff-file-count表示新版本安装包与旧版本安装包中存在差异的文件数量。

旧文件记录oldapk-file-record表示旧版本安装包中参与差分计算的文件记录。在该文件记录中包括旧版本安装包中参与差分计算的每个第一目标文件各自的偏移量、是否压缩、压缩后长度、压缩前长度等信息。其中,该旧版本安装包中参与差分计算的第一目标文件,也就是后续合成新版本安装包时,该旧版本安装包中需要参与合成计算的文件。

新文件记录newapk-file-record表示新版本安装包中参与差分计算的文件记录。在该文件记录中新版本安装包中参与差分计算的每个第二目标文件各自的偏移量、压缩级别、压缩后长度、压缩前长度等信息。

差异文件diff-file为对新版本安装包与旧版本安装包中存在更新的文件进行差分计算所得到的文件,如图2中该差异文件为利用bsdiff差分算法,对旧版本安装包中参与差分计算的多个第一目标文件以及新版本安装包中参与差分计算的多个第二目标文件进行差分计算所得到的文件。另外,该diff-file中除了包括差异文件之外,还可以包括表示差异文件的文件长度的信息。

文件列表表示新版本安装包中的所有文件列表。具体包含新版本安装包中所包含的各个文件的文件头、数据描述信息、采用何种方式合成等信息,例如,在该files中可以包括新版本安装包中出现的新增文件的文件头以及文件内容,旧版本安装包中未更新文件的文件头等。

目录区cdfhlist表示新版本安装包中的压缩源文件目录区。

结束标识eocd表示新版本安装包中的目录结束标识结构。

由于服务器生成的差分包的组成格式中包括:新版本安装包以及旧版本安装包中参与差分计算的文件的位置偏移、压缩前的长度以及压缩后的长度等信息,因此,终端在下载差分包的过程中,当确定当前已经获取到(或者说下载完)旧版本安装包中参与差分计算的文件记录,便可以依据该旧版本安装包中参与差分计算的文件记录,对终端本地中应用的旧版本安装包中参与差分计算的各个第一目标文件进行解压缩,从而实现了一边下载差分包中的数据,一边对旧版本安装包中参与差分计算的各个第一目标文件进行解压缩。相应的,当终端从差分包中获取到(或者说下载完)新版本安装包中参与差分计算的文件记录以及差异文件时,便可以基于差异文件以及旧版本安装包中压缩后的各个第一目标文件进行文件合成,以合成新版本安装包中参与差分计算的新版本安装包中的各个第二目标文件,并对合成后的第二目标文件进行压缩,同时还可以基于合成得第二目标文件组装新版本安装包。

考虑到差分包中的差异文件也具有较大的数据量,使得下载差分包中的差异文件需要耗费较长时间,因此,如果终端等待差异文件下载完成,再依据差异文件以及终端本地的旧版本安装包中参与差分计算的各个第一目标文件,合成新版本安装包中的参与差分计算的第二目标文件,就会导致终端需要等待较长时间才可以完成新版本安装包中第二目标文件的合成,从而导致应用升级的耗时较长。

而发明人经过对差分包中差异文件的构成进行研究发现:在采用增量差分算法进行差分计算的一种方式中,对于旧版安装包中用于差分计算的旧文件,以及新版安装包中用于差分计算的新文件,在利用增量差分算法对该旧文本与新文件进行差分计算的过程中,会采用分块差分的方式,从而会得到多个差异文件块,这多个差异文件块组成了一个差异文件。分块差分是指,分别将旧文本以及新文件拆分为指定数量个分块,然后按照旧文件中各个分块的顺序,以及新文件中各个分块的顺序,分别从旧文本以及新文件中选取排序最靠前且尚未参与差分计算的一个分块,并依据增量差分算法,对从旧文件中选取出的分块以及从新文件中选取出的分块进行差分计算,直至旧文本以及新文件中所有分块都完成差分计算,从而得到指定个差分文件块。

其中,该指定数量可以根据需要设定,如,指定数量可以为10;该指定数量也可以根据第一目标文件或者第二目标文件的总数量来确定,如,第一目标文件为20个,则指定数量可以为10个,这样,每两个第一目标文件可以为一个分块。

其中,旧文件与新文件与前面的描述相同,即,旧文件由旧版安装包中经过解压缩的多个第一目标文件组成,该第一目标文件为旧版安装包中发生文件内容更新的文件,也就是旧版本安装包中需要参与差分计算的文件。新文件由新版本安装包中经过解压缩的多个第二目标文件组成,该第二目标文件为新版本安装包中对第一目标文件进行更新后的文件,也就是新版本安装包中需要参与差分计算的文件。

为了便于理解服务器利用增量差分算法进行差分计算得到多个差分文件的过程,结合图2b举例说明。如在图2b中,将旧版本安装包中的文件a、文件d以及文件e分别解压缩,依次得到文件a、文件d和文件e,而文件a、文件d和文件e组成了旧文件,相应的,也可以得到包含文件a1、文件d1和文件e1的新文件。假设分别将旧文件以及新文件拆分为5个分块,则服务器需要利用增量差分算法,先对旧文件中的第一个分块与新文件中的第一个分块进行差分计算,得到第一个差异文件块;然后,才对旧文件中的第二个分块与新文件中的第二个分块进行差分计算,得到第二个差异文件块;依次类推,直到对旧文件中第五个分块与新文件中的第五个分块进行差分计算,得到第五个差异文件块,这样,通过对旧文件以及新文件的分块差分,可以得到5个差异文件块,这5个差异文件块构成了一个差分文件。

其中,通过差分计算得到的每个差异文件块都由三种类别文件组成,这三个类别文件分别为:控制文件(ctrl文件)、差异内容文件(如,diff文件)或者额外文件(extra文件)。该控制文件记录有用于控制差异内容文件与旧版本安装包合成所需的参考数据,如,记录有旧版本安装包对应的旧文件中,需要与该差异内容文件进行合成计算的文件内容的偏移量以及偏移长度等等,从而根据该文件内容的偏移量以及偏移长度可以从该旧文本中定位出该文件内容。其中,差异文件块的差异内容文件中记录有旧文本中用于计算该差异文件块的第一分块,与新文件中用于计算该差异文件的第二分块之间的差异内容。其中,为了便于区分将旧文件与新文件中用于参与该差异文件块对应的差分计算的分块分别称为第一分块和第二分块。相应的,该额外内容文件中可以包括该第一分块与第二分块中不存在差异的文件内容。

在服务器利用增量差分算法计算得到该多个差异文件块之后,将该多个差异分块组合到差分包的过程中,如果服务器按照类别文件所属的类别,将多个差异文件块中相同类别的类别文件排列到一起,那么差分包中的组成格式可以参见图4a。由图4a可以看出,在该差分包中按照类别组织各个类别文件,将相同类别的类别文件相邻排列,如图4a靠近文件头部为n个差异文件块各自对应n个控制ctrl文件,当n个差异文件块各自的控制文件排列完成之后,才可以向差分包中排列该n个差异文件块中另一种类别的类别文件(如图4a中排列完所有的控制文件之后,再排列各个diff文件),直到所有类别的类别分块均排序完成,便完成向差分包中添加差异文件的操作。

然而一个差异文件块是由三个类别文件组成,终端只有获取到差异文件块的三个类别文件,才可以基于该差异文件分块的三个类别文件,与旧版本安装包中的旧文本进行文件合成,但是如果按照类别文件所属的类别,依次在差分包中排列各个类别文件,那么终端需要等待下载完所有差异文件块的所有类别文件之后,才可以获取到各个差异文件块各自的三个类别文件,从而需要等待所有差异文件块的类别文件均下载完之后,才可以执行合成操作,使得合成操作延迟,从而导致延误了新版本安装包的合成,导致应用升级耗时较长。

为了使得终端可以在下载差异文件块的类别文件的同时,可以利用已下载的类别文件进行文件合成,服务器向差分包中排列各个类别文件时,可以以差分文件块为单位,将同一个差异文件块的三种类别文件排列到一起。如图4b,其示出了本申请中差分包中差异文件的组成格式示意图,由图4b可以看出,差异文件中以差异文件块为一个基本单元,依次排序各个差异文件块所包含的三种类别文件,当完成一个差异文件块中三个类别文件的排列之后,才会排列下一个差异文件块所对应的三个类别文件。如图4b,靠近差异文件的文件头的为差异文件块1的控制文件、差异内容diff文件以及额外extra文件,在图4b中差异文件块1对应的三个类别文件依次表示为块1的控制文件、块1的差异内容文件和块1的额外文件,然后为差异文件块2对应的三个类别文件,依此类推。

相应的,终端在从差分包中下载该差异文件时,可以依次下载各个差异文件块各自对应的三种类别文件,下载完一个差异文件块的三个类别文件之后,才会下载下一个差异文件块的三个类别文件,这样,终端下载到一个差异文件块的三个类别文件之后,就可以依据已下载的该差异文件块的三个类别文件,进行文件合成操作。

结合以上内容,对本申请中安装包合成方法的流程进行介绍。如,参见图5,其示出了本申请一种安装包合成方法一个实施例的流程示意图,本实施例的方法应用于终端。本实施例的方法可以包括:

s501,接收对终端中的目标应用的升级请求。

其中,目标应用为终端中已安装的应用,且为当前需要被升级的应用。

该升级请求为用于请求将目标应用升级至目标版本的应用升级请求。如,在该升级请求中可以携带该目标应用所需升级到的目标版本的版本号。

举例说明,终端可以输出针对该目标应用的升级提示,如将目标应用升级到某个版本,用户点击该升级提示并确认升级时,触发向终端发出针对该目标应用的升级请求,以请求将该目标应用升级到该升级提示所指示的版本。

s502,响应于该升级请求,获取终端中安装该目标应用的当前版本所采用的旧版本安装包。

其中,终端当前安装的该目标应用的安装包所属的版本称为当前版本。相应的,旧版本安装包为终端中该目标应用的当前版本的安装包,该旧版本安装包也可以称为当前版本安装包。该旧版本安装包为需要进行升级的安装包。

可以理解的是,在终端中安装了应用之后,终端可以存储应用的安装包,因此,可以从终端中,获取安装该目标应用的当前版本所采用的旧版本安装包。

如,终端确定当前安装的该目标应用的当前版本,并依据该当前版本,从终端中获取该目标应用的旧版本安装包。当然,该升级请求也可以携带有该目标应用当前的当前版本的版本号,例如,终端向用户输出升级提示时,便可以先确定该目标应用的当前版本,并提示用户将当前版本升级到目标版本,如果用户确认升级,则升级请求携带了该当前版本的版本号以及目标版本的版本号,相应的,终端可以依据该当前版本的当前版本号,从终端中获取该当前版本的版本号对应的旧版本安装包。

s503,从服务器下载用于将目标应用从当前版本升级至目标版本的目标差分包。

如,终端可以在接收到该升级请求时,确定该目标应用的当前版本,并可以向服务器发送用于下载差分包的下载请求,该下载请求可以携带有该目标应用的当前版本的版本号以及目标版本的版本号。相应的,服务器可以根据该当前版本的版本号与目标版本的版本号,查询下载请求所请求下载的目标差分包的下载地址,并将该下载地址返回给终端,以使得终端依据该下载地址查找到该目标差分包的存储位置,并下载该目标差分包。

其中,该目标差分包为基于增量差分算法,对目标应用的当前版本对应的旧版本安装包与该目标应用的目标版本对应的目标版本安装包进行差分计算所得的差分包。其中,该目标版本安装包就相当于前面提到的新版本安装包,为了便于描述,后面将目标版本安装包均称为新版本安装包。

其中,该目标差分包可以包括新版本安装包中新增的新增文件、旧版本安装包与新版本安装包中未发生更新的未更新文件的文件头、以及差异文件等。具体的,该目标差分包的组成可以前面关于差分包的组成的相关介绍,在此不再赘述。

可选的,终端可以通过下载线程下载该目标差分包。

需要说明的是,步骤s502和步骤s503的顺序并不限于图5所示,在实际应用中,步骤s502和步骤s503的执行顺序可以互换,也可以是同时执行这两个步骤。

s504,在下载该目标差分包的过程中,当下载到该目标差分包的包头时,检测该目标差分包的包头所包含旧版本标识是否与终端中该目标应用的当前版本的标识一致,如果是,则执行步骤s505;如果否,则结束升级。

可以理解的是,基于目标差分包中各部分的组成顺序,终端需要依次下载该目标差分包中各个组成部分,如,参见图3,终端下载目标差分包的过程中,会依次下载目标差分包的包头部pfh,新版本安装包与旧版本安装包中存在差异的文件数量,即更新文件数,旧版本安装包中参与差分计算的文件记录,即旧文件记录,新文件记录,差异文件diff-file、文件列表files等。可见,终端首先从该目标差分包中下载到目标差分包的包头。

其中,目标差分包的包头中所包含的旧版本标识为在生成该目标差分包时,参与差分计算的旧版本安装包的版本标识。如果该目标差分包中的旧版本标识与该终端中目标应用的当前版本的标识一致,则说明该目标差分包为用于对目标应用的当前版本进行升级的差分包,在该种情况下,可以执行后续步骤所涉及到的升级操作;否则,说明差分包下载错误,则结束升级过程。

可以理解的是,该步骤s504为可选步骤,在终端确认所请求下载的目标差分包无误的情况下,也可以不执行该步骤s504。

s505,当终端从该目标差分包中下载到第一文件记录时,依据该第一文件记录中记录的至少一个第一目标文件的第一文件标识,分别对该旧版本安装包中该至少一个第一目标文件进行解压缩,并将解压缩后的至少一个第一目标文件合并为待进行合成计算的旧版本拼接文件。

其中,第一文件记录为用于记录旧版本安装包中参与差分计算的第一目标文件的文件记录,如,前面提到的旧文件记录oldapk-file-record,为了便于与后面新版本安装包中参与差分计算的文件记录进行区分,将该旧文件记录称为第一文件记录,并将旧版本安装包中参与差分计算的文件称为第一目标文件。

其中,为了提高解压缩的效率,当第一目标文件的数量为多个时,可以采用多个解压缩线程并行对该旧版本安装包中该多个第一目标文件进行解压缩,从而使得该多个第一目标文件可以同时被解压缩,可以降低解压缩该多个第一目标文件所需的耗时。如,当下载线程从目标差分包中下载到至少一个第一文件标识时,通过下载线程向至少一个解压缩线程发送通知,以使得该至少一个解压缩线程分别对当前版本安装包中的至少一个第一目标文件进行解压缩。

为了便于区分,将解压缩后的至少一个第一目标文件拼接而成的文件,称为旧版本拼接文件。其中,该旧版本拼接文件就相当于前面提到的旧版本安装包中参与差分计算的多个文件经过解压缩后,拼接成的旧文件。

s506,当该目标差分包中下载到第二文件记录时,缓存该第二文件记录。

其中,该第二文件记录为新版本安装包中参与差分计算的文件的文件记录,即前面提到的新文件记录newapk-file-record。在该第二文件记录中记录有新版本安装包中参与差分计算的至少一个第二目标文件的信息,如,第二目标文件在新版本安装包中的偏移位置以及文件长度,该第二目标文件在该新版本安装包中的压缩方式等等。

缓存该第二文件记录的目的是为了后续终端利用与增量更新算法相对应的合成算法,合成出新版本安装包中的文件之后,可以基于该第二文件记录确定合成出的文件属于哪一个或几个第二目标文件中的内容,以及合成出的文件在新版本安装包中的位置等等。

s507,在终端从目标差分包下载差异文件的过程中,当从目标差分包中下载到该差异文件中一个差异文件块的三个类别文件时,基于该差异文件块的三个类别文件,与该旧版本拼接文件进行合成计算,得到合成的新文件分块。

可以理解的是,终端下载完该第二文件记录之后,会从目标差分包中下载差异文件的相关数据。

在本实施例中,以目标差分包中的差异文件由多个差异文件块组成,而每个差异文件块包括三个类别文件为例进行介绍,同时,假设目标差分包中将同一个差异文件块的三个类别文件相邻,在该种情况下,终端下载完一个差异文件块的三个类别文件之后,才会下载下一个差异文件块的类别文件。相应的,在终端下载得到一个差异文件块的三个类别文件之后,便可以基于该差异文件块的三个类别文件以及旧版本拼接文件进行合成计算,这样,在下载差异文件中差异文件块的同时,便可以基于已下载得到的差异文件块进行文件合成计算,实现了一边下载差异文件块一边进行文件合成,有效利用了下载差异文件块的耗时,从而避免下载完所有差异文件块再进行文件合成而导致文件升级延迟的情况。

可以理解的是,该旧版本拼接文件是由经过解压缩的多个第一目标文件拼接而成,而每个差异文件块是利用旧版本拼接文件中的一个分块,与新版本安装包对应的新文件中的一个分块进行差分计算得到的。因此,在利用该差异文件块进行文件合成之前,需要从该旧版本拼接文件中,确定出参与计算该差异文件块的分块,为了便于区分,将旧版本拼接文件中,参与计算该差异文件块的分块称为旧文件分块,而该旧文件分块就是旧版本拼接文件中需要与该差异文件块进行合成计算的分块。

其中,该差异文件块的控制文件中记录有该旧版本拼接文件中,参与计算该差异文件块的旧文件分块的偏移位置以及偏移长度,根据该旧文本分块的偏移位置和偏移长度,可以从该旧版本拼接文件中定位出该差分文件块对应的旧文件分块。

相应的,利用该差异文件块中的差异内容文件以及额外文件,与该旧文件分块进行合成计算,便可以合成一个合成文件。该合成文件就是该新版本安装包对应的新文件中参与计算该差异文件块的分块,为了便于区分,可以将该新文件中参与计算该差异文件块的分块称为新文件分块。

其中,终端进行合成计算所采用的合成算法与服务器侧进行差分计算所采用的增量差分算法相对应,如,服务器侧采用的增量差分算法为bsdiff时,终端可以采用bspatch算法合成。服务器所采用的增量差分算法可以记录在目标差分包的包头中,这样,终端依据目标差分包的包头中记录的增量差分算法,确定合成计算所需采用的合成算法。

可以理解的是,该终端中可以包括下载线程以及一个或多个合成线程,下载线程负责下载目标差分包,在下载线程下载目标差分包的过程中,如果下载线程下载到一个差异文件块的三个类别文件,该下载线程就可以通知一个空闲的合成线程依据当前下载到的差异文件块进行合成计算,这样,可以保证多个合成线程并行对多个不同的差异文件块进行合成计算,以提高合成新文件分块的效率。

需要说明的是,在该步骤s507中是以目标差分包中将同一个差异文件块的三个类别文件相邻排列为例进行说明。但是可以理解的是,如果该目标差分包中按照类别文件的类别,将相同类别的类别文件排列到一起,即如图4a所示构建差异文件中不同差异文件块的各个类别文件,那么可以在下载到差异文件的所有差异文件块对应的类别文件时,可以分别基于每个差异文件块各自的三个类别文件,与旧版本拼接文件中该差异文件块对应的旧文件分块进行合成计算,这样,在终端下载完所有差异文件块之后便执行合成计算,也实现了一边合成一边下载目标差分包中其他数据。

另一方面,如果服务器利用增量差分算法进行差分计算时,未对旧版本安装包对应的旧版本拼接文件(即旧文件)以及新版本安装包中的新文件进行分块的情况下,那么服务器对旧版本拼接文件以及新文件进行差分计算得到一个差异文件。在该种情况下,终端检测到当前下载到该差异文件,则可以基于该差异文件以及旧版本拼接文件进行合成,以合成一个合成文件。其中,该合成文件为对目标版本安装包中需要参与差分计算的第二目标文件进行解压缩得到的,也就是说该合成文件也就是服务器进行差分计算所用的新文件。

当然,如果在步骤s505中将该至少一个第一目标文件解压缩之后,并未将该至少一个第一目标文件拼接为一个文件(即旧版本拼接文件),则该步骤s507中,可以依据经过解压缩的至少一个第一目标文件以及该差异文件,合成至少一个合成文件。

s508,依据第二文件记录,压缩新文件分块,并将压缩后的新文件分块合成到待合成的新版本安装包中。

其中,该第二文件记录中记录有新版本安装包中文件的压缩方式,依据该压缩方式,可以对合成的新文件分块进行压缩。为了提高压缩效率,在本申请实施例中,该新版本安装包中文件的压缩方式可以为:gnu自由软件的文件压缩程序,即所称的gzip压缩方式,相应的,终端可以采用gzip压缩方式压缩新文件分块。

其中,该第二文件记录中还记录了参与差分计算的至少一个第二目标文件各自的偏移长度以及偏移位置,这样,压缩新文件分块之后,根据压缩后的新文件分块中包括的第二目标文件的偏移长度以及偏移位置,确定压缩后的新文件分块在新版本安装包中的位置,从而将新文件分块合成到该新版本安装包中。

可以理解的是,在终端基于已下载的差异文件块,合成新文件分块的同时,终端仍然会继续从目标差分包中下载其他未下载的差异文件块;而且,在终端下载差异文件块的过程中,终端每合成一个新文件分块,就可以对新文件分块进行压缩,并将压缩后的新文件分块合成到待合成的新版本安装包中,从而实现了在下载差异文件块的过程中,基于已下载的差异文件合成新文件分块;同时,在合成新文件分块的过程中,对已合成的新文件分块进行压缩,并合成到待合成的新版本安装包中,从而大大提高了新版本安装包的合成效率。

可以理解的是,在终端通过合成线程合成新文件分块的情况下,在合成线程合成了一个新文件分块之后,合成线程可以通知一个压缩线程对合成的新文件分块进行压缩,当然,压缩线程可以有多个,以使得多个压缩线程并行执行对不同的新文件分块的压缩,以及将压缩后的新文件分块添加到待合成的新版本安装包中。

需要说明的是,步骤s507和步骤s508的顺序并不限于图5所示,在实际应用中,在步骤s507依据当前下载到的差异文件块进行合成计算的同时,可以执行步骤s508中对当前已合成的新文件分块的压缩。

另外,在服务器对旧版本拼接文件以及新文件进行差分计算得到一个差异文件的情况下,步骤s507中基于差异文件以及旧版本拼接文件合成的是新文件(即合成文件),即多个经过解压缩后的第二目标文件所组成的新文件。相应的,该步骤s508可以对新文件进行压缩,以得到多个第二目标文件,并将得到的多个第二目标文件添加到待合成的新版本安装包中。

s509,检测该目标差分包中的所有差异文件块是否均下载完成,如果是,则执行步骤s510;如果否,则返回步骤s507。

其中,在该目标差分包的差异文件中除了包括差异文件块之外,还可以包括差异文件的文件长度,依据该差异文件的文件长度,可以检测已下载的所有差异文件块的总长度是否达到该文件长度,如果是,则表明所有的差异文件块均下载完成;如果否,则仍会继续下载差异文件块的类别文件,并在下载差异文件块的过程中,进行文件合成以及并将合成的文件合并到新版本安装包中。

需要说明的是,如果仍有未下载的差异文件块,则继续执行下载差异文件块的操作,并执行基于当前下载到的差异文件块进行合成计算的操作;当所有差异文件块均完成下载,则可以继续下载该目标差分包中的其他数据,但是如果存在尚未完成合成计算的差异文件块,则在执行后续步骤s510的同时,仍可以同时执行基于已下载的差异文件块进行合成计算的操作,实现每下载到一个差异文件块就可以对该差异文件块进行合成操作。

s510,从目标差分包中下载新版本安装包的文件列表,并当下载到新版本安装包中的新增文件以及新增文件的合成位置信息时,根据新增文件的合成位置信息,将新增文件添加到待合成的新版本安装包的文件中。

其中,新增文件是指旧版本安装包中不存在,而新版本安装包中新增的文件。如图2a中新版本安装包中的文件f就属于新增文件。

其中,该合成位置信息可以包括新增文件在该新版本安装包中的偏移位置以及偏移长度等信息,根据该合成位置信息可以确定该新增文件在新版本安装包中的位置。

s511,当从文件列表中下载到新版本安装包中未更新文件的标识以及合成位置信息时,根据未更新文件的标识,从旧版本安装包中获取该未更新文件,并根据该未更新文件信息的合成位置信息,将未更新文件添加到待合成的新版本安装包的文件中。

其中,未更新文件是指新版本安装包以及旧版本安装包中均存在且文件内容相同的文件。

需要说明的是,在实际应用中,新版本安装包中有可能只包括差异文件,而不包括未更新文件以及新增文件,在该种情况下,目标差分包中也可以不包含该未更新文件的标识及相关信息,以及新增文件的相关信息,因此,步骤s510到s512的步骤可以为可选步骤,而并非是安装包合成的必须步骤。

s512,当终端确定出目标差分包下载完成时,将目标差分包中的压缩源文件目录cdfh以及新版本安装包中目标结束标识结构eocd添加到该新版本安装包的文件中,以得到该新版本安装包。

其中,该步骤s512的目的是为了使得新版本安装包的组成更加完整,但是可以理解的是,在某些场景中,在将所有压缩后的至少一个合成文件合成到待合成的新版本安装包,并将所有新增文件以及未更新文件添加到待合成的该新版本安装包之后,可以得到该新版本安装包直接作为最终合成出的新版本安装包。

另一方面,本申请实施例还提供了一种安装包合成装置。如,参见图6,其示出了本申请一种安装包合成装置一个实施例的组成结构示意图。该安装包合成装置可以包括:

版本确定单元601,用于当检测到应用升级请求时,确定终端中待升级的目标应用的当前版本以及所述目标应用待升级到的目标版本;

旧版本获取单元602,用于从终端中获取所述目标应用的当前版本的当前版本安装包;

差分包下载单元603,用于从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

解压缩单元604,用于在所述差分包下载单元下载所述目标差分包的过程中,当从所述目标差分包中下载到至少一个第一文件标识时,对所述当前版本安装包中所述至少一个第一文件标识表征的至少一个第一目标文件进行解压缩,所述第一文件标识表征当前版本安装包中需要参与合成计算的第一目标文件的标识;

文件合成单元605,用于当所述差分包下载单元从所述目标差分包中下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及所述差异文件,合成至少一个合成文件,所述合成文件为对所述目标版本的安装包中需要参与差分计算的第二目标文件进行解压缩得到的,所述差异文件为通过对所述至少一个合成文件与所述经过解压缩的至少一个第一目标文件进行差分计算得到的;

压缩单元606,用于压缩所述至少一个合成文件,并将所述压缩后的至少一个合成文件合成到待合成的目标版本安装包中。

在一种可能的实现方式中,所述差分包下载单元下载的所述目标差分包中的所述差异文件包括多个差异文件块,每个差异文件块由三个类别文件组成,且,所述差异文件中同一个差异文件块的三个类别文件相邻排列;

相应的,所述文件合成单元,包括:

分块合成子单元,用于在所述差分包下载单元从所述目标差分包下载差异文件的过程中,当下载到一个差异文件块的三个类别文件时,依据经过解压缩的至少一个第一目标文件以及当前下载到的所述差异文件块的三个类别文件,合成新文件分块,直至所有差异文件块的三个类别文件均被下载完成,其中,所述新文件分块为所述至少一个合成文件的一部分。

进一步分,所述压缩单元,可以包括:

分块压缩单元,用于当检测到合成所述新文件分块时,压缩所述新文件分块,并将所述压缩后的新文件分块合成到待合成的目标版本安装包中。

在一种可能的实现方式中,所述差分包合成单元,具体为,用于通过下载线程从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

所述解压缩单元,具体为,用于当所述下载线程从所述目标差分包中下载到至少一个第一文件标识时,通过所述下载线程向至少一个解压缩线程发送通知,以使得所述至少一个解压缩线程分别对所述当前版本安装包中的至少一个第一目标文件进行解压缩,所述第一目标文件为所述至少一个第一文件标识所表征的至少一个文件。

可选的,本申请实施例的装置还可以包括:

新文件添加单元,用于当所述差分包下载单元从所述目标差分包中下载到目标版本安装包中的新增文件以及所述新增文件的合成位置信息时,依据所述新增文件的合成位置信息,将所述新增文件合成到所述待合成的目标版本安装包中;

旧文件添加单元,用于当所述差分包下载单元从所述目标差分包中下载到所述当前版本安装包中未更新文件的标识以及所述未更新文件的合成位置信息时,依据所述未更新文件的标识,从所述当前版本安装包中获取所述未更新文件,并依据所述未更新文件的合成位置信息,将所述未更新文件合成到所述待合成的目标版本安装包中。

另一方面,本申请还提供了一种终端,如图7,其示出了本申请实施例的安装包合成方法所适用的终端的一种组成结构示意图。在图7中,该终端700可以包括:处理器701、存储器702、通信接口703、输入单元704和显示器705和通信总线706。

处理器701、存储器702、通信接口703、输入单元704、显示器705、均通过通信总线706完成相互间的通信。

其中,该通信接口703可以为通信模块的接口。

在本申请实施例中,该处理器701,可以为中央处理器(centralprocessingunit,cpu),特定应用集成电路(application-specificintegratedcircuit,asic),数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件等。

该处理器可以调用存储器702中存储的程序,具体的,可以处理器可以执行以上图5中终端所执行的操作。

存储器702中用于存放一个或者一个以上程序,程序可以包括程序代码,所述程序代码包括计算机操作指令,在本申请实施例中,该存储器中至少存储有用于实现以下功能的程序:

当检测到应用升级请求时,确定终端中待升级的目标应用的当前版本以及所述目标应用待升级到的目标版本;

从终端中获取所述目标应用的当前版本的当前版本安装包;

从服务器下载用于将所述目标应用从所述当前版本升级至所述目标版本的目标差分包;

在下载所述目标差分包的过程中,当从所述目标差分包中下载到至少一个第一文件标识时,对所述当前版本安装包中所述至少一个第一文件标识表征的至少一个第一目标文件进行解压缩,所述第一文件标识表征当前版本安装包中需要参与合成计算的第一目标文件的标识;

当从所述目标差分包中下载到差异文件时,依据经过解压缩的至少一个第一目标文件以及所述差异文件,合成至少一个合成文件,所述第二目标文件为对所述目标版本的安装包中需要参与差分计算的第二目标文件进行解压缩得到的,所述差异文件为通过对所述至少一个合成文件与所述经过解压缩的至少一个第一目标文件进行差分计算得到的;

压缩所述至少一个合成文件,并将所述压缩后的至少一个合成文件合成到待合成的目标版本安装包中。

本申请的终端还可以包括输入单元705,该输入单元可以包括感应触摸显示面板上的触摸事件的触摸感应单元、键盘等等。

该显示器704包括显示面板,如触摸显示面板等。在一种可能的情况中,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板。

当然,图7所示的终端结构并不构成对本申请实施例中终端的限定,在实际应用中终端可以包括比图7所示的更多或更少的部件,或者组合某些部件。

另一方面,本申请实施例还提供了一种存储介质,该存储介质中存储有计算机可执行指令,该计算机可执行指令用于以上实施例中所描述的安装包合成方法。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1