一种应用程序的更新方法和装置制造方法

文档序号:6525049阅读:250来源:国知局
一种应用程序的更新方法和装置制造方法
【专利摘要】本发明公开了一种应用程序的更新方法和装置,所述方法包括:分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件;生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件;发布所述更新差异文件;所述更新差异文件包括下载地址;生成配置文件;所述配置文件包括所述第二版本的版本信息和所述更新差异文件的下载地址;发布所述配置文件。本发明防止客户端盲目访问服务器请求更新服务,减少了服务器的应答次数,降低了服务器的资源耗费,同时,采用数据差异制作的更新差异文件相比完整的版本更新数据包的体积大大减少了,大大降低了网络带宽资源,提高了下载的成功率,提高了更新的成功率。
【专利说明】一种应用程序的更新方法和装置
【技术领域】
[0001]本发明涉及电通信技术的领域,具体涉及一种应用程序的更新方法和一种应用程序的更新装置。
【背景技术】
[0002]当应用程序存在缺陷或者需要添加某些功能时,都需要对客户端上的应用程序进行版本升级。
[0003]目前升级客户端的应用程序的方法大致分为以下两种:
[0004]一种方法是服务器将新版本的应用程序中包含的所有组成文件做成单个安装程序供客户端下载安装。客户端在与服务器下载并运行安装程序,利用新版本应用程序中的所有组成文件对客户端的旧版本应用程序中的所有组成文件进行替换。
[0005]这种方法会导致重复进行安装操作,更新步骤繁杂并且没有实际意义,更新时间很长,用户体验很低。安装程序一般很大,会极大地浪费网络带宽资源,并且容易出现下载失败的情形,导致更新的成功率将低。随着应用程序功能的不断增强,应用程序升级给服务器带来的下载压力也越来越大。
[0006]另一种方法是服务器将新版本的应用程序中某些基础的组成文件提供客户端下载。客户端从服务器端下载相应组成文件,并将其保存在临时目录中,再将下载的组成文件替换到客户端的应用程序中。
[0007]这种方法制约性很大,无法对应用程序进行完整的更新,可能会导致应用程序的组成文件功能不一致而导致崩溃。基础的组成文件一般也很大,也会浪费网络带宽资源,并且容易出现下载失败的情形,导致更新的成功率将低。随着应用程序功能的不断增强,基础的组成文件的更新给服务器带来的下载压力也越来越大。

【发明内容】

