一种安卓软件升级的方法及系统与流程

文档序号:12119528阅读:451来源:国知局
一种安卓软件升级的方法及系统与流程

本发明涉及互联网技术领域,特别是涉及一种安卓软件升级的方法及系统。



背景技术:

随着互联网行业的不断发展,终端设备,尤其是移动终端设备的应用程序越来越多,版本不断更新,用户需要不断进行相应的应用软件升级才能保证软件的安全性和稳定性。现有技术中,主要采用增量升级的方式实现客户端上应用程序的升级。

在安卓(Android)系统中,增量升级的原理是通过将用户客户端已安装的应用程序的APK(Android Package Kit,安卓系统的安装包)与当前服务端该应用程序最新版本的APK做差分,得到差分包,即更新的部分。然后客户端通过网络仅请求下载该差分包,并将该差分包与当前客户端已安装的APK进行组合,即得到一个新版本的APK。一般来说,差分包较服务端上最新APK的大小要小很多,而差分升级,客户端仅下载差分包即可,而不需要将服务端上整个最新APK下载下来,因此可以很大程度上减少用户流量的损失。

但现有技术中,差分包的获取及差分包与APK的合并,主要采用基于bsdiff/bspatch的二进制差分合并解决方案实现,而该方案必须依赖于APK整体本身的MD5(Message Digest Algorithm5,摘要算法第5版)完全匹配,即需要对软件包整体进行MD5值强校验,如果安装后或者升级期间APK因某些原因存在有解压和再压缩的过程,虽然此时APK中的实际内容没有变化,但是重新压缩后的APK整体的MD5值却发生变化,这就会导致了bspatch在合并的过程中失败,最终导致升级失败。此外,对于文件改变比较小的升级,比如更换logo,采用上述技术方案,生成的二进制差分升级包体积还是会比较大,影响用户体验,且会增加服务器的负荷。



技术实现要素:

本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明的一个目的在于提出一种无需对软件包整体进行MD5强校验的安卓软件升级的方法。

根据本发明实施例的安卓软件升级的方法,包括:

服务端根据新版本软件包和旧版本软件包的MANIFEST.MF文件中文件条目的SHA1哈希值的差异生成差分升级包及配置文件,所述配置文件为所述差分升级包的索引信息;

客户端从所述服务端下载所述差分升级包和配置文件,根据所述配置文件对所述差分升级包和所述客户端已安装的所述旧版本软件包进行组合,以生成所述新版本软件包;

所述客户端安装所述新版本软件包。

根据本发明实施例的安卓软件升级的方法,由于差分升级包的差异推送来自旧版本软件包和新版本软件包中MANIFEST.MF文件中文件条目的SHA1哈希值的不同,即升级过程中是对APK的MF文件中文件条目的SHA1哈希值进行验证,无需对软件包整体本身的MD5值进行强校验,验证更精准,即使APK在升级的过程中存在有解压和再压缩的过程,此时APK中的实际内容没有变化,APK的MF文件中文件条目的SHA1哈希值也未发生变化,因此不会导致差分升级包与旧版本软件包的合并失败,且从文件角度生成差分升级包,对于文件改变比较小的升级,比如更换logo,生成的差分升级包的体积会更小,提升用户体验,减少服务器的负荷。可以理解的,还可以根据更新内容的大小进行选择性差分升级,如对改变较大的文件进行传统的二进制差分得到二进制差分包,而对于改动较小的文件,进行本发明提出的基于文件角度生成差分升级包,从而最大限度的减小差分升级包的大小。

另外,根据本发明上述实施例的安卓软件升级的方法,还可以具有如下附加的技术特征:

进一步地,在本发明的一个实施例中,所述客户端从所述服务端下载所述差分升级包和配置文件,根据所述配置文件对所述差分升级包和所述客户端已安装的所述旧版本软件包进行组合,以生成所述新版本软件包的步骤包括:

所述客户端从所述服务端下载所述差分升级包和配置文件,同时缓存所述客户端中已安装的所述旧版本软件包,获得所述旧版本软件包的副本;

所述客户端根据所述配置文件对所述差分升级包和所述旧版本软件包的副本进行组合,以生成所述新版本软件包。

进一步地,在本发明的一个实施例中,所述配置文件包括要删除的文件信息、要增加的文件信息和要更新的文件信息,

所述客户端根据所述配置文件对所述差分升级包和所述旧版本软件包的副本进行组合的步骤包括:

