发明内容
鉴于上述问题,本发明的目的是提供一种文件增量升级方法及系统,以解决传统的APK特征值的获取的计算量大所导致的增量升级后台维护工作量大的问题,在降低获取APK特征值计算量的同时,提高增量升级的效率。
根据本发明的一个方面,提供一种文件增量升级方法,包括:
读取APK文件的ZIP数据信息,ZIP数据信息为ZIP数据头或者ZIP目录表;
根据所读取的ZIP数据信息获取APK文件的APK特征值;
根据APK特征值对与APK特征值对应的APKbase文件进行增量升级。
其中,根据所读取的ZIP数据信息获取APK文件的APK特征值的步骤包括:根据所读取的ZIP数据信息,对APK文件进行过滤以获取过滤的APK文件;根据所述过滤的APK文件的ZIP数据信息获取所述过滤的APK文件的APK特征值。
其中,在对APK文件进行过滤获取过滤的APK文件的过程中,根据所读取的ZIP数据信息所包含的文件名对APK文件进行过滤获取过滤的APK文件。
另一方面,本发明还提供一种文件增量升级系统,包括:
信息读取单元,用于读取APK文件的ZIP数据信息,ZIP数据信息为ZIP数据头或者ZIP目录表;
特征值获取单元,用于根据信息读取单元所读取的ZIP数据信息获取APK文件的APK特征值;
增量升级单元,用于根据特征值获取单元所获取的APK特征值对与APK特征值对应的APKbase文件进行增量升级。
其中,还包括过滤单元,用于根据信息读取单元所读取的ZIP数据信息,对APK文件进行过滤以获取过滤的APK文件,根据过滤的APK文件的ZIP数据信息获取过滤的APK文件的APK特征值。
利用上述根据本发明的文件增量升级方法及系统,对所读取的APK文件的ZIP数据信息(该ZIP数据信息为ZIP数据头或者ZIP目录表)进行计算获取APK文件的APK特征值,根据所获取的APK特征值对与该APK特征值对应的APKbase文件进行增量升级,即通过对包含APK文件原始信息的ZIP数据头信息或者存储在ZIP最后的目录表进行计算,得到能准确表示整个文件特性的特征值,进而根据特征值对对应的base文件进行增量升级。通过本发明能够在降低获取APK特征值计算量的同时,提高增量升级的效率。
为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
具体实施方式
以下将结合附图对本发明的具体实施例进行详细描述。
针对前述传统的APK特征值的获取计算量大导致增量升级时后台维护工作量大的问题,本发明通过对所读取的APK文件的ZIP数据信息(该ZIP数据信息为ZIP数据头或者ZIP目录表)进行计算获取APK文件的APK特征值,根据所获取的APK特征值对与该APK特征值对应的APKbase文件进行增量升级,通过本发明能够在降低获取APK特征值计算量的同时,提高增量升级的效率。
为了便于理解,在对本发明进行详细说明之前,先对本发明的思想进行简要描述。
本发明的最终目的是对APK文件进行增量升级,APK文件的结构是标准的ZIP压缩结构,而ZIP存储文件的特点是将文件数据压缩以后加上一个ZIP数据头,这个ZIP数据头中记录了文件的原始信息,例如:文件的创建时间、文件名、文件的原始大小、文件压缩后的大小、文件的压缩方式以及文件的CRC校验等信息。
ZIP文件是将文件逐个、顺序地存储于一个文件中,然后在ZIP文件的最后加上一个ZIP目录表,该目录表记录了所有ZIP数据头偏移位置以及一些和ZIP数据头中类似的文件原始信息。也就是说,ZIP目录表明确了该ZIP文件中包含哪些文件以及所包含的这些文件在该ZIP文件中的位置。
另外,由于APK特征值能够唯一确定一个APK文件的版本以及用于增量更新时确定APKbase文件,因此,本发明利用上述特点,选取那些包含APK文件原始信息的ZIP数据头或者存储在ZIP文件最后的ZIP目录表进行计算,以得到准确表示整个文件特性的特征值。
为了说明本发明提供的文件增量升级方法,图1示出了根据本发明实施例的文件增量升级方法的第一流程。
如图1所示,本发明提供的文件增量升级方法包括:
S110:读取APK文件的ZIP数据信息,其中,该ZIP数据信息为ZIP数据头或者ZIP目录表。
具体地,如上所述,由于ZIP数据头和ZIP目录表中都存储了类似的APK文件的原始信息,因此不管利用ZIP数据头还是利用ZIP目录表都能够准确计算出表示整个APK文件特性的特征值,因此在实际应用中,选择其一即可。
S120:根据所读取的ZIP数据信息获取APK文件的APK特征值。
其中,根据所读取的ZIP数据信息获取APK文件的APK特征值的步骤包括:根据所读取的ZIP数据信息,对APK文件进行过滤以获取过滤的APK文件;根据过滤的APK文件的ZIP数据信息获取过滤的APK文件的APK特征值。其中,在根据所读取的ZIP数据信息获取APK文件的APK特征值的过程中,通过MD5或者SHA-1算法对所读取的ZIP数据信息进行计算获取APK文件的APK特征值。
也就是说,在获取APK文件的APK特征值之前,需要对上述APK文件进行判断,以确定其是否满足文件过滤条件。即根据所读取的ZIP数据信息对上述APK文件进行过滤获取过滤的APK文件。其中,在对APK文件进行过滤以获取过滤的APK文件的过程中,如果未获取到过滤的APK文件,则通过MD5或者SHA-1算法对整个APK文件进行计算获取APK文件的APK特征值。
即:如果该APK文件满足文件过滤条件,则采用传统的方法对整个APK文件进行MD5或者SHA-1计算以得到该APK文件的APK特征值;如果该APK文件不满足文件过滤条件,则对所读取的ZIP数据信息进行MD5或者SHA-1计算以获取该APK文件的APK特征值,其中,不满足文件过滤条件的APK文件即为过滤的APK文件。
需要说明的是,由于APK文件的发行特点,虽然很多APK文件不完全一样,但这些APK文件的差异是可以预先知道的。因此如果这些差异是由一个或有限的几个文件修改所造成的,那么在获取APK特征值的过程中,将这些文件排除就能避开这种差异;而如果这些差异是由于附加在ZIP目录表之后的数据引起的,那么通过对APK文件的判断也能避开这些差异。
也就是说,由于满足文件过滤条件的APK文件是那些预先明确知道会有差异的极少数文件,因此可以以文件名为文件过滤条件对APK文件进行判断。即在对上述APK文件进行过滤获取过滤的APK文件的过程中,根据所读取的ZIP数据信息所包含的文件名对上述APK文件进行过滤获取过滤的APK文件。但需要明确的是,上述的文件过滤条件还可以为文件的大小、文件的创建时间等。即还可以根据所读取的ZIP数据信息所包含的文件的大小或者文件的创建时间对APK文件进行过滤以获取过滤的APK文件。
另外,由发行渠道所导致的APK文件的差异,但可以认为这些APK文件都是同一个版本的,其大部分内容都是相同的,因此在增量升级的时候可以只对相同的部分做增量升级,极少的差异部分可以认为是新增数据,全量增加就能解决,进而能够维护版本过多的问题,这也正是APK特征值的实用价值所在。
S130:根据APK特征值对与APK特征值对应的APKbase文件进行增量升级。
具体地,由于一个APK特征值代表一个不同的APKbase文件,因此根据特征值选择对应的base文件即可以进行增量升级。
其中,为了更为详细的说明本发明提供的文件增量升级方法,图2示出了根据本发明实施例的文件增量升级方法的第二流程。如图2所示:
S210:读取APK文件的ZIP数据头信息;
S220:根据所读取的ZIP数据头信息,判断该APK文件是否满足文件过滤条件,如果满足进入步骤S230,否则进入步骤S240。
具体地,如何判断APK文件是否满足文件过滤条件已在上述第一流程中详细说明,在此不再赘述。
S230:对整个APK文件进行MD5计算,以得到该APK文件的APK特征值,然后进入S250。
S240:利用ZIP数据头信息进行MD5计算得到APK文件的APK特征值。即只对ZIP数据头信息进行MD5计算以得到APK文件的APK特征值。
S250:根据APK特征值选择与其对应的APKbase文件进行增量升级。
通过图1和图2所示的流程可以看出,本发明提供的文件增量升级方法,通过对所读取的APK文件的ZIP数据信息进行计算获取APK文件的APK特征值,然后再根据所获取的APK特征值对与该APK特征值对应的APKbase文件进行增量升级,能够在降低获取APK特征值计算量的同时,提高增量升级的效率。
下述以示例的方式说明本发明提供的文件增量升级方法所带来的有益效果。
示例1
现有三个APK文件,其版本分别为9.7.0、9.7.1和8.9,那么在读取这三个APK文件的ZIP数据信息之后,可以根据读取的ZIP数据信息明确过滤掉8.9版本,这是因为8.9版本与9.7.0和9.7.1版本很明显不一样。
再假设9.7.0版本增加不同的发行渠道后变为9.7.0-1——9.7.0-100;而9.7.1版本增加不同的发行渠道后变为9.7.1-1——9.7.1-100,而这些版本都需要升级到9.8.0。根据传统的方法在做增量升级时就需要计算202个APK特征值,进而与其对应的APKbase文件也就有202个,需要针对不同的base文件生成增量差异的文件就有202个,这对于后台维护的工作量是巨大的。
而采用本发明所提供的文件增量升级方法就只需计算2个APK文件(即版本9.7.0和版本9.7.1)的APK特征值,那么其对应的APKbase文件也就只有2个,那么针对不同的base文件生成增量差异的文件也就只有2个。
在实际应用中根据对浏览器的经验调查可知,APK文件的发行渠道数量接近1万,也就是如果有两个版本需要做增量升级时,则需要生成2万多个差异文件。采用本发明提供的文件增量升级方法以后,一个版本对应一个差异文件,其不再和渠道发行数量有关。因而如果有两个版本需要做增量升级时,只需要生成2个差异文件即可,如此能够在降低获取APK特征值计算量的同时,提高增量升级的效率。
示例2
以Android推广发行为例,如果使用传统方法对整个APK文件计算特征值,那么在一个版本有上百个渠道包时,如果要做增量升级,必须维护几百个增量的原文件,因而增量升级的后台维护的工作量是巨大的。
假设现有近3000个APK文件,同版本的渠道推广包和官网基础包只有4个文件是不一样的,因而将这4个文件的文件名就作为过滤条件。使用了本发明中描述的方法,排除固定的4个差异文件,各个渠道包和官网基础包的特征值计算出来都是一样的,增量升级时只需要维护一个增量原文件,差异的4个文件固定的当新增的文件做增量处理就能解决这个问题。
通过本发明提供的文件增量升级方法能够使增量升级的覆盖率从原来的不足10%左右提升到现在的接近70%。从效率方面来考虑,对整个文件求特征值计算的数据量在13M左右,对ZIP数据头信息求特征值计算数据量在300K左右,可以很大的提升特征值的计算效率。如果对一个50M的APK文件的所有数据做一次MD5计算,在中档的手机上需要2秒左右,而采用本发明提供的方法则大概在0.8秒左右,这无疑也能提高APK特征值的计算效率,进而提高增量升级的效率。
与上述方法相对应,本发明还提供一种文件增量升级系统。其中图3示出了根据本发明实施例的文件增量升级系统的第一逻辑结构。
如图3所示,本发明提供的文件增量升级系统300包括信息读取单元310、特征值获取单元320和增量升级单元330。
其中,信息读取单元310用于读取APK文件的ZIP数据信息,ZIP数据信息为ZIP数据头或者ZIP目录表。
具体地,由于ZIP数据头和ZIP目录表中都存储了类似的APK文件的原始信息,因此不管利用ZIP数据头还是利用ZIP目录表都能够准确计算出表示整个APK文件特性的特征值,因此在实际应用中,选择其一即可。
特征值获取单元320用于根据信息读取单元310所读取的ZIP数据信息获取APK文件的APK特征值。
另外,在根据所读取的ZIP数据信息获取APK文件的APK特征值之前,需要对上述APK文件进行判断,以确定其是否满足文件过滤条件。即本发明提供的文件增量升级系统还包括过滤单元340。图4示出了根据本发明实施例的文件增量升级系统的第二逻辑结构。如图4所示,本发明所提供的文件增量升级系统300进一步包括:过滤单元340用于根据信息读取单元310所读取的ZIP数据信息,对APK文件进行过滤以获取过滤的APK文件,根据过滤的APK文件的ZIP数据信息获取过滤的APK文件的APK特征值。其中,特征值获取单元320在根据信息读取单元所读取的ZIP数据信息获取APK文件的APK特征值的过程中,通过MD5或者SHA-1算法对信息读取单元310所读取的ZIP数据信息进行计算获取APK文件的APK特征值。
也就是说,在获取APK文件的APK特征值之前,需要对上述APK文件进行判断,以确定其是否满足文件过滤条件。即根据所读取的ZIP数据信息对上述APK文件进行过滤获取过滤的APK文件。其中,过滤单元340在对APK文件进行过滤以获取过滤的APK文件的过程中,如果未获取到过滤的APK文件,则通过MD5或者SHA-1算法对整个APK文件进行计算获取APK文件的APK特征值。
即:如果该APK文件满足文件过滤条件,则采用传统的方法对整个APK文件进行MD5或者SHA-1计算以得到该APK文件的APK特征值;如果该APK文件不满足文件过滤条件,则对所读取的ZIP数据信息进行MD5或者SHA-1计算以获取该APK文件的APK特征值,其中,不满足文件过滤条件的APK文件即为过滤的APK文件。
其中,过滤单元340在对APK文件进行过滤获取过滤的APK文件的过程中,根据信息读取单元310所读取的ZIP数据信息所包含的文件名对APK文件进行过滤获取过滤的APK文件。
增量升级单元330用于根据特征值获取单元所获取的APK特征值对与APK特征值对应的APKbase文件进行增量升级。
如上参照附图以示例的方式描述了根据本发明的文件增量升级方法及系统。但是,本领域技术人员应当理解,对于上述本发明所提出的文件增量升级方法及系统,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。