[0008]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用程序的更新方法和相应的一种应用程序的更新装置。
[0009]依据本发明的一个方面,提供了一种应用程序的更新方法,包括:
[0010]分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件;
[0011]生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件;
[0012]发布所述更新差异文件;所述更新差异文件包括下载地址;
[0013]生成配置文件;所述配置文件包括所述第二版本的版本信息和所述更新差异文件的下载地址;
[0014]发布所述配置文件。
[0015]可选地,所述一个或多个第一文件为将所有文件按照所述第一版本的应用程序的结构目录打包生成的一个或多个第一文件;[0016]所述一个或多个第二文件为将所有文件按照第二版本的应用程序按照结构目录打包生成的一个或多个第二文件;
[0017]所述第一版本的版本信息高于所述第二版本的版本信息。
[0018]可选地,所述一个或多个第一文件包括第一基础组件文件和/或第一扩展组件文件;
[0019]所述一个或多个第一文件通过以下方式生成:
[0020]将第一版本的应用程序的基础组件按照结构目录打包为第一基础组件文件;
[0021]将第一版本的应用程序的扩展组件按照结构目录打包为第一扩展组件文件。
[0022]可选地,所述一个或多个第二文件包括第二基础组件文件和/或第二扩展组件文件;
[0023]所述一个或多个第二文件通过以下方式生成:
[0024]将第二版本的应用程序的基础组件按照结构目录打包为第二基础组件文件;
[0025]将第二版本的应用程序的扩展组件按照结构目录打包为第二扩展组件文件。
[0026]可选地,所述生成所述一个或多个第一文件与对应的一个或多个第二文件的差异文件的步骤包括:
[0027]采用差异算法Courgette计算所述第一基础组件文件和所述第二基础组件文件的基础组件差异文件;
[0028]采用差异算法Courgette计算所述第一扩展组件文件和所述第二扩展组件文件的扩展组件差异文件;
[0029]将所述基础组件差异文件和/或所述扩展组件差异文件压缩为版本更新包;
[0030]将所述版本更新包压缩为更新差异文件。
[0031]根据本发明的另一方面,提供了一种应用程序的更新方法,包括:
[0032]从服务器侧获取配置文件;所述配置文件包括第二版本的版本信息和更新差异文件的下载地址;
[0033]当客户端的版本信息为所述第二版本的版本信息时,从所述下载地址下载所述更新差异文件;
[0034]采用预置的一个或多个第三文件和所述更新差异文件生成更新文件;
[0035]对所述更新文件进行解压;
[0036]安装解压后的更新文件。
[0037]可选地,所述一个或多个第三文件包括第三基础组件文件和/或第三扩展组件文件;所述更新文件包括基础组件更新包和/或扩展组件更新包;所述更新文件包括基础组件更新包和/或扩展组件更新包;
[0038]所述采用预置的一个或多个第三文件和所述更新差异文件生成更新文件的步骤包括:
[0039]解压所述更新差异文件,获得版本更新包;
[0040]解压所述版本更新包,获得基础组件差异文件和/或扩展组件差异文件;
[0041]采用差异算法Courgette将所述第三基础组件文件和所述基础组件差异文件生成基础组件更新包;
[0042]采用差异算法Courgette将所述第三扩展组件文件和所述扩展组件差异文件生成扩展组件更新包。
[0043]根据本发明的另一方面,提供了一种应用程序的更新方法,包括:
[0044]生成第一文件与第二文件的更新差异文件;其中,所述第一文件为第一版本的应用程序的组成文件,所述第二文件为第二版本的应用程序的组成文件;
[0045]发布所述更新差异文件;所述更新差异文件包括下载地址;
[0046]生成配置文件;所述配置文件包括所述组成文件的版本信息和所述更新差异文件的下载地址;
[0047]发布所述配置文件。
[0048]可选地,所述第一版本的版本信息高于所述第二版本的版本信息。
[0049]可选地,所述生成第一文件与第二文件的更新差异文件的步骤包括:
[0050]采用差异算法Courgette计算第一文件和第二文件的数据差异文件;
[0051]将所述数据差异文件压缩为文件更新包;
[0052]将所述文件更新包压缩为更新差异文件。
[0053]根据本发明的另一方面,提供了一种应用程序的更新方法,包括:
[0054]从服务器侧获取配置文件;所述配置文件包括组成文件的版本信息和更新差异文件的下载地址;
[0055]当预置的第三文件的版本信息为所述组成文件的版本信息时,从所述下载地址下载所述更新差异文件;
[0056]采用所述第三文件和所述更新差异文件生成更新文件;
[0057]将所述更新文件替换所述第三文件。
[0058]可选地,所述采用所述第三文件和所述更新差异文件生成更新文件的步骤包括:
[0059]解压所述更新差异文件,获得文件更新包;
[0060]解压所述文件更新包,获得数据差异文件;
[0061]采用差异算法Courgette将所述第三文件和所述数据差异文件生成更新文件。
[0062]根据本发明的另一方面,提供了一种应用程序的更新装置,包括:
[0063]第一获取模块,适于分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件;
[0064]第一生成模块,适于生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件;
[0065]第一发布模块,适于发布所述更新差异文件;所述更新差异文件包括下载地址;
[0066]第二生成模块,适于生成配置文件;所述配置文件包括所述第二版本的版本信息和所述更新差异文件的下载地址;
[0067]第二发布模块,适于发布所述配置文件。
[0068]可选地,所述一个或多个第一文件为将所有文件按照所述第一版本的应用程序的结构目录打包生成的一个或多个第一文件;
[0069]所述一个或多个第二文件为将所有文件按照第二版本的应用程序按照结构目录打包生成的一个或多个第二文件;
[0070]所述第一版本的版本信息高于所述第二版本的版本信息。
[0071]可选地,所述一个或多个第一文件包括第一基础组件文件和/或第一扩展组件文件;
[0072]所述一个或多个第一文件通过以下方式生成:
[0073]将第一版本的应用程序的基础组件按照结构目录打包为第一基础组件文件;
[0074]将第一版本的应用程序的扩展组件按照结构目录打包为第一扩展组件文件。
[0075]可选地,所述一个或多个第二文件包括第二基础组件文件和/或第二扩展组件文件;
[0076]所述一个或多个第二文件通过以下方式生成:
[0077]将第二版本的应用程序的基础组件按照结构目录打包为第二基础组件文件;
[0078]将第二版本的应用程序的扩展组件按照结构目录打包为第二扩展组件文件。
[0079]可选地,所述第一生成模块还适于:
[0080]采用差异算法Courgette计算所述第一基础组件文件和所述第二基础组件文件的基础组件差异文件;
[0081]采用差异算法Courgette计算所述第一扩展组件文件和所述第二扩展组件文件的扩展组件差异文件;
[0082]将所述基础组件差异文件和/或所述扩展组件差异文件压缩为版本更新包;
[0083]将所述版本更新包压缩为更新差异文件。
[0084]根据本发明的另一方面,提供了一种应用程序的更新装置,包括:
[0085]第二获取模块,适于从服务器侧获取配置文件;所述配置文件包括第二版本的版本信息和更新差异文件的下载地址;
[0086]第一下载模块,适于在客户端的版本信息为所述第二版本的版本信息时,从所述下载地址下载所述更新差异文件;
[0087]第三生成模块,适于采用预置的一个或多个第三文件和所述更新差异文件生成更新文件;
[0088]解压模块,适于对所述更新文件进行解压;
[0089]安装模块,适于安装解压后的更新文件。
[0090]可选地,所述一个或多个第三文件包括第三基础组件文件和/或第三扩展组件文件;所述更新文件包括基础组件更新包和/或扩展组件更新包;所述更新文件包括基础组件更新包和/或扩展组件更新包;
[0091]所述第三生成模块还适于:
[0092]解压所述更新差异文件,获得版本更新包;
[0093]解压所述版本更新包,获得基础组件差异文件和/或扩展组件差异文件;
[0094]采用差异算法Courgette将所述第三基础组件文件和所述基础组件差异文件生成基础组件更新包;
[0095]采用差异算法Courgette将所述第三扩展组件文件和所述扩展组件差异文件生成扩展组件更新包。
[0096]根据本发明的另一方面,提供了一种应用程序的更新装置,包括:
[0097]第四生成模块,适于生成第一文件与第二文件的更新差异文件;其中,所述第一文件为第一版本的应用程序的组成文件,所述第二文件为第二版本的应用程序的组成文件;
[0098]第三发布模块,适于发布所述更新差异文件;所述更新差异文件包括下载地址;[0099]第五生成模块,适于生成配置文件;所述配置文件包括所述组成文件的版本信息和所述更新差异文件的下载地址;
[0100]第四发布模块,适于发布所述配置文件。
[0101]可选地,所述第一版本的版本信息高于所述第二版本的版本信息。
[0102]可选地,所述第四生成模块还适于:
[0103]采用差异算法Courgette计算第一文件和第二文件的数据差异文件;
[0104]将所述数据差异文件压缩为文件更新包;
[0105]将所述文件更新包压缩为更新差异文件。
[0106]根据本发明的另一方面,提供了一种应用程序的更新装置,包括:
[0107]第三获取模块,适于从服务器侧获取配置文件;所述配置文件包括组成文件的版本信息和更新差异文件的下载地址;
[0108]第二下载模块,适于在预置的第三文件的版本信息为所述组成文件的版本信息时,从所述下载地址下载所述更新差异文件;
[0109]第六生成模块,适于采用所述第三文件和所述更新差异文件生成更新文件;
[0110]替换模块,适于将所述更新文件替换所述第三文件。
[0111]可选地,所述第六生成模块还适于:
[0112]解压所述更新差异文件,获得文件更新包;
[0113]解压所述文件更新包,获得数据差异文件;
[0114]采用差异算法Courgette将所述第三文件和所述数据差异文件生成更新文件。
[0115]本发明在服务器计算出新版本和旧版本的应用程序之间的数据差异制作更新差异文件,并制作配置文件进行发布,客户端下载配置文件检查是否满足更新条件,当满足时才下载更新差异文件进行更新,防止客户端盲目访问服务器请求更新服务,减少了服务器的应答次数,降低了服务器的资源耗费,同时,采用数据差异制作的更新差异文件相比完整的版本更新数据包的体积大大减少了,大大降低了网络带宽资源,提高了下载的成功率,提高了更新的成功率。进一步地,服务器可以增加更新的速度和频率,使得应用程序的功能更加完善,提闻了用户体验。
[0116]本发明基于基础组件和扩展组件进行打包,采用差异算法Courgette计算新版本和旧版本的应用程序的基础组件和扩展组件的数据差异制作更新差异文件,使得客户端可以双线程进行新版本的基础组件和扩展组件的组合,在不影响客户端性能的前提下,双线程大大加快了组合速度,进而提高了整个更新速度。
[0117]本发明在服务器计算出新版本和旧版本的应用程序的组成文件之间的数据差异制作更新差异文件,并制作配置文件进行发布,客户端下载配置文件检查是否满足更新条件,当满足时才下载更新差异文件进行更新,防止客户端盲目访问服务器请求更新服务,减少了服务器的应答次数,降低了服务器的资源耗费,同时,采用数据差异制作的更新差异文件相比完整的组成文件新数据包的体积大大减少了,大大降低了网络带宽资源,提高了下载的成功率,提高了更新的成功率。
[0118]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。【专利附图】

