具体实施方式
请参照图式,其中相同的组件符号代表相同的组件,本申请的原理是以实施在适当的运算环境中来举例说明。以下的说明是基于所例示的本申请具体实施例,其不应被视为限制本申请未在此详述的其它具体实施例。
本申请实施例提供一种应用程序的更新方法,该应用程序的更新方法的执行主体可以是本申请实施例提供的应用程序的更新装置,或者集成了该应用程序的更新装置的计算机设备,其中该应用程序的更新装置可以采用硬件或者软件的方式实现。其中,计算机设备可以是智能手机、平板电脑、掌上电脑(PDA,Personal Digital Assistant)等。
对于应用程序来说,可以根据不同因素将应用程序的运行资源区分为多种资源,例如,可以分为基础资源、拓展资源和补丁资源。
比如,对于游戏应用来说,游戏在运行过程中可以调用的资源可以包括多种,例如游戏引擎等游戏启动时必需的基础资源;游戏地图、游戏玩法、角色贴图等游戏运行时所需的拓展资源;以及每周对游戏维护更新时,为了修复游戏异常或者增加玩法等用途所下载的补丁资源。
其中,基础资源可以是支撑游戏运行的资源,例如保证游戏引擎正常启动的资源。其中,应用程序中的基础资源可以是安装包的形式,用户通过下载安装包得到基础资源。
其中,拓展资源可以是从完整的游戏客户端中分离出来的资源。例如,可以是游戏地图、角色贴图等资源。拓展资源单独管理,不需要跟随完整客户端一起发布。用户首次下载应用程序的完整客户端后,启动时再在线下载拓展资源,并存放到本地。拓展资源在下载之后,不需要重复下载。拓展资源可以有多种更新方式,例如,可以在服务器端根据一定周期发布拓展资源更新。
而补丁(patch)资源则是为了满足用户的需求,定期进行更新的资源,因此拓展资源的频率较高。例如,对于游戏中出现的异常(bug)则可以根据补丁更新进行修复。补丁资源可以有多种更新方式,例如可以通过补丁系统每周定期更新。
对于用户来说,通常先下载安装包,然后再下载拓展包才能进入应用程序。但是随着维护时间变长,安装包会不断变大,此时只能通过将安装包中的部分基础资源外放至扩展资源中,使得缩小安装包的大小。
而由于部分基础资源可能已经通过每周的补丁资源更新下载过了,当部分基础资源被迁移到拓展资源中整合得到新的拓展资源并向应用推送时,应用会重复下载已有的资源,造成应用程序更新效率低。
那么,如图1所示,当安装了应用程序的终端检测到服务器端存在待更新拓展资源时,则根据该应用程序的本地补丁资源对该应用程序的本地拓展资源进行更新,得到更新后本地拓展资源。然后,获取该待更新拓展资源和该更新后本地拓展资源之间的差异信息。之后,再根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源。最后,根据该差异拓展资源对该更新后本地拓展资源进行更新。这样可以有效地避免重复下载已更新过的资源,一方面减小应用程序在终端本地所占的存储空间,另一方面也是减少资源下载时间,提高应用程序更新的效率。
以下进行具体分析。本申请实施例提供一种应用程序的更新方法,该应用程序的运行资源可以包括基础资源、拓展资源和补丁资源。如图2所示,图2为本申请实施例提供的应用程序的更新方法的流程示意图,该应用程序的更新方法可以包括:
101、当检测到服务器端的待更新拓展资源时,根据该应用程序的本地补丁资源对该应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中该待更新拓展资源包括从该应用程序的基础资源中迁移而来的资源。
其中,基础资源可以是支撑应用程序启动、运行的资源,例如,可以是保证游戏应用程序的引擎能够正常启动的资源。其中,应用程序中的基础资源可以是安装包的形式,用户通过下载安装包得到基础资源。
其中,拓展资源可以是除基础资源外,从完整的应用程序中分离出来的资源。例如,可以是除了保证引擎能够正常启动的资源之外,游戏应用程序中的游戏地图、角色贴图等资源。
拓展资源单独管理,不需要跟随完整客户端一起发布。用户首次下载应用程序的完整客户端后,启动时通过在线下载获取拓展资源对应的拓展包,并存放到本地即可。而且拓展资源在下载之后,不需要重复下载。
拓展资源可以有多种更新方式,例如,可以在服务器端根据一定周期发布拓展资源更新。
其中,补丁资源可以是为了满足用户的需求,定期进行更新的资源,例如,可以是对游戏应用程序中出现的异常(bug)进行修复的资源。补丁资源可以有多种更新方式,例如可以通过补丁系统每周定期更新。
对于用户来说,通常先下载安装包,然后再下载拓展包才能进入应用程序。但是随着维护时间变长,安装包会不断变大。如图3所示,对于完整的应用程序客户端包括安装包a的资源,拓展包b的资源,补丁包c的资源,为了缩小安装包的大小,则将安装包中的部分基础资源外放至扩展资源中,则完整的应用程序客户端变成了包括安装包a’的资源,拓展包b’的资源,补丁包c’的资源,其中拓展包b’中还可以包括新更新的资源。在此基础上,制作新的安装包、新的拓展包,并将新的拓展包推送至应用程序。
由于补丁资源每周定时更新,外放的部分基础资源可能已经通过补丁更新过,则当检测到服务器中存在待更新的拓展资源时,先在本地同步最新的文件,具体地,由于补丁资源的更新频率最高,则可以先将本地补丁资源更新至本地拓展资源中再进行接下来的资源下载操作。
在一些实施例中,在将本地补丁资源更新至本地拓展资源时,可以通过比对两个本地资源之间的资源信息确定差异资源,然后再根据差异资源对本地拓展资源更新,则“根据该应用程序的本地补丁资源对该应用程序的本地拓展资源进行更新”的方法可以包括:
获取该本地补丁资源的第一资源信息,以及获取该本地拓展资源的第二资源信息;
根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息;
根据该目标更新资源信息确定该本地拓展资源的目标更新资源;
根据该目标更新资源对该本地拓展资源进行更新。
其中,资源信息可以记录一类资源中所包含的所有文件的信息。比如,资源信息中可以记录所有文件的资源路径、文件内容、文件大小以及文件SVN(Subversion)版本号(也即文件的修改时间戳)等信息。
针对不同的资源,可以生成资源对应的资源信息。则例如,针对本地补丁资源可以生成对应的第一资源信息,针对本地拓展资源可以生成对应的第二资源信息等等。在生成资源信息时,可以根据预设格式生成。对于资源信息可以有多种形式,在一些实施例中,该资源信息可以是资源文件信息列表的形式。
例如,针对本地补丁资源,对应的资源信息可以是资源文件信息列表,列表里的内容可以包括文件的路径,文件内容的循环冗余校验码(CRC32,A cyclic redundancy check32),文件大小,文件的SVN版本号,文件所处的搜索目录类别(比如应用程序的运行资源是补丁资源,基础资源,扩展资源,则可以依次定义每一类别的类别数值为0,1,2)。
则根据预设格式生成资源文件信息列表,则该列表中的内容可以为:文件的资源路径1\t文件内容crc1\t文件大小1\t文件svn版本号1\t文件搜索目录类别数值1\n;
文件的资源路径2\t文件内容crc2\t文件大小2\t文件svn版本号2\t文件搜索目录类别数值2\n......
以此类推,针对每一类资源都可以得到对应的资源文件信息列表。
举例来说,当针对应用程序时,通过比对本地拓展资源和本地补丁资源这两者的资源信息,可以确定两资源之间的差异资源所对应的资源信息,将对应的资源信息作为目标更新资源信息,则可以根据目标更新资源从两者资源中确定目标更新资源,然后再通过目标更新资源对本地拓展更新资源。
在一些实施例中,针对资源中的每个文件,可以通过比较资源信息中的版本信息,将较新的版本信息所对应的资源作为目标更新资源。则该第一资源信息包括该本地补丁资源中每个文件的第一版本信息,该第二资源信息包括该本地拓展资源中每个文件的第二版本信息,“该根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息”的方法可以包括:
从该第一版本信息和该第二版本信息中,选取较新的版本信息作为目标版本信息;
“该根据该目标更新资源信息确定该本地拓展资源的目标更新资源”的方法可以包括:
将该目标版本信息所对应的资源作为目标更新资源。
其中,该版本信息可以指示文件的修改时间戳,比如,该版本信息可以为文件的SVN版本号,SVN版本号表示文件的当前修改版本。
举例来说,对于本地补丁资源和本地拓展资源,则比较两者各自的资源文件信息列表中的文件SVN版本号。由于SVN版本号越大,则表示文件越新。那么针对两者资源目录中相同的文件,将较大的SVN版本号作为目标版本号,然后将目标版本号对应的资源作为目标更新资源。而对于本地补丁资源中存在、而本地拓展资源中不存在的文件,也作为目标更新资源增加至本地拓展资源中。实际上也就是将本地补丁资源的所有文件全部同步至本地拓展资源中,针对版本低的文件进行更新,并针对不存在的文件来增加新的文件。
在一些实施例中,在根据本地补丁资源对本地拓展资源进行更新之前,可以先根据服务器对本地补丁资源进行校验,确保本地补丁资源与服务器端的补丁资源保持一致,则根据该应用程序的本地补丁资源对该应用程序的本地拓展资源进行更新之前,该更新方法还包括:
根据服务器端的补丁资源对该本地补丁资源进行校验。
比如,把本地补丁资源和补丁更新服务器中的资源进行校验,确认本地补丁资源跟服务器一致后再对本地拓展资源进行更新。在校验时可以通过CRC32码进行校验等等。具体可以根据实际需求进行设置。
在一些实施例中,当确定了目标更新资源之后,需要将该目标更新资源同步至本地拓展资源中,则根据补丁资源和拓展资源的不同存储格式,该“根据该目标更新资源对该本地拓展资源进行更新”的方法可以包括:
确定该本地拓展资源中的未更新资源;
将该目标更新资源添加至空白资源中,以及将该未更新资源添加至该空白资源中;
获取该空白资源的空白资源索引信息,其中该空白资源索引信息包括该空白资源中每个资源的位置信息;
将该空白资源索引信息和该空白资源进行打包,得到该更新后本地拓展资源。
其中,补丁资源和拓展资源可以有不同的存储格式。比如,补丁资源可以是以离散文件的形式存储在本地中,例如可以是本地资源目录中的res/test/test_a.png资源。而拓展资源可以以资源包的形式存在于本地中,例如,可以是npk(一种)资源包形式,或者是zip压缩包格式,等等。
举例来说,当拓展资源是以资源包形式存在而补丁资源是以离散文件形式存在时,若需要对拓展资源进行更新,需要创建一个新的资源包,将未修改、修改过的资源都添加至新压缩包中,将该新压缩包作为拓展资源,以实现更新。
其中,npk资源包由三部分组成:头部信息、文件索引信息,文件内容信息。头部信息中包括一些文件类型的标记,离散文件总个数,npk资源包总大小,内容区开始位置等信息。文件索引信息中记录了npk资源包中所有打包文件的路径哈希码(hash id),文件大小,文件在npk资源包中的存放区间等信息。文件内容信息则合并了所有离散文件内容,比如对于A/B/C三个文件,则合并得到A文件内容|B文件内容|C文件内容。
由于文件索引信息中记录了每个文件内容具体在npk资源包中的区间位置,当读取某个离散文件内容时,先从文件索引信息中获取具体区间位置,再从npk资源包里的对应区间读取内容。则在将离散文件和npk资源包进行合并,则需要更新npk资源包中的文件索引信息,再将待添加的离散文件写入npk资源包对应的内容区间即可。
则在一些实施例中,当根据目标更新资源在对本地拓展资源进行更新时,将目标更新资源添加至空白资源包的同时也需要对空白资源包的文件索引信息进行更新,则该“获取该空白资源的空白资源索引信息”的方法可以包括:
获取该本地拓展资源的本地资源索引信息,该本地资源索引信息包括该本地拓展资源中每个资源的位置信息;
确定该目标更新资源的第一位置信息,以及该未更新资源的第二位置信息;
根据该第一位置信息和该第二位置信息对该本地资源索引信息进行更新,得到更新后的本地资源索引信息;
将该更新后的本地资源索引信息作为该空白资源的空白资源索引信息。
其中,该本地资源索引信息可以有多种表现形式,例如,当本地拓展资源为npk资源包形式时,则可以是npk资源包中的文件索引信息,该文件索引信息记录了文件在npk资源包中的存放区间位置。
举例来说,针对本地补丁资源和本地拓展资源,在比对各自对应的资源文件信息列表文件时,确定版本号最新的资源后,把本地补丁资源中最新的资源和本地扩展资源合并。对于本地拓展资源的npk资源包来说,该文件里可以包含A、B、C、D、E文件。经过和本地补丁资源比对资源文件信息列表后,确定需要修改B、D文件,删除A文件以及新增F、G文件。
如图4所示,首先生成一份新的npk资源包,并命名为new.npk。然后记录本地拓展资源的old.npk里的文件索引信息old.indices,并复制一份为new.indices。根据发生改变的A、B、D文件,可以确定在本地拓展资源的old.npk里C、E文件没有变化,则将old.npk中未更新的C、E文件重新写入新的new.npk,以及将修改和新增的B、D、F、G文件添加到new.npk里,并同时更新new.indices,即可得到更新后本地拓展资源。
在一些实施例中,在得到更新后本地拓展资源之后,还需要针对对应的资源信息进行更新,则“根据该目标更新资源对该本地拓展资源进行更新”之后,还包括:
根据该目标更新资源信息对该更新后本地拓展资源所对应的资源信息进行更新。
举例来说,在将本地补丁资源同步至本地扩展资源之后,由于本地拓展资源里所包含的文件发生了变化,则需要同时更新本地拓展资源对应的资源文件信息列表。对于删除的文件,则删除列表中相应的文件信息。对于修改的文件,则相应修改列表中对应的文件信息。
由于通过本地补丁资源对本地拓展资源进行更新,可以避免本地补丁资源中已经存在的文件在应用程序通过服务器进行拓展资源更新时再次重复下载,不仅减少了应用程序的本地资源所占空间,而且还减少了应用程序的下载更新时间,提高了应用程序的更新效率。
在一些实施例中,当部分基础资源迁移至拓展资源后,不仅使得生成了新的拓展包,也生成了新的安装包。当用户下载安装新的安装包,然后启动应用程序时,应用程序会检测本地是否存在本地补丁资源和本地拓展资源。如果用户曾经使用过该应用程序又卸载,则本地可能会存在本地补丁资源和本地拓展资源。那么当检测确认存在本地补丁资源和本地拓展资源时,也可以根据本地补丁资源对本地拓展资源进行更新,然后再进行进一步的操作。
102、获取该更新后本地拓展资源和该待更新拓展资源之间的差异信息。
在一些实施例中,可以获取该更新后本地拓展资源对应的资源信息,以及获取该待更新拓展资源的资源信息,通过对比两者的资源信息可以确定对应的差异信息。则“获取该更新后本地拓展资源和该待更新拓展资源之间的差异信息”的方法可以包括:
获取该更新后本地拓展资源对应的资源信息,以及获取该待更新拓展资源的资源信息;比对两者资源信息,得到差异信息。
举例来说,当资源信息为资源文件列表时,可以获取两者的资源文件列表。通过将本地扩展资源的资源文件列表跟服务器上的待更新拓展资源的资源文件列表进行比对,可以得到差异的文件列表。比对的方式可以有多种,例如可以根据文件版本SVN号进行比对,将服务器的待更新拓展资源中,文件版本SVN号更高的、以及更新后本地拓展资源中不存在的文件的信息,作为差异的文件列表中的信息。
103、根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源。
由于服务器的拓展资源也是以资源包的形式存在,则在对比两个资源确定差异信息之后,由于只需要获取本地所没有的差异拓展资源,则需要在服务器端的拓展资源包中确定离散文件形式存在的差异拓展资源。则该“根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源”的方法包括:
根据该差异信息在该待更新拓展资源中确定对应的该差异拓展资源;
从该服务器端获取该差异拓展资源。
其中,从服务器端获取该差异拓展资源的方式可以有多种。例如,可以利用http的区间下载方式来下载以离散文件形式存在的差异拓展资源。比如说,从服务器端的待更新拓展资源中获取一个或几个文件。具体可以根据实际需求进行设置。
举例来说,将本地扩展资源的资源文件列表跟服务器上的待更新拓展资源的资源文件列表进行比对,可以得到差异拓展资源的资源文件列表。然后根据这个资源文件列表,利用http的区间下载方式,从服务器的npk拓展资源包里下载对应的差异文件,并以离散文件的方式保存在本地。
104、根据该差异拓展资源对该更新后本地拓展资源进行更新。
当从服务器端获取到差异拓展资源之后,由于差异拓展资源可以有多种存储格式,当差异拓展资源是以离散文件的方式保存在本地时,对于以资源包形式存在的更新后本地拓展资源,也需要将离散文件更新到资源包中。
在一些实施例中,需要创建新的npk资源包,记录并复制一份更新后本地拓展资源包对应的文件索引信息至新的npk资源包中。之后,将该差异拓展资源添加至新的npk资源包中并且同时更新文件索引信息,完成对应用程序本地的拓展资源的更新,以实现对应用程序的更新。
应用程序在调用资源时,是根据预设的顺序在不同类资源中依次查找。例如,根据资源的更新频率,由于本地补丁资源的更新频率较高,本地补丁资源中的文件应该是应用程序的本地资源中最新的,因此可以按照本地补丁资源、本地基础资源到本地拓展资源的顺序进行搜索资源。
但是当部分基础资源迁移至拓展资源之后,应用程序需要更新拓展资源,这时候就会存在部分资源可能已经通过拓展资源更新的问题。另外,当更新安装包时,安装包中的资源也会比补丁资源和扩展资源更新。
那么此时根据默认顺序进行搜索,则会出现虽然本地拓展资源中的文件比本地补丁资源中的文件版本号更高,但是仍然需要先搜索完本地补丁资源再搜索本地基础资源,最后才能搜索本地拓展资源的情况。这样会使得资源搜索时间变长,应用程序调用资源的时间变长,使得应用程序的响应速度变慢,影响用户的使用体验。
在本申请所提供的实施例中,可以通过在应用程序启动时,合并多种资源对应的资源信息,得到一份所有资源所对应的总资源信息。在应用程序调用资源时,根据总资源信息进行资源搜索。则该更新方法还可以包括:
获取该本地补丁资源的该第一资源信息、该本地拓展资源的该第二资源信息以及本地基础资源的第三资源信息;
当启动该应用程序时,将该第一资源信息、该第二资源信息和该第三资源信息进行合并,得到该应用程序中所有资源对应的总资源信息;
当该应用程序调用资源时,根据该总资源信息进行资源搜索。
其中,将该第一资源信息、该第二资源信息和该第三资源信息进行合并的方法可以有多种。例如,该第一资源信息包括该本地补丁资源中每个资源的第一版本信息,该第二资源信息包括该本地拓展资源中每个资源的第二版本信息,该第三资源信息包括该本地基础资源中每个资源的第三版本信息,“该第一资源信息、该第二资源信息和该第三资源信息进行合并”的方法包括:
针对每一资源,从该第一版本信息、第二版本信息和第三版本信息中选取较新的版本信息,得到多个目标信息;根据多个目标信息得到该总资源信息。
举例来说,可以获取本地补丁资源、本地拓展资源以及本地基础资源分别对应的资源文件列表,资源文件列表中可以包含文件内容、文件SVN版本号等信息。当启动应用程序时,则将多个资源文件列表进行合并。当一个文件在多个资源中存在时,以文件svn版本号最大所对应的文件作为最新文件。如此合并,则可以得到一份完整的所有文件的资源文件列表,也即得到一个文件搜索顺序表,该搜索顺序表以文件名为索引而不是以资源对应的目录为索引。这个顺序表也记录了当出现相同路径文件时,哪一类资源对应的目录下文件是最新的,当需要调用资源时则从对应的目录搜索文件。
则当应用程序搜索资源时,则通过该总资源表根据文件来查找资源,而不是根据资源对应的目录来查找。比如a文件在顺序表中应该从本地补丁资源中搜索,B文件在顺序表中应该从基础资源中搜索,C文件在顺序表中应该从扩展资源中搜索。
由于本申请中改变了原有的搜索顺序,通过该总资源表根据文件来查找资源,当出现本地拓展资源、本地基础资源中的文件比本地补丁资源中的文件版本号更高的情况时,仍然能够快速查找到版本号最新的文件,使得资源搜索时间减少,使得应用程序的响应速度加快,提高用户的使用体验。
本申请实施例所提供的应用程序的更新方法通过当检测到服务器端的待更新拓展资源时,根据应用程序的本地补丁资源对应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中待更新拓展资源包括从应用程序的基础资源中迁移而来的资源;将更新后本地拓展资源和待更新拓展资源进行比对,得到更新后本地拓展资源和待更新拓展资源之间的差异信息;根据差异信息从服务器端获取更新后本地拓展资源和待更新拓展资源之间的差异拓展资源;根据差异拓展资源对应用程序进行更新。
本申请实施例通过本地补丁资源对本地拓展资源进行更新,可以避免本地已存在的文件在应用程序通过服务器进行拓展资源更新时再次重复下载,提高了应用程序的更新效率。
根据上述实施例所描述的方法,以下将举例作进一步详细说明。请参阅图5,图5为本申请实施例提供的应用程序的更新方法的另一流程示意图,该应用程序的更新方法可以包括:
201、当检测到服务器端的待更新拓展资源时,获取该本地补丁资源的第一资源信息,以及获取该本地拓展资源的第二资源信息,其中该待更新拓展资源包括从该应用程序的基础资源中迁移而来的资源。
其中,应用程序中的基础资源可以是游戏应用的安装包,用户通过下载安装包安装应用。拓展资源可以是除基础资源外,从完整的游戏应用程序中分离出来的资源。补丁资源是对游戏应用程序中出现的异常(bug)进行修复的资源,通过补丁系统每周定期更新。
对于用户来说,通常先下载安装包,然后再下载拓展包才能进入游戏应用程序。但是随着维护时间变长,安装包会不断变大。为了缩小安装包的大小,则将安装包中的部分基础资源外放至扩展资源中,制作新的拓展资源,并推送至应用程序。
由于补丁资源每周定时更新,外放的部分基础资源可能已经通过补丁更新过,则当检测到服务器中存在待更新的拓展资源时,先在本地同步最新的文件,具体地,由于补丁资源的更新频率最高,则可以先将本地补丁资源更新至本地拓展资源中再进行接下来的资源下载操作。
那么在将本地补丁资源更新至本地拓展资源时,可以先获取两者资源各自对应的资源信息,然后对比两者的资源信息确定目标更新资源。
202、根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息,并根据该目标更新资源信息确定该本地拓展资源的目标更新资源。
其中,该第一资源信息包括该本地补丁资源中每个文件的第一版本信息,该第二资源信息包括该本地拓展资源中每个文件的第二版本信息。该资源信息可以是每类资源的资源文件信息列表,该版本信息可以为文件的SVN版本号。
比如,从该第一版本信息和该第二版本信息中,选取较新的版本信息作为目标版本信息;将该目标版本信息所对应的资源作为目标更新资源。
举例来说,对于本地补丁资源和本地拓展资源,则比较两者各自的资源文件信息列表中的文件SVN版本号。由于SVN版本号越大,则表示文件越新。那么针对两者资源目录中相同的文件,将较大的SVN版本号作为目标版本号。然后将目标版本号对应的资源作为目标更新资源。对于本地补丁资源中存在、而本地拓展资源中不存在的文件,也作为目标更新资源。实际上也就是将本地补丁资源的所有文件全部同步至本地拓展资源中,针对版本低的文件进行更新,并增加新的文件。
在根据本地补丁资源对本地拓展资源进行更新之前,可以先根据服务器对本地补丁资源进行校验,确保本地补丁资源与服务器端的补丁资源保持一致。
比如,把本地补丁资源和补丁更新服务器中的资源进行校验,确认本地补丁资源跟服务器一致后再对本地拓展资源进行更新。在校验时可以通过CRC32码进行校验等等。具体可以根据实际需求进行设置。
203、根据该目标更新资源对该本地拓展资源进行更新,得到更新后本地拓展资源。
针对游戏应用程序的本地补丁资源和本地拓展资源,在比对各自对应的资源文件信息列表文件时从本地补丁资源中确定了目标更新资源后,需要把目标更新资源和本地扩展资源的npk资源包合并。
由于本地补丁资源以离散文件形式存在于本地,那么目标更新资源也是离散文件,而本地拓展资源是以npk资源包形式存在,那么则需要将离散文件更新到npk资源包中。首先,生成一份新的npk资源包。记录本地拓展资源的npk资源包里的文件索引信息并复制一份至新的npk资源包。根据发生改变的A、B、D文件,可以确定在本地拓展资源中C、E文件没有变化。将old.npk中未更新的C、E文件重新写入新的new.npk,以及将修改和新增的B、D、F、G文件添加到new.npk里,并同时更新new.indices,即可完成根据目标更新资源对本地拓展资源的更新,得到更新后本地拓展资源。
在将本地补丁资源同步至本地扩展资源之后,需要同时更新对应的资源文件信息列表,对于删除的文件,则删除列表中相应的文件信息;对于修改的文件,则相应修改列表中对应的文件信息。
204、获取该更新后本地拓展资源和该待更新拓展资源之间的差异信息,根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源。
比如,应用程序将本地扩展资源的资源文件列表跟服务器上的待更新拓展资源的资源文件列表进行比对,可以得到差异拓展资源的资源文件列表。然后根据这个资源文件列表,利用http的区间下载方式,从服务器的npk拓展资源包里下载对应的差异文件,并以离散文件的方式保存在本地。
205、根据该差异拓展资源对该更新后本地拓展资源进行更新。
当从服务器端获取到差异拓展资源之后,由于差异拓展资源可以有多种存储格式,当差异拓展资源是以离散文件的方式保存在本地时,对于以资源包形式存在的更新后本地拓展资源,也需要将离散文件更新到资源包中。相应的,将离散文件更新到资源包中的方式可以参照上述实施例,此处不再赘述。
206、当启动该应用程序时,将该本地补丁资源的该第一资源信息、该本地拓展资源的该第二资源信息以及本地基础资源的第三资源信息进行合并,得到该应用程序中所有资源对应的总资源信息。
比如,可以获取本地补丁资源、本地拓展资源以及本地基础资源分别对应的资源文件列表,资源文件列表中可以包含文件内容、文件SVN版本号等信息。当启动应用程序时,则将多个资源文件列表进行合并。当一个文件在多个资源中存在时,以文件svn版本号最大所对应的文件作为最新文件。如此合并,则可以得到一份完整的所有文件的资源文件列表,也即得到一个文件搜索顺序表,该搜索顺序表以文件名为索引而不是以资源对应的目录为索引。这个顺序表也记录了当出现相同路径文件时,哪一类资源对应的目录下文件是最新的,当需要调用资源时则从对应的目录搜索文件。
207、当该应用程序调用资源时,根据该总资源信息进行资源搜索。
比如,当启动程序时通过合并多份资源对应的资源文件列表,得到一份完整的所有文件的资源文件列表,也即得到了一个文件搜索顺序表。该搜索顺序表以文件名为索引而不是以资源对应的目录为索引。该顺序表也记录了当出现相同路径文件时,哪一类资源对应的目录下文件是最新的。那么当游戏应用程序在调用资源时,则从对应的目录搜索文件。例如,当游戏应用程序需要调用某个地图时,通过该所有文件的资源文件列表,检索到该地图资源存储在本地拓展资源中,则到本地拓展资源所对应的目录中读取文件。
本申请实施例所提供的当检测到服务器端的待更新拓展资源时,获取该本地补丁资源的第一资源信息,以及获取该本地拓展资源的第二资源信息,其中该待更新拓展资源包括从该应用程序的基础资源中迁移而来的资源;根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息,并根据该目标更新资源信息确定该本地拓展资源的目标更新资源;根据该目标更新资源对该本地拓展资源进行更新,得到更新后本地拓展资源;获取该更新后本地拓展资源和该待更新拓展资源之间的差异信息,根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源;根据该差异拓展资源对该更新后本地拓展资源进行更新。
本申请实施例通过本地补丁资源对本地拓展资源进行更新,可以避免本地已存在的文件在应用程序通过服务器进行拓展资源更新时再次重复下载,提高了应用程序的更新效率。
为便于更好的实施本申请实施例提供的应用程序的更新方法,本申请实施例还提供一种基于上述应用程序的更新方法的装置。其中名词的含义与上述应用程序的更新方法中相同,具体实现细节可以参考方法实施例中的说明。
请参阅图6,图6为本申请实施例提供的应用程序的更新装置300的模块示意图。具体而言,该应用程序的更新装置300包括第一更新模块301、比对模块302、获取模块303和第二更新模块304。
第一更新模块301,用于当检测到服务器端的待更新拓展资源时,根据所述应用程序的本地补丁资源对所述应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中所述待更新拓展资源包括从所述应用程序的基础资源中迁移而来的资源;
比对模块302,用于获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异信息;
获取模块303,用于根据所述差异信息从所述服务器端获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异拓展资源;
第二更新模块304,用于根据所述差异拓展资源对所述更新后本地拓展资源进行更新。
在一些实施例中,该第一更新模块301可以用于:获取该本地补丁资源的第一资源信息,以及获取该本地拓展资源的第二资源信息;根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息;根据该目标更新资源信息确定该本地拓展资源的目标更新资源;根据该目标更新资源对该本地拓展资源进行更新。
在一些实施例中,该第一资源信息包括该本地补丁资源中每个资源的第一版本信息,该第二资源信息包括该本地拓展资源中每个资源的第二版本信息,该第一更新模块301可以用于:该根据该第一资源信息和该第二资源信息,得到该本地拓展资源和该本地补丁资源之间的目标更新资源信息,包括:从该第一版本信息和该第二版本信息中,选取较新的版本信息作为目标版本信息;
该根据该目标更新资源信息确定该本地拓展资源的目标更新资源,包括:将该目标版本信息所对应的资源作为目标更新资源。
在一些实施例中,该第一更新模块301还可以用于:根据服务器端的补丁资源对该本地补丁资源进行校验。
在一些实施例中,该第一更新模块301可以用于:确定该本地拓展资源中的未更新资源;将该目标更新资源添加至空白资源中,以及将该未更新资源添加至该空白资源中;获取该空白资源的空白资源索引信息,其中该空白资源索引信息包括该空白资源中每个资源的位置信息;将该空白资源索引信息和该空白资源进行打包,得到该更新后本地拓展资源。
在一些实施例中,该第一更新模块301可以用于:获取该本地拓展资源的本地资源索引信息,该本地资源索引信息包括该本地拓展资源中每个资源的位置信息;确定该目标更新资源的第一位置信息,以及该未更新资源的第二位置信息;根据该第一位置信息和该第二位置信息对该本地资源索引信息进行更新,得到更新后的本地资源索引信息;将该更新后的本地资源索引信息作为该空白资源的空白资源索引信息。
在一些实施例中,该第一更新模块301可以用于:根据该目标更新资源信息对该更新后本地拓展资源所对应的资源信息进行更新。
在一些实施例中,该获取模块303可以用于:根据该差异信息在该待更新拓展资源中确定对应的该差异拓展资源;从该服务器端获取该差异拓展资源。
在一些实施例中,该应用程序的更新装置300还可以用于:获取该本地补丁资源的该第一资源信息、该本地拓展资源的该第二资源信息以及本地基础资源的第三资源信息;当启动该应用程序时,将该第一资源信息、该第二资源信息和该第三资源信息进行合并,得到该应用程序中所有资源对应的总资源信息;当该应用程序调用资源时,根据该总资源信息进行资源搜索。
本申请实施例所提供的应用程序的更新装置可以通过第一更新模块当检测到服务器端的待更新拓展资源时,根据该应用程序的本地补丁资源对该应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中该待更新拓展资源包括从该应用程序的基础资源中迁移而来的资源;通过比对模块获取该更新后本地拓展资源和该待更新拓展资源之间的差异信息;然后,通过获取模块根据该差异信息从该服务器端获取该更新后本地拓展资源和该待更新拓展资源之间的差异拓展资源;最后通过第二更新模块根据该差异拓展资源对该更新后本地拓展资源进行更新。
由于本申请实施例所提供的应用程序的更新装置通过本地补丁资源对本地拓展资源进行更新,可以避免本地已存在的文件在应用程序通过服务器进行拓展资源更新时再次重复下载,提高了应用程序的更新效率。
本申请实施例还提供一种计算机设备400。请参阅图7,计算机设备400包括处理器401以及存储器。其中,处理器401与存储器电性连接。
该处理器400是计算机设备400的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或加载存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行计算机设备400的各种功能并处理数据,从而对计算机设备400进行整体监控。
该存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的计算机程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的计算机程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
在本申请实施例中,计算机设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401运行存储在存储器402中的计算机程序,从而实现各种功能,如下:
在一些实施例中,处理器401可以具体执行以下步骤:
当检测到服务器端的待更新拓展资源时,根据所述应用程序的本地补丁资源对所述应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中所述待更新拓展资源包括从所述应用程序的基础资源中迁移而来的资源;
获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异信息;
根据所述差异信息从所述服务器端获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异拓展资源;
根据所述差异拓展资源对所述更新后本地拓展资源进行更新。
在一些实施例中,处理器401可以具体执行以下步骤:
获取所述本地补丁资源的第一资源信息,以及获取所述本地拓展资源的第二资源信息;
根据所述第一资源信息和所述第二资源信息,得到所述本地拓展资源和所述本地补丁资源之间的目标更新资源信息;
根据所述目标更新资源信息确定所述本地拓展资源的目标更新资源;
根据所述目标更新资源对所述本地拓展资源进行更新。
在一些实施例中,所述第一资源信息包括所述本地补丁资源中每个文件的第一版本信息,所述第二资源信息包括所述本地拓展资源中每个文件的第二版本信息,处理器401可以具体执行以下步骤:
从所述第一版本信息和所述第二版本信息中,选取较新的版本信息作为目标版本信息;
所述根据所述目标更新资源信息确定所述本地拓展资源的目标更新资源,包括:
将所述目标版本信息所对应的资源作为目标更新资源。
在一些实施例中,处理器401可以具体执行以下步骤:根据服务器端的补丁资源对所述本地补丁资源进行校验。
在一些实施例中,处理器401可以具体执行以下步骤:
确定所述本地拓展资源中的未更新资源;
将所述目标更新资源添加至空白资源中,以及将所述未更新资源添加至所述空白资源中;
获取所述空白资源的空白资源索引信息,其中所述空白资源索引信息包括所述空白资源中每个资源的位置信息;
将所述空白资源索引信息和所述空白资源进行打包,得到所述更新后本地拓展资源。
在一些实施例中,处理器401可以具体执行以下步骤:
获取所述本地拓展资源的本地资源索引信息,所述本地资源索引信息包括所述本地拓展资源中每个资源的位置信息;
确定所述目标更新资源的第一位置信息,以及所述未更新资源的第二位置信息;
根据所述第一位置信息和所述第二位置信息对所述本地资源索引信息进行更新,得到更新后的本地资源索引信息;
将所述更新后的本地资源索引信息作为所述空白资源的空白资源索引信息。
在一些实施例中,处理器401可以具体执行以下步骤:根据所述目标更新资源信息对所述更新后本地拓展资源所对应的资源信息进行更新。
在一些实施例中,处理器401可以具体执行以下步骤:根据所述差异信息在所述待更新拓展资源中确定对应的所述差异拓展资源;
从所述服务器端获取所述差异拓展资源。
在一些实施例中,处理器401可以具体执行以下步骤:获取所述本地补丁资源的所述第一资源信息、所述本地拓展资源的所述第二资源信息以及本地基础资源的第三资源信息;
当启动所述应用程序时,将所述第一资源信息、所述第二资源信息和所述第三资源信息进行合并,得到所述应用程序中所有资源对应的总资源信息;
当所述应用程序调用资源时,根据所述总资源信息进行资源搜索。
由上可知,本申请实施例的计算机设备可以通过当检测到服务器端的待更新拓展资源时,根据应用程序的本地补丁资源对本地拓展资源进行更新,得到更新后本地拓展资源,其中待更新拓展资源包括从应用程序的基础资源中迁移而来的资源;将更新后本地拓展资源和待更新拓展资源进行比对,得到更新后本地拓展资源和待更新拓展资源之间的差异信息;根据差异信息从服务器端获取差异拓展资源;根据差异拓展资源对应用程序进行更新。
本申请实施例通过本地补丁资源对本地拓展资源进行更新,可以避免本地补丁资源已存在的文件在应用程序通过服务器进行拓展资源更新时再次重复下载,提高了应用程序的更新效率。
请一并参阅图7,在某些实施方式中,计算机设备400还可以包括:显示器403、射频电路404、音频电路405以及电源406。其中,其中,显示器403、射频电路404、音频电路405以及电源406分别与处理器401电性连接。
该显示器403可以用于显示由用户输入的信息或提供给用户的信息以及各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示器403可以包括显示面板,在某些实施方式中,可以采用液晶显示器(Liquid CrystalDisplay,LCD)、或者有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板。
该射频电路404可以用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
该音频电路405可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。
该电源406可以用于给计算机设备400的各个部件供电。在一些实施例中,电源406可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管中未示出,计算机设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
本文所使用的术语「模块」可看作为在该运算系统上执行的软件对象。本文该的不同组件、模块、引擎及服务可看作为在该运算系统上的实施对象。而本文该的装置及方法优选的以软件的方式进行实施,当然也可在硬件上进行实施,均在本申请保护范围之内。
本申请实施例还提供一种存储介质,该存储介质存储有计算机程序,当该计算机程序在计算机上运行时,使得该计算机执行上述任一实施例中的应用程序的更新方法,比如:
当检测到服务器端的待更新拓展资源时,根据所述应用程序的本地补丁资源对所述应用程序的本地拓展资源进行更新,得到更新后本地拓展资源,其中所述待更新拓展资源包括从所述应用程序的基础资源中迁移而来的资源;
获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异信息;
根据所述差异信息从所述服务器端获取所述更新后本地拓展资源和所述待更新拓展资源之间的差异拓展资源;
根据所述差异拓展资源对所述更新后本地拓展资源进行更新。
在本申请实施例中,存储介质可以是磁碟、光盘、只读存储器(Read Only Memory,ROM)、或者随机存取记忆体(Random Access Memory,RAM)等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对本申请实施例的应用程序的更新方法而言,本领域普通测试人员可以理解实现本申请实施例的应用程序的更新方法的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,该计算机程序可存储于计算机可读取存储介质中,如存储在计算机设备的存储器中,并被该计算机设备内的至少一个处理器执行,在执行过程中可包括如应用程序的更新方法的实施例的流程。其中,该的存储介质可为磁碟、光盘、只读存储器、随机存取记忆体等。
对本申请实施例的应用程序的更新装置而言,其各功能模块可以集成在一个处理芯片中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。该集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中,该存储介质譬如为只读存储器,磁盘或光盘等。
以上对本申请实施例所提供的一种应用程序的更新方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。