所述客户端根据所述要删除的文件信息,删除所述旧版本软件包的副本中需要删除的文件条目;

所述客户端根据所述要增加的文件信息从所述差分升级包获取要增加的文件条目,并将所述要增加的文件条目压缩进所述旧版本软件包的副本中;

所述客户端根据所述要更新的文件信息从所述差分升级包获取要更新的文件条目,并将所述要更新的文件条目与所述旧版本软件包的副本中的对应条目进行合并。

进一步地,在本发明的一个实施例中,所述配置文件还包括所述新版本软件包的META-INF签名信息,所述客户端根据所述配置文件对所述差分升级包和所述旧版本软件包的副本进行组合的步骤还包括:

所述客户端根据所述新版本软件包的META-INF签名信息,从所述差分升级包中获取所述新版本软件包的META-INF目录下的签名相关文件;

所述客户端将所述新版本软件包的META-INF目录下的签名相关文件压缩进所述旧版本软件包的副本中。

进一步地,在本发明的一个实施例中,所述客户端从所述服务端下载所述差分升级包和配置文件的步骤包括:

所述客户端启动已安装的所述旧版本软件包,并向所述服务端发起检测更新的请求,所述请求携带所述旧版本软件包的描述信息;

所述服务端检测是否存在差分升级包和配置文件;

若所述服务端存在差分升级包和配置文件,则所述客户端从所述服务端下载所述差分升级包和配置文件。

本发明的另一个目的在于提出一种无需对软件包整体进行MD5强校验的安卓软件升级的系统。

根据本发明实施例的安卓软件升级的系统,包括服务端和客户端,

所述服务端包括:

补丁生成模块,用于根据新版本软件包和旧版本软件包的MANIFEST.MF文件中文件条目的SHA1哈希值的差异生成差分升级包及配置文件,所述配置文件为所述差分升级包的索引信息;

所述客户端包括:

下载模块,用于从所述服务端下载所述差分升级包和配置文件;

组合模块,用于根据所述配置文件对所述差分升级包和所述客户端已安装的所述旧版本软件包进行组合,以生成所述新版本软件包;

安装模块,用于安装所述新版本软件包。

另外,根据本发明上述实施例的安卓软件升级的系统,还可以具有如下附加的技术特征:

进一步地,在本发明的一个实施例中,所述客户端还包括:

缓存模块,用于缓存所述客户端中已安装的所述旧版本软件包;

所述组合模块还用于根据所述配置文件对所述差分升级包和所述缓存模块缓存的所述旧版本软件包的副本进行组合,以生成所述新版本软件包。

进一步地,在本发明的一个实施例中,所述配置文件包括要删除的文件信息、要增加的文件信息和要更新的文件信息,

所述客户端还包括删除子模块、增加子模块和更新子模块;

所述删除子模块用于根据所述要删除的文件信息,删除所述缓存模块缓存的所述旧版本软件包的副本中需要删除的文件条目;

所述增加子模块用于根据所述要增加的文件信息从所述差分升级包获取要增加的文件条目,并将所述要增加的文件条目压缩进所述缓存模块缓存的所述旧版本软件包的副本中;

所述更新子模块用于根据所述要更新的文件信息从将所述差分升级包获取要更新的文件条目,并将所述要更新的文件条目与所述缓存模块缓存的所述旧版本软件包的副本中的对应条目进行合并。

进一步地,在本发明的一个实施例中,所述配置文件还包括所述新版本软件包的META-INF签名信息,所述客户端还包括签名信息压缩子模块,所述签名信息压缩子模块用于根据所述新版本软件包的META-INF签名信息,从所述差分升级包获取所述新版本软件包的META-INF目录下的签名相关文件,并将所述新版本软件包的META-INF目录下的签名相关文件压缩进所述缓存模块缓存的所述旧版本软件包的副本中。

进一步地,在本发明的一个实施例中,所述客户端还包括启动模块和更新请求模块,所述启动模块用于启动所述客户端已安装的所述旧版本软件包,所述更新请求模块用于向所述服务端发起检测更新的请求,所述请求携带所述旧版本软件包的描述信息;

所述服务端还包括检测模块,所述检测模块用于检测所述服务端是否存在差分升级包和配置文件,所述下载模块用于在所述检测模块检测到所述服务端存在差分升级包和配置文件时,对所述差分升级包和配置文件进行下载。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是根据本发明一实施例的安卓软件升级的方法的流程图;