【附图说明】
[0119]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0120]图1示出了根据本发明一个实施例的一种应用程序的更新方法实施例1的步骤流程图;
[0121]图2示出了根据本发明一个实施例的一种应用程序的更新方法实施例2的步骤流程图;
[0122]图3示出了根据本发明一个实施例的一种应用程序的更新方法实施例3的步骤流程图;
[0123]图4示出了根据本发明一个实施例的一种应用程序的更新方法实施例4的步骤流程图;
[0124]图5示出了根据本发明一个实施例的一种应用程序的更新装置实施例1的结构框图;
[0125]图6示出了根据本发明一个实施例的一种应用程序的更新装置实施例2的结构框图;
[0126]图7示出了根据本发明一个实施例的一种应用程序的更新装置实施例3的结构框图;以及,
[0127]图8示出了根据本发明一个实施例的一种应用程序的更新装置实施例4的结构框图。
【具体实施方式】
[0128]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0129]参照图1,示出了根据本发明一个实施例的一种应用程序的更新方法实施例1的步骤流程图,所述方法可以包括如下步骤:
[0130]步骤101,分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件;
[0131]在本发明实施例中,第一文件和第二文件可以为预先生成的文件,直接提取即可;第一文件和第二文件也可以是当前生成的。
[0132]为使本领域技术人员更好地理解本发明实施例,在本说明书中,将浏览器作为应用程序的一种示例进行说明。
[0133]在本发明的一种优选实施例中,所述一个或多个第一文件可以为将所有文件按照所述第一版本的应用程序的结构目录打包生成的一个或多个第一文件;
[0134]在实际应用中,由于一个应用程序(例如浏览器)的组成文件通常都是几十个、甚至上百个。若升级一个版本的应用程序需要对每个组成文件都配置升级,会造成升级十分之复杂,因此应用程序(例如浏览器)的所有文件必须按照目录结构打成一个压缩包或多个压缩包。这些压缩包都仅仅是把文件打包,不使用任何压缩算法,以便于进行增量计算。
[0135]作为本发明实施例的一种优选示例,所述一个或多个第一文件可以包括第一基础组件文件和/或第一扩展组件文件;
[0136]在具体实现中,所述一个或多个第一文件可以通过以下方式生成:
[0137]子步骤S11,将第一版本的应用程序的基础组件按照结构目录打包为第一基础组件文件;
[0138]子步骤S12,将第一版本的应用程序的扩展组件按照结构目录打包为第一扩展组件文件。
[0139]一个应用程序可以有很多个文件组成,其中大部分都是些扩展插件以及其他一些小程序。基础组件可以为实现应用程序的基础部分功能的文件,例如浏览器中的渲染功能等等,扩展组件可以为实现应用程序的扩展部分功能的文件,例如浏览器中的手势操作功能、搜索插件等等。
[0140]需要说明的是 ,不同应用程序在不同需求下,基础部分功能和扩展部分功能可以是不同的,本发明实施例可以指定应用程序中任意的文件为基础组件或者扩展组件,例如可以将上述浏览器的手势操作功能归入基础组件。
[0141]应用程序的结构目录可以为安装后的结构化的目录文件,基础组件和扩展组件可以具有指定的存放目录,该存放目录可以为根目录,可以为二级目录等等。
[0142]在本发明的一种优选实施例中,所述一个或多个第二文件可以为所有文件按照第二版本的应用程序按照结构目录打包生成的一个或多个第二文件;
[0143]其中,所述第一版本的版本信息可以高于所述第二版本的版本信息。
[0144]则在本示例中,第一版本的应用程序可以为新版本的应用程序,第二版本的应用程序可以为旧版本的应用程序,应用程序进行了比较大范围的更新,需要对整个版本的应用程序进行更新。
[0145]需要说明的是,第二版本的应用程序的结构目录与第一版本的应用程序的结构目录可以是相对应的。
[0146]作为本发明实施例的一种优选示例,所述一个或多个第二文件可以包括第二基础组件文件和/或第二扩展组件文件;
[0147]在具体实现中,所述一个或多个第二文件可以通过以下方式生成:
[0148]子步骤S21,将第二版本的应用程序的基础组件按照结构目录打包为第二基础组件文件;
[0149]子步骤S22,将第二版本的应用程序的扩展组件按照结构目录打包为第二扩展组件文件。
[0150]需要说明的是,第二基础组件文件和第二扩展组件文件的应用与第一基础组件文件和第一扩展组件文件的应用基本是相同的,相关之处可以参照第一基础组件文件和第一扩展组件文件的相关说明,本发明实施例在此不加以详述。
[0151]此外,在客户端性能允许的前提下,本发明实施例亦可以将应用程序按照功能划分为三个、四个等多个组件进行打包,然后计算新旧版本的数据差异制作差异更新文件,本发明实施例对此不加以限制。[0152]步骤102,生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件;
[0153]更新差异文件可以为第一文件与第二文件存在差异的数据所生成的文件。
[0154]在本发明的一种优选实施中,所述步骤102可以包括如下子步骤:
[0155]子步骤S31,采用差异算法Courgette计算所述第一基础组件文件和所述第二基础组件文件的基础组件差异文件;
[0156]子步骤S32,采用差异算法Courgette计算所述第一扩展组件文件和所述第二扩展组件文件的扩展组件差异文件;
[0157]差异算法Courgette是构建在一个开源代码bsdiff和bspatch基础上的,可以用于针对两个不同版本(旧版本和新版本)的二进制文件(Binary File),寻找其中区别,生成补丁文件;另外根据这个补丁文件加上旧版本的二进制文件生成新版本的二进制文件。
[0158]需要说明的是,第一基础组件文件和第二基础组件文件,以及,第一扩展组件文件和第二扩展组件文件中可以包括二进制文件,也可以包括非二进制文件。对于二进制文件,差异算法Courgette可以先进行反汇编,然后再采用bsdiff进行差异文件的计算。对于非二进制文件,差异算法Courgette可以直接采用bsdiff进行差异文件的计算。
[0159]对于编译后的应用程序而言,即使改变了很小的源代码,也会导致不成比例的大量二进制级别的变化。如果添加几行代码,比如,一个范围的检查来防止缓存溢出,后面所有的代码都会被移动来容纳新的指令。一些指令和数据经常是另外的指令和数据的地址,所以编译后的代码到处都是内部引用。但是在这些内部指针改变之前,仅仅是少数的几行代码的变动,而且是大量的内部指针,诸如浏览器主DLL(Dynamic Link Library,动态链接库)大小的程序,内部指针的数量大概有50万个。
[0160]而源代码则没有上述问题,因为源代码所有的元素是符号化的。在编译和链接的过程中,函数是在后面的阶段被转化(commite)成指定地址的。
[0161]差异算法Courgette可以用了一个原始的分解器(disassembler)来找到内部指针。分解器把程序分割成3部分:一个内部指针目的地址的列表;其他的字节和一个指令(Instruction)序列来决定普通的字节和指针通过调整和穿插来回到原来的输入。则可以将此称为“分解的语言”(assemblylanguage),因为可以使用一个分解器来处理这些指令和发布这个字节序列来恢复到原始的文件。
[0162]非指针的部分大概占了原来应用程序的80%,因为没有混合任何的指针,比较起来效果更好一些,差异包的大小和源代码的改变成线性关系。简单的使用分解的语言比较出来的版本更新包大概比原来的小30%。
[0163]差异算法Courgette引进标签来标识地址,使得指针可以被控制。这些地址被存在数组里面,而指针列表会被数组的下标列表所代替。这个数据是一个原始的符号表,这些符号的名字,或者标签其实是整型的数组下标。利用符号表,使得差异算法Courgette如何表达应用程序有一定的自由度。通过改变相应的列表索引,使得差异算法Courgette可以移动数组周围的地址。
[0164]差异算法Courgette把程序转换成原始的assemblylanguage,然后在assembly的级别上比较出差异:
[0165]Server:[0166]asm_old=disassemble(original)
[0167]asm_new=disassemble(update)
[0168]asm_new_adjusted=adjust(asm_new, asm_old)
[0169]asm_diff=bsdiff(asm_old, asm_new_adjusted)
[0170]transmit asm_diff
[0171]差异算法Courgette通过移动asm_new内符号表的地址(asm_new_adjusted=adjust (asm_new, asm_old)),使得版本更新文件的最小化。两个符号表中的地址是匹配的,在它们的统计属性上保证索引列表拥有很多公共的字串。根据周围的代码或者调试信息,对齐的地址不使用任何的探索法来进行匹配。
[0172]旧版的应用程序和新版的应用程序必须是一个良好的可执行文件。如果旧版的应用程序和新版的应用程序可以包含几个可执行文件,也可以包含非编译的文件如JavaScript和PNG图片,将会更加有用。对于浏览器而言,旧版的应用程序和新版的应用程序是一种存档文件,可以包含所有安装和运行需要的文件。
[0173]差异算法Courgette把输入转换成另外一种更有效的二进制差异的形式,在转换空间中做差分压缩,并通过相反的转换来从原始文件中获取打了补丁后的输出。通过差异算法Courgette的转换方式之后,可以获得一个更小的升级包。
[0174]子步骤S33,将所述基础组件差异文件和/或所述扩展组件差异文件压缩为版本更新包;
[0175]在为进一步减少网络流量的占用,可以对基础组件差异文件和/或扩展组件差异文件进行压缩打包,版本更新包具体可以为7z压缩格式的压缩包。
[0176]子步骤S34,将所述版本更新包压缩为更新差异文件。
[0177]为了便于发布和进一步减少网络流量的占用,把要发布的版本更新包压缩成更新差异文件,具体可以为CAB文件,同时便于客户端可以马上解压处理。
[0178]CAB为Microsoft制订的压缩包格式,常用于应用程序的安装程序,使用Windows自带的实用程序Extract, exe可以对其解压缩,WinZip、WinRAR、WinMount等都支持这种格式。
[0179]步骤103,发布所述更新差异文件;所述更新差异文件可以包括下载地址;
[0180]将更新差异文件上传到服务器中指定的位置进行发布,对外网具有一个下载地址。
[0181]步骤104,生成配置文件;所述配置文件可以包括所述第二版本的版本信息和所述更新差异文件的下载地址;
[0182]配置文件config.1ni可以具有指示第二版本(旧版本)的版本信息和下载地址之外,还可以具有用于标识配置文件的名称信息,用于安全性校验的校验信息,例如MD5(Message Digest Algorithm,消息摘要算法第五版),第一版本(新版本)的版本信息等等,本发明实施例对此不加以限制。
[0183]步骤105,发布所述配置文件。
[0184]将配置文件config.1ni上传到服务器中指定的位置进行发布,使得客户端可以下载配置文件config.1ni进行更新。
[0185]需要说明的是,前最新版本的应用程序可以为一个,但是客户端有可能不会在每次应用程序的版本更新后都会进行更新,因此客户端的应用程序版本可以存在多个,则进行更新的更新差异文件可以为多个,而配置文件可以为一个,即配置文件中包括旧版本的应用程序(可以为部分,也可以为全部)的版本信息,以及,对应的更新文件的下载地址。当然,配置文件也可以为多个,即一个配置文件只包括一个旧版本的应用程序的版本信息以及对应的更新文件的下载地址。
[0186]参照图2,示出了根据本发明一个实施例的一种应用程序的更新方法实施例2的步骤流程图,所述方法可以包括如下步骤:
[0187]步骤201,从服务器侧获取配置文件;所述配置文件包括第二版本的版本信息和更新差异文件的下载地址;
[0188]应用本发明实施例,客户端(可以为应用程序)可以在预设的时间(例如每天早上6点、每周六的6点等等),也可以间隔预设的时间段(例如每6小时、8小时等等)主动从服务器下载配置文件。
[0189]服务器也可以主动在预设的时间(例如每天早上6点、每周六的6点等等),或者间隔预设的时间段(例如每6小时、8小时等等)主动向客户端推送配置文件。
[0190]服务器还可以在应用程序更新后主动从客户端中采集版本信息,向客户端推送该版本信息进行更新对应的配置文件。客户端为了保证用户的隐私权和知情权,在服务器得到授权后可以采集该客户端上的应用程序的版本信息。进一步地,可以先检查该客户端的用户是否加入了指定计划,如果是,则确认该客户端用户对服务器的应用程序的版本信息采集进行了授权,服务器可以继续执行采集流程,如果该客户端的用户没有加入执行计划,则确认该客户端用户未对服务器端的应用程序的版本信息采集进行授权,服务器端不可以获取该客户端上的应用程序的版本信息。
[0191]步骤202,当客户端的版本信息为所述第二版本的版本信息时,从所述下载地址下载所述更新差异文件;
[0192]客户端可以逐项检查配置文件config.1ni中的信息,当客户端的版本信息与配置文件config.1ni中的第二版本的版本信息相同时,访问对应的下载地址从服务器中下载更新差异文件。
[0193]步骤203,采用预置的一个或多个第三文件和所述更新差异文件生成更新文件;
[0194]在本发明的一种优选实施例中,所述一个或多个第三文件可以为将所有文件按照所述第二版本的应用程序的结构目录打包生成的一个或多个第一文件。第三文件可以为客户端上一次更新之后留下的更新文件,可以为客户端预先生成的文件,还可以是客户端当前生成的。
[0195]作为本发明实施例的一种优选示例,所述一个或多个第三文件可以包括第三基础组件文件和/或第三扩展组件文件;
[0196]在具体实现中,若第三文件为客户端预先生成的或者在当前生成的,则所述一个或多个第一文件可以通过以下方式生成:
[0197]子步骤S31,将第二版本的应用程序的基础组件按照结构目录打包为第三基础组件文件;
[0198]子步骤S32,将第二版本的应用程序的扩展组件按照结构目录打包为第三扩展组件文件。[0199]需要说明的是,第三基础组件文件和第三扩展组件文件的应用与第一基础组件文件和第一扩展组件文件的应用基本是相同的,相关之处可以参照第一基础组件文件和第一扩展组件文件的相关说明,本发明实施例在此不加以详述。
[0200]在发明实施例中,所述更新文件可以包括基础组件更新包和/或扩展组件更新包;所述更新文件可以包括基础组件更新包和/或扩展组件更新包;
[0201 ] 则所述步骤203可以包括如下子步骤:
[0202]子步骤S41,解压所述更新差异文件,获得版本更新包;
[0203]当更新差异文件为CAB文件时,可以采用Extract, exe、WinZip、WinRAR或者WinMount对其解压。
[0204]子步骤S42,解压所述版本更新包,获得基础组件差异文件和/或扩展组件差异文件;
[0205]当对版本更新包进一步解压,可以获得差异文件和/或扩展组件差异文件。当版本更新包可以为7z压缩格式的压缩包时,可以采用对应的解压算法进行解压。
[0206]子步骤S43,采用差异算法Courgette将所述第三基础组件文件和所述基础组件差异文件生成基础组件更新包;
[0207]子步骤S44,采用差异算法Courgette将所述第三扩展组件文件和所述扩展组件差异文件生成扩展组件更新包。
[0208]在具体实现中,可以通过以下流程进行基础组件更新包和/或扩展组件更新包的组合。
[0209]Client:
[0210]receive asm_diff
[0211]asm_old=disassemble(original)
[0212]asm_new_adjusted=bspatch(asm_old, asm_diff)
[0213]update=assemble(asm_new_adjusted)
[0214]在采用差异算法Courgette计算出来的基础组件更新包实质上可以与新版本的应用程序的基础组件文件的打包文件(例如第一基础组件文件)相同,扩展组件更新包实质上可以与新版本的应用程序的扩展组件文件的打包文件(例如第一扩展组件文件)相同。
[0215]对于二进制文件,差异算法Courgette可以采用bsdiff进行差异文件的组合,再进行反汇编的对应操作。对于非二进制文件,差异算法Courgette可以直接采用bsdiff进行差异文件的组合。
[0216]需要说明的是,由于方法实施例2中差异算法Courgette的组合操作,可以与方法实施例1中差异算法Courgette的分解操作严格相反的,相关之处可以参照方法实施例1中差异算法Courgette的分解操作的部分说明即可,本发明实施例在此不加以详述。
[0217]本发明基于基础组件和扩展组件进行打包,采用差异算法Courgette计算新版本和旧版本的应用程序的基础组件和扩展组件的数据差异制作更新差异文件,使得客户端可以双线程进行新版本的基础组件和扩展组件的组合,在不影响客户端性能的前提下,双线程大大加快了组合速度,进而提高了整个更新速度。
[0218]步骤203,对所述更新文件进行解压;
[0219]解压后的更新文件可以为新版本的应用程序。[0220]步骤204,安装解压后的更新文件。
[0221]在本发明实施例中,客户端可以将基础组件更新包和/或扩展组件更新包安装到指定的位置即可完成应用程序的更新。
[0222]需要说明的是,客户端在安装完基础组件更新包和/或扩展组件更新包后,可以包括基础组件更新包和/或扩展组件,以备下次更新,即作为第三基础组件文件和/或第三扩展组件文件。
[0223]本发明在服务器计算出新版本和旧版本的应用程序之间的数据差异制作更新差异文件,并制作配置文件进行发布,客户端下载配置文件检查是否满足更新条件,当满足时才下载更新差异文件进行更新,防止客户端盲目访问服务器请求更新服务,减少了服务器的应答次数,降低了服务器的资源耗费,同时,采用数据差异制作的更新差异文件相比完整的版本更新数据包的体积大大减少了,大大降低了网络带宽资源,提高了下载的成功率,提高了更新的成功率。进一步地,服务器可以增加更新的速度和频率,使得应用程序的功能更加完善,提闻了用户体验。
[0224]为了方便本领域技术人员更好地理解本发明,以下通过一个浏览器的更新示例更进一步说明本发明实施例的应用程序更新过程:
[0225]在服务器侧:
[0226]1、按照结构目录打包浏览器的基础组件为Chrome, core.7z ;
[0227]按照结构目录打包浏览器的扩展组件为ChiOme.ext.7z ;
[0228]Chrome, core.7z打包了所有的浏览器核心文件,这个包解压出来之后浏览器即可运行。大致文件如下:
[0229]360se.exe (执行文件)
[0230]6.5.1.134 (版本目录文件)
[0231]Chrome, dll
[0232]gcswf32.dll
[0233]...[0234]Chrome, ext.7z打包了所有的浏览器扩展文件,这个包里面的文件通常用得不多。大致文件如下:
[0235]6.5.1.134 (版本目录文件)
[0236]pdf.dll
[0237]...[0238]2、计算新版本和旧版本的浏览器的Chrome, core.7z和Chrome, ext.7z的差异文件。
[0239]Chrome, core.diff=GetDiff (chrome, core.7z (new), chrome, core.7z (old))
[0240]Chrome, ext.diff=GetDiff (chrome, ext.7z (new), chrome, ext.7z (old))
[0241]其中,GetDiff为差异文件。
[0242]3、把 Chrome, core, diff 和 Chrome, ext.diff 打成一个压缩包 diff.7z。
[0243]4、把 diff.7z 打包成 diff.cab 文件。
[0244]5、将diff.cab文件上传到指定位置发布,下载地址为http://xxx.com/file_diff.cab。[0245]6、生成配置文件config.1ni。其中新版本为6.3.1.100,旧版本为6.2.1.200。
[0246][se6.2.1.200_6.3.1.100.7ζ]
[0247]ver=6.3.1.100
[0248]md5=lbdedd0ad00b758fa92b2b9edaa9al20
[0249]check= (%fver_old%=="6.2.1.200")
[0250]URL=http: //xxx.com/diff.cab
[0251]7、将配置文件config.1ni上传到指定的位置发布。
[0252]在客户端侧:
[0253]8、每隔固定的时间(如6个小时),去下载升级配置文件config.1ni。
[0254]9、逐项检查配置文件config.1ni,判断浏览器当前的版本号满足(%fver_old%=="6.2.1.200")。
[0255]10、当满足版本号"6.2.1.200〃 时,从 http://xxx.com/diff.cab 下载 diff.cab文件。
[0256]11、解压 diff.cab 为 diff.7z。
[0257]12、解压 diff.7z 为 chrome, core, diff, chrome, ext.diff。
`[0258]13、计算新版本的浏览器的基础组件和扩展组件。
[0259]Chrome, core.7z (new) =ApplyDiff (chrome, core.7z (old), chrome, core, diff)
[0260]Chrome, ext.7z (new) =ApplyDiff (chrome, ext.7z (old), chrome, ext.diff)
[0261]其中,ApplyDiff为更新文件。
[0262]14、解压新的Chrome, core.7z和Chrome, ext.7z得到新版本的浏览器。
[0263]15、安装新版本的浏览器。
[0264]对于整个浏览器,升级一个安装包和升级一个差异文件打成的7z包的大小差异为:
[0265]
【权利要求】
1.一种应用程序的更新方法,包括: 分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件; 生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件; 发布所述更新差异文件;所述更新差异文件包括下载地址; 生成配置文件;所述配置文件包括所述第二版本的版本信息和所述更新差异文件的下载地址; 发布所述配置文件。
2.如权利要求1所述的方法,其特征在于,所述一个或多个第一文件为将所有文件按照所述第一版本的应用程序的结构目录打包生成的一个或多个第一文件; 所述一个或多个第二文件为将所有文件按照第二版本的应用程序按照结构目录打包生成的一个或多个第二文件; 所述第一版本的版本信息高于所述第二版本的版本信息。
3.如权利要求1所述的方法,其特征在于,所述一个或多个第一文件包括第一基础组件文件和/或第一扩展组件文件; 所述一个或多个第一文件通过以下方式生成: 将第一版本的应用程序的基础组件按照结构目录打包为第一基础组件文件; 将第一版本的应用程序的扩展组件按照结构目录打包为第一扩展组件文件。
4.一种应用程序的更新方法,包括: 从服务器侧获取配置文件;所述配置文件包括第二版本的版本信息和更新差异文件的下载地址; 当客户端的版本信息为所述第二版本的版本信息时,从所述下载地址下载所述更新差异文件; 采用预置的一个或多个第三文件和所述更新差异文件生成更新文件; 对所述更新文件进行解压; 安装解压后的更新文件。
5.一种应用程序的更新方法,包括: 生成第一文件与第二文件的更新差异文件;其中,所述第一文件为第一版本的应用程序的组成文件,所述第二文件为第二版本的应用程序的组成文件; 发布所述更新差异文件;所述更新差异文件包括下载地址; 生成配置文件;所述配置文件包括所述组成文件的版本信息和所述更新差异文件的下载地址; 发布所述配置文件。
6.一种应用程序的更新方法,包括: 从服务器侧获取配置文件;所述配置文件包括组成文件的版本信息和更新差异文件的下载地址; 当预置的第三文件的版本信息为所述组成文件的版本信息时,从所述下载地址下载所述更新差异文件; 采用所述第三文件和所 述更新差异文件生成更新文件;将所述更新文件替换所述第三文件。
7.一种应用程序的更新装置,包括: 第一获取模块,适于分别获取第一版本的应用程序的一个或多个第一文件和第二版本的应用程序的一个或多个第二文件; 第一生成模块,适于生成所述一个或多个第一文件与对应的一个或多个第二文件的更新差异文件; 第一发布模块,适于发布所述更新差异文件;所述更新差异文件包括下载地址; 第二生成模块,适于生成配置文件;所述配置文件包括所述第二版本的版本信息和所述更新差异文件的下载地址; 第二发布模块,适于发布所述配置文件。
8.一种应用程序的更新装置,包括: 第二获取模块,适于从服务器侧获取配置文件;所述配置文件包括第二版本的版本信息和更新差异文件的下载地址; 第一下载模块,适于在客户端的版本信息为所述第二版本的版本信息时,从所述下载地址下载所述更新差异 文件; 第三生成模块,适于采用预置的一个或多个第三文件和所述更新差异文件生成更新文件; 解压模块,适于对所述更新文件进行解压; 安装模块,适于安装解压后的更新文件。
9.一种应用程序的更新装置,包括: 第四生成模块,适于生成第一文件与第二文件的更新差异文件;其中,所述第一文件为第一版本的应用程序的组成文件,所述第二文件为第二版本的应用程序的组成文件;第三发布模块,适于发布所述更新差异文件;所述更新差异文件包括下载地址; 第五生成模块,适于生成配置文件;所述配置文件包括所述组成文件的版本信息和所述更新差异文件的下载地址; 第四发布模块,适于发布所述配置文件。
10.一种应用程序的更新装置,包括: 第三获取模块,适于从服务器侧获取配置文件;所述配置文件包括组成文件的版本信息和更新差异文件的下载地址; 第二下载模块,适于在预置的第三文件的版本信息为所述组成文件的版本信息时,从所述下载地址下载所述更新差异文件; 第六生成模块,适于采用所述第三文件和所述更新差异文件生成更新文件; 替换模块,适于将所述更新文件替换所述第三文件。
【文档编号】G06F9/445GK103699410SQ201310714581
【公开日】2014年4月2日 申请日期:2013年12月20日 优先权日:2013年12月20日
【发明者】李宝生, 蔡永建 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1