图2是根据本发明另一实施例的安卓软件升级的方法的流程图;

图3是根据本发明另一实施例的安卓软件升级的系统的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明以安卓系统的终端设备作为实施例的环境对本发明进行详细描述,请参阅图1,本发明一实施例提出的安卓软件升级的方法,至少包括以下步骤:

S101,服务端根据新版本软件包和旧版本软件包的MANIFEST.MF文件中文件条目的SHA1哈希值的差异生成差分升级包及配置文件,所述配置文件为所述差分升级包的索引信息;

其中,该服务端为服务器,具体可以为云端服务器。软件包(即APK文件)中的MANIFEST.MF文件(简称MF文件),具体为META-INF(Meta-Information,元信息)目录下的MANIFEST.MF文件,MF文件代表了整个APK的文件指纹,其和加密数据一道构建了APK的完整签名,以保证软件的有效性。服务端根据旧版本软件包和新版本软件包的MF文件中列举出软件包中文件条目的SHA1(具体为base64-encoded SHA1)哈希值的差异生成差分升级包,具体可以对比新旧软件包的每个文件条目,从而实现从文件角度产生差分升级包。由于差分升级包的差异信息来自旧版本软件包和新版本软件包的MF文件中文件条目的SHA1哈希值的不同,即升级过程中是对APK的MF文件中文件条目的SHA1哈希值进行验证,无需对软件包整体本身的MD5值进行强校验。即使APK在升级的过程中存在有解压和再压缩的过程,此时APK中的实际内容没有变化,因此APK的MF文件中文件条目的SHA1哈希值也未发生变化,在后续的合并过程中,也不会导致合并失败。此外,该配置文件与所述差分升级包对应,具体表现为所述配置文件是所述差分升级包的索引信息,用于提示客户端进行相应的升级,具体可以为update.xml文件。该配置文件和该差分升级包以patch的文件形式存储在服务端中,即该patch中包含该差分升级包和该配置文件。

S102,客户端从所述服务端下载所述差分升级包和配置文件,根据所述配置文件对所述差分升级包和所述客户端已安装的所述旧版本软件包进行组合,以生成所述新版本软件包;

具体实现中,所述客户端可以为智能手机、智能电视、平板电脑或者智能可穿戴设备等,该客户端可以通过启动移动数据(如3G或4G)或者无线网络通信技术(如wifi)连接到所述服务端,且该客户端已经预先安装了旧版本软件包。客户端从所述服务端下载所述patch,再对该patch进行解压,以获得所述差分升级包和配置文件。客户端可以采用合成工具,如bspatch或KDiff3,对所述差分升级包与旧版本软件包中进行合并,从而得到所述新版本软件包。

S103,所述客户端安装所述新版本软件包。

具体实现中,通过调用客户端的系统API,进行更新覆盖安装。

此外,可以理解的,当一个软件有多个旧版本和一个新版本时,例如,一个软件具有A1,A2,A3共三个版本时,其中A3为最新版本,A1和A2相对于A3均为旧版本。服务器会对A1与A3之间的MF文件中文件条目的SHA1哈希值进行对比,得到A1与A3之间的差异生成差分升级包及配置文件,同样的方法得到A2和A3之间的差分升级包及配置文件,而客户端已经安装了特定的旧版本软件包,例如,客户端已经安装了A2版本的软件,此时,客户端可以根据A2版本的版本号或其它能够证明版本号的软件信息去服务器下载相应的差分升级包及配置文件,即下载A2和A3之间的差分升级包及配置文件。

根据本发明实施例的安卓软件升级的方法,由于差分升级包的差异信息来自旧版本软件包和新版本软件包的MF文件中文件条目的SHA1哈希值的不同,即升级过程中是对APK的MF文件中文件条目的SHA1哈希值进行验证,验证更精准,即使APK在升级的过程中存在有解压和再压缩的过程,此时APK中的实际内容没有变化,APK的MF文件中文件条目的SHA1哈希值也未发生变化,因此不会导致差分升级包与旧版本软件包的合并失败,且从文件角度生成差分升级包,对于文件改变比较小的升级,比如更换logo,生成的差分升级包的体积会更小,提升用户体验,减少服务器的负荷。可以理解的,还可以根据更新内容的大小进行选择性差分升级,如对改变较大的文件进行传统的二进制差分得到二进制差分包,而对于改动较小的文件,进行本发明提出的基于文件角度生成差分升级包,从而最大限度的减小差分升级包的大小。

请参阅图2,本发明另一实施例提出的安卓软件升级的方法,至少包括以下步骤:

S201,服务端根据新版本软件包和旧版本软件包的MANIFEST.MF文件中文件条目的SHA1哈希值的差异生成差分升级包及配置文件,所述配置文件为所述差分升级包的索引信息;

其中,其中,该服务端为服务器,具体可以为云端服务器。软件包(即APK文件)中的MANIFEST.MF文件(简称MF文件),具体为META-INF(Meta-Information,元信息)目录下的MANIFEST.MF文件,MF文件代表了整个APK的文件指纹,其和加密数据一道构建了APK的完整签名,以保证软件的有效性。服务端根据旧版本软件包和新版本软件包的MF文件中列举出软件包中文件条目的SHA1(具体为base64-encoded SHA1)哈希值的差异生成差分升级包,具体可以对比新旧软件包的每个文件条目,从而实现从文件角度产生差分升级包。由于差分升级包的差异信息来自旧版本软件包和新版本软件包的MF文件中文件条目的SHA1哈希值的不同,即升级过程中是对APK的MF文件中文件条目的SHA1哈希值进行验证,而非软件包整体的MD5验证。即使APK在升级的过程中存在有解压和再压缩的过程,此时APK中的实际内容没有变化,因此APK的MF文件中文件条目的SHA1哈希值也未发生变化,在后续的合并过程中,也不会导致合并失败。此外,该配置文件与所述差分升级包对应,具体表现为所述配置文件是所述差分升级包的索引信息,用于提示客户端进行相应的升级,具体可以为update.xml文件,所述配置文件包括删除的文件信息、要增加的文件信息、要更新的文件信息和所述新版本软件包的META-INF签名信息。该配置文件和该差分升级包以patch的文件形式存储在服务端中,即该patch中包含该差分升级包和该配置文件。

S202,所述客户端启动已安装的所述旧版本软件包,并向所述服务端发起检测更新的请求,所述请求携带所述旧版本软件包的描述信息;

其中,所述客户端可以为智能手机、智能电视、平板电脑或者智能可穿戴设备等,该客户端可以通过启动移动数据(如3G或4G)或者无线网络通信技术(如wifi)连接到所述服务端,且该客户端已经预先安装了旧版本软件包。所述客户端并向服务端发起检测更新的请求指该旧版本软件包通过网络向所述服务端发起软件更新请求,所述请求携带所述旧版本软件包的描述信息,包括产品Model ID、APK包名、APK版本号等。

S203,所述服务端检测是否存在差分升级包和配置文件;

S204,若所述服务端存在差分升级包和配置文件,则所述客户端从所述服务端下载所述差分升级包和配置文件,同时缓存所述客户端中已安装的所述旧版本软件包,获得所述旧版本软件包的副本;

其中,所述客户端从所述服务端下载所述patch,再对该patch进行解压,以获得所述差分升级包和配置文件。客户端缓存所述客户端中已安装的旧版本软件包是指客户端在缓存目录中缓存当前已安装的APK,以获得所述旧版本软件包的副本。此外,可以理解的,若服务端不存在差分升级包及配置文件,则表明软件包无更新,不再进行后续流程。

S205,所述客户端根据所述配置文件对所述差分升级包和所述旧版本软件包的副本进行组合,以生成所述新版本软件包;

其中,上述步骤具体包括:

所述客户端根据所述要删除的文件信息,删除所述旧版本软件包的副本中需要删除的文件条目;

所述客户端根据所述要增加的文件信息从所述差分升级包获取要增加的文件条目,并将所述要增加的文件条目压缩进所述旧版本软件包的副本中;

所述客户端根据所述要更新的文件信息从所述差分升级包获取要更新的文件条目,并将所述要更新的文件条目与所述旧版本软件包的副本中的对应条目进行合并;

其中,客户端可以采用合成工具,如bspatch或KDiff3,对所述要更新的文件条目与所述旧版本软件包的副本中的对应条目进行合并。

所述客户端根据所述新版本软件包的META-INF签名信息,从所述差分升级包中获取所述新版本软件包的META-INF目录下的签名相关文件,并将所述新版本软件包的META-INF目录下的签名相关文件压缩进所述旧版本软件包的副本中;

其中,META-INF签名信息为最新版本的软件包的META-INF签名信息,在升级过程中,只需将该最新版本的软件包的META-INF签名信息存入旧版本软件包中即可,从而简化升级过程。

S206,所述客户端安装所述新版本软件包;

具体实现中,通过调用客户端的系统API,进行更新覆盖安装。

本实施例提出的安卓软件升级的方法在上一实施例的基础上,对升级文件进行细化,对需要删除的内容,根据配置文件在缓存的旧版本软件包中之间进行删除,对需要增加的内容,根据配置文件从差分升级包提取后之间加入在缓存的旧版本软件包中,对于需要更新的内容,除了采用采用bspatch工具合并外,还可以通过设定更新内容预设值,在需要更新的内容小于该更新内容预设值时,之间通过替换的方式进行更新,从而进一步减少差分升级包的体积,简化升级过程。值得注意的是,以上所有升级内容都是基于本发明提出的根据旧版本软件包和新版本软件包中MF文件中文件条目的SHA1哈希值的不同生产差分升级包,即从文件角度生成差分升级包。

可以理解的,在实际应用中,本发明上述实施例提供的方法还可以作为现有技术(二进制差分升级)的一个补充,在APK整体的MD5值未发生变化时,可以选择只采用现有技术进行升级,在APK整体的MD5值发生变化时,采用本发明上述实施例提供的方法。

此外,本领域技术人员可以理解,本发明所提供的上述实施例提供的安卓软件升级的方法还可以结合OTA(Over-the-Air Technology,即空中下载技术),对/system/app以及预装/data/app下的APK进行差分升级。

请参阅图3,基于同一发明构思,本发明一实施例提出的安卓软件升级的系统,包括服务端和客户端,

其中,所述服务端包括:

补丁生成模块,用于根据新版本软件包和旧版本软件包的MANIFEST.MF文件中文件条目的SHA1哈希值的差异生成差分升级包及配置文件,所述配置文件为所述差分升级包的索引信息;

所述客户端包括:

下载模块,用于从所述服务端下载所述差分升级包和配置文件,

组合模块,用于根据所述配置文件对所述差分升级包和所述客户端已安装的所述旧版本软件包进行组合,以生成所述新版本软件包;

安装模块,用于安装所述新版本软件包。

本实施例中,所述客户端还包括:

缓存模块,用于缓存所述客户端中已安装的所述旧版本软件包,获得所述旧版本软件包的副本;

所述组合模块还用于根据所述配置文件对所述差分升级包和所述缓存模块缓存的所述旧版本软件包的副本进行组合,以生成所述新版本软件包。

本实施例中,所述配置文件包括要删除的文件信息、要增加的文件信息和要更新的文件信息,

所述组合模块包括删除子模块、增加子模块和更新子模块;

所述删除子模块用于根据所述要删除的文件信息,删除所述缓存模块缓存的所述旧版本软件包的副本中需要删除的文件条目;

所述增加子模块用于根据所述要增加的文件信息从所述差分升级包获取要增加的文件条目,并将所述要增加的文件条目压缩进所述缓存模块缓存的所述旧版本软件包的副本中;

所述更新子模块用于根据所述要更新的文件信息从将所述差分升级包获取要更新的文件条目,并将所述要更新的文件条目与所述缓存模块缓存的所述旧版本软件包的副本中的对应条目进行合并。

本实施例中,所述配置文件还包括所述新版本软件包的META-INF签名信息,所述组合模块还包括签名信息压缩子模块,所述签名信息压缩子模块用于根据所述新版本软件包的META-INF签名信息,从所述差分升级包获取所述新版本软件包的META-INF目录下的签名相关文件,并将所述新版本软件包的META-INF目录下的签名相关文件压缩进所述缓存模块缓存的所述旧版本软件包的副本中。

本实施例中,所述客户端还包括启动模块和更新请求模块,所述启动模块用于启动所述客户端已安装的所述旧版本软件包,所述更新请求模块用于向所述服务端发起检测更新的请求,所述请求携带所述旧版本软件包的描述信息;

所述服务端还包括检测模块,所述检测模块用于检测所述服务端是否存在差分升级包和配置文件,所述下载模块用于在所述检测模块检测到所述服务端存在差分升级包和配置文件时,对所述差分升级包和配置文件进行下载。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。

计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

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