应用更新方法和装置以及计算机可读存储介质与流程

文档序号:15076496发布日期:2018-08-01 01:50阅读:118来源:国知局

本发明涉及移动应用技术领域,特别涉及一种应用更新方法和装置以及计算机可读存储介质。



背景技术:

随着互联网的发展,移动终端应用的代码量越来越大,应用的模块也越来越多,以网络购物应用为例,可以包括基础框架模块、商品交易模块、酒店预定模块、机票购买模块等等。在这种情况下,在开发过程中进行沟通的成本越来越高,之前的协作统一开发模式难以为继,需要采用模块式的开发方式。

同时,应用在每个版本发布出去之后,常常会出现很多漏洞(bug)。由于应用市场的审核机制,无法将开发者提供的新版本应用立即投放到应用市场中,从而在出现了重大的、紧急的漏洞时,往往很难做到立刻升级,影响了用户体验。

因此,部分开发者会采用热修复或插件化的方案,即每次对脚本模块插件进行更新,从而无需重新发布整个应用的新版本,能够快速地对漏洞或者其他新增需求进行响应。

然而,随着应用功能的不断扩展,每次升级脚本模块插件时,脚本模块插件的代码量较大,会严重影响用户体验。



技术实现要素:

本发明实施例所要解决的一个技术问题是:如何提高应用更新的效率。

根据本发明实施例的第一个方面,提供一种应用更新方法,包括:从应用服务器获取应用中脚本模块的更新数据;如果更新数据包括脚本应用模块的更新数据,采用脚本应用模块的更新数据更新脚本应用模块;如果更新数据包括通用接口库的更新数据,采用通用接口库的更新数据更新通用接口库;如果更新数据包括原生引擎的更新数据,采用原生引擎的更新数据更新原生引擎。

在一个实施例中,还包括:如果更新数据包括通用接口库的更新数据,确定通用接口库的更新数据所涉及的脚本应用模块;对通用接口库的更新数据所涉及的脚本应用模块进行更新,对通用接口库的更新数据未涉及的脚本应用模块不进行更新。

在一个实施例中,还包括:如果更新数据包括原生引擎的更新数据,确定原生引擎的更新数据所涉及的通用接口库和脚本应用模块;对原生引擎的更新数据所涉及的通用接口库和脚本应用模块进行更新,对原生引擎的更新数据未涉及的通用接口库和脚本应用模块不进行更新。

在一个实施例中,采用原生引擎的更新数据更新原生引擎包括:采用原生引擎的更新数据中的方法替换应用中原生引擎中的同名称的方法。

在一个实施例中,从应用服务器获取应用中脚本模块的更新数据包括:以第一更新周期从应用服务器获取脚本应用模块的更新数据,以第二更新周期从应用服务器获取通用接口库的更新数据,以第三更新周期从应用服务器获取原生引擎的更新数据;并且,设置为:第一更新周期小于第二更新周期,第二更新周期小于第三更新周期。

在一个实施例中,还包括:通过在代码库中扫描并提取具有预设名称的应用接口,获得脚本应用模块;通过在代码库中扫描并提取具有预设名称的通用接口,获得通用接口库。

在一个实施例中,还包括:将通用接口库与更新后的脚本应用模块进行合包处理,或者将脚本应用模块与更新后的通用接口库进行合包处理。

根据本发明实施例的第二个方面,提供一种应用更新装置,包括:更新数据获取模块,用于从应用服务器获取应用中脚本模块的更新数据;脚本应用模块更新模块,用于当更新数据包括脚本应用模块的更新数据时,采用脚本应用模块的更新数据更新脚本应用模块;通用接口库更新模块,用于当更新数据包括通用接口库的更新数据时,采用通用接口库的更新数据更新通用接口库;原生引擎更新模块,用于当更新数据包括原生引擎的更新数据时,采用原生引擎的更新数据更新原生引擎。

在一个实施例中,还包括:通用接口库相关更新模块,用于当更新数据包括通用接口库的更新数据时,确定通用接口库的更新数据所涉及的脚本应用模块,并对通用接口库的更新数据所涉及的脚本应用模块进行更新,对通用接口库的更新数据未涉及的脚本应用模块不进行更新。

在一个实施例中,还包括:原生引擎相关更新模块,用于当更新数据包括原生引擎的更新数据时,确定原生引擎的更新数据所涉及的通用接口库和脚本应用模块,并对原生引擎的更新数据所涉及的通用接口库和脚本应用模块进行更新,对原生引擎的更新数据未涉及的通用接口库和脚本应用模块不进行更新。

在一个实施例中,原生引擎更新模块进一步用于采用原生引擎的更新数据中的方法替换应用中原生引擎中的同名称的方法。

在一个实施例中,更新数据获取模块进一步用于以第一更新周期从应用服务器获取脚本应用模块的更新数据,以第二更新周期从应用服务器获取通用接口库的更新数据,以第三更新周期从应用服务器获取原生引擎的更新数据;并且,设置为:第一更新周期小于第二更新周期,第二更新周期小于第三更新周期。

在一个实施例中,还包括:拆分模块,用于通过在代码库中扫描并提取具有预设名称的应用接口,获得脚本应用模块,以及通过在代码库中扫描并提取具有预设名称的通用接口,获得通用接口库。

在一个实施例中,还包括:合包模块,用于将通用接口库与更新后的脚本应用模块进行合包处理,或者将脚本应用模块与更新后的通用接口库进行合包处理。

根据本发明实施例的第三个方面,提供一种应用更新装置,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器中的指令,执行前述任意一种应用更新方法。

根据本发明实施例的第四个方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行前述任意一种应用更新方法。

本发明通过根据脚本模块中代码的不同功能和不同特点,将脚本模块划分为脚本应用模块、通用接口库和原生引擎三个层次,并且在每次更新时仅对特定层次或模块进行更新,从而减少了更新的数据量,提高了更新效率,使用户体验更好。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

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

图1为本发明在进行应用更新时脚本模块的结构示意图。

图2为本发明应用更新方法一个实施例的流程图。

图3为本发明应用更新方法另一个实施例的流程图。

图4为本发明应用更新装置的一个实施例的结构图。

图5为本发明应用更新装置的另一个实施例的结构图。

图6为本发明应用更新装置的又一个实施例的结构图。

图7为本发明应用更新装置的再一个实施例的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1为本发明在进行应用更新时脚本模块的结构示意图。如图1所示,脚本模块10被分为脚本应用模块101、通用接口库102和原生引擎103三个层次。而现有技术中则不对脚本模块10加以区分。

其中,脚本应用模块101是指应用中的业务模块,例如网络购物应用中的店铺模块、签到模块、促销活动模块等等;通用接口库102是指实现了一些通用功能的库,例如可以包括界面样式接口、弹窗功能接口等等;原生引擎103是指为脚本提供运行环境的引擎,例如当脚本模块为采用javascript脚本语言编写的模块时,原生引擎103则为上层的javascript代码提供运行环境,原生引擎103可以为java文件或者so库文件等等。

在应用的运行过程中,脚本应用模块101会调用通用接口库102中的接口进行功能的实现,而通用接口库102需要依赖原生引擎103提供的类或方法实现。

其中,原生引擎103例如可以为reactnative引擎。reactnative是facebook(脸书)公司推出的以escript语法开发ios(苹果公司的移动操作系统)和android(安卓操作系统)应用的方案,因此可以通用于多个终端操作系统。

下面参考图2描述本发明一个实施例的应用更新方法。

图2为本发明应用更新方法一个实施例的流程图。如图2所示,该实施例的应用更新方法包括:

步骤s202,从应用服务器获取应用中脚本模块的更新数据。

与现有技术中的更新数据包括整个脚本模块不同,本发明的更新数据中仅包括脚本应用模块、通用接口库和原生引擎中的部分层次的更新数据,即每次只对部分层次进行更新。

更新数据可以是应用服务器采用私钥加密并压缩的文件。在终端接收到更新数据后,可以采用本地公钥进行解密以及解压缩,从而防止数据在传输过程中被篡改。

更新数据的名称中可以包括随机生成的哈希值,例如可以根据模块名称和时间戳、采用md5(message-digestalgorithm5,消息摘要算法第五版)或者sha1(securehashalgorithm,安全哈希算法)生成哈希值。当终端接收到更新数据后判断更新数据的名称与上一次进行更新的名称是否一致,在不一致的情况下才进行更新。

其中,可以在预设的条件下向应用服务器发送更新请求,以获得更新数据。例如,可以周期性地请求更新数据。此外,也可以接收应用服务器推送的更新数据。

其中,可以根据不同层级的更新特点,为不同的层级设置不同的更新周期。在实际应用中,业务层面的变动较为频繁,而底层运行环境的变化较少。因此,可以以第一更新周期从应用服务器获取脚本应用模块的更新数据,以第二更新周期从应用服务器获取通用接口库的更新数据,以第三更新周期从应用服务器获取原生引擎的更新数据,并且设置第一更新周期小于第二更新周期、第二更新周期小于第三更新周期。即,频繁地对脚本应用模块进行更新,偶尔地对原生引擎进行更新,而通用接口库的更新频繁程度介于脚本应用模块和原生引擎之间。从而进一步减少更新的数据量,提高更新效率。

步骤s204,如果更新数据包括脚本应用模块的更新数据,采用脚本应用模块的更新数据更新脚本应用模块。

脚本应用模块可以对其他模块提供超链接形式的页面入口,例如可以为“httpjs://server:端口/模块下载地址”。从而,其他模块可以通过该超链接访问脚本应用模块。当脚本应用模块进行更新后,终端可以根据页面的名称中的下载地址请求更新,并完成更新过程。

步骤s206,如果更新数据包括通用接口库的更新数据,采用通用接口库的更新数据更新通用接口库。

目前,脚本应用模块和通用接口库是打包在一起使用的,例如统一打包为bundle文件。由于本发明是对各个层次分别进行更新,因此需要从打包的数据中分别提取脚本应用模块和通用接口库。

一个实施例为,通过在代码库中扫描并提取具有预设名称的应用接口,获得脚本应用模块;通过在代码库中扫描并提取具有预设名称的通用接口,获得通用接口库。

其中,代码库可以为打包的bundle文件,也可以为其他形式的包含脚本应用模块和通用接口库的文件。

例如,可以首先扫码代码库的入口文件,提取满足预设条件的接口,预设条件例如可以为预设的接口名称、位于预设的文件、位于预设的存储路径等等;然后,检查满足预设条件的接口所依赖的接口,例如满足预设条件的接口调用的接口,并进行提取,以此类推;最后,将提取的接口进行打包,生成脚本应用模块或者通用接口库。上述接口例如可以为方法、函数、模块等等,这里不再赘述。

从而,可以将位于同一代码库中的脚本应用模块和通用接口库进行拆分,以便分别对脚本应用模块和通用接口库进行更新,提高了更新效率。

在更新后,还可以根据需要将通用接口库与更新后的脚本应用模块进行合包处理,或者将脚本应用模块与更新后的通用接口库进行合包处理。从而不会对其他模块的运行逻辑造成影响。

此外,也可以采用moles-packer等拆包工具完成脚本应用模块和通用接口库的提取过程,这里不再赘述。

步骤s208,如果更新数据包括原生引擎的更新数据,采用原生引擎的更新数据更新原生引擎。

其中,可以采用原生引擎的更新数据中的方法替换应用中原生引擎中的同名称的方法。例如,原生引擎的更新数据中包括更新后的方法a,则将应用中的原生引擎中的方法a的内容替换为更新后的方法a的内容。

在实现过程中,可以采用热更新技术完成原生引擎的更新过程。

例如,可以首先获取更新数据中的每个方法,并判断是否是已更新的方法;如果方法为未更新,则在native层将指向更新前的方法的指针指向更新数据中的相应方法,从而完成同名称的方法的替换。

又例如,还可以更改类加载的顺序,使更新数据先于同名的未更新的类或者方法被加载,以使原生引擎在使用过程中首先采用更新后的类或者方法,从而完成更新过程。

通过根据脚本模块中代码的不同功能和不同特点,将脚本模块划分为脚本应用模块、通用接口库和原生引擎三个层次,并且在每次更新时仅对特定层次或模块进行更新,从而减少了更新的数据量,提高了更新效率,使用户体验更好。

虽然,从脚本应用模块到通用接口库再到原生引擎,是依次调用的关系,然而,在位于较低层次的模块更新后,高于该层次的模块不一定要进行更新。下面参考图3描述本发明另一个实施例的应用更新方法。

图3为本发明应用更新方法另一个实施例的流程图。如图3所示,该实施例的应用更新方法包括:

步骤s302,从应用服务器获取应用中脚本模块的更新数据。

步骤s304,如果更新数据包括脚本应用模块的更新数据,采用脚本应用模块的更新数据更新脚本应用模块。

步骤s306,如果更新数据包括通用接口库的更新数据,采用通用接口库的更新数据更新通用接口库。并且,进一步执行步骤s308、s310。

步骤s308,确定通用接口库的更新数据所涉及的脚本应用模块。

通用接口库的更新数据所涉及的脚本应用模块是指需要依赖通用接口库的更新内容、并且依赖方式发生变化的脚本应用模块。

例如,某脚本应用模块中调用了通用接口库中进行更新的方法,并且在更新后该方法的方法名、参数或者数据类型发生了改变,则该脚本应用模块即为通用接口库的更新数据所涉及的脚本应用模块。因此需要对通用接口库的更新数据所涉及的脚本应用模块进行更新,以便使应用能够正常运行。

步骤s310,对通用接口库的更新数据所涉及的脚本应用模块进行更新,对通用接口库的更新数据未涉及的脚本应用模块不进行更新。

在通用接口库更新之后,对于应用中存在通用接口库的更新数据所涉及的脚本应用模块,即需要关联地进行更新的脚本应用模块,可以立即向服务器请求更新,也可以仅在该脚本应用模块运行时再请求更新,以减少不必要的更新操作。

步骤s312,如果更新数据包括原生引擎的更新数据,采用原生引擎的更新数据更新原生引擎。并且,进一步执行步骤s314、s316。

步骤s314,确定原生引擎的更新数据所涉及的通用接口库和脚本应用模块。

与更新通用接口库之后所进行的过程类似,原生引擎的更新数据所涉及的通用接口库和脚本应用模块是指需要依赖原生引擎的更新内容、并且依赖方式发生变化的通用接口库和脚本应用模块。

有时,原生引擎的更新是为了原生引擎本身运行效率的提升,因而不会涉及上层模块,从而可以不对其他层级的内容进行更新。

步骤s316,对原生引擎的更新数据所涉及的通用接口库和脚本应用模块进行更新,对原生引擎的更新数据未涉及的通用接口库和脚本应用模块不进行更新。

类似地,原生引擎的更新数据所涉及的通用接口库和脚本应用模块可以立即更新,也可以仅在需要时才进行更新,以减少不必要的更新操作。

通过采用这种方法,可以当底层的模块进行更新之后,根据底层模块的更新内容对上层模块造成的影响来决定是否对上层模块进行更新,从而可以使本发明的分层更新的方法既能够保证较高的更新效率,还能够使应用稳定地运行。

下面参考图4描述本发明一个实施例的应用更新装置。

图4为本发明应用更新装置的一个实施例的结构图。如图4所示,该实施例的应用更新装置包括:更新数据获取模块41,用于从应用服务器获取应用中脚本模块的更新数据;脚本应用模块更新模块42,用于当更新数据包括脚本应用模块的更新数据时,采用脚本应用模块的更新数据更新脚本应用模块;通用接口库更新模块43,用于当更新数据包括通用接口库的更新数据时,采用通用接口库的更新数据更新通用接口库;原生引擎更新模块44,用于当更新数据包括原生引擎的更新数据时,采用原生引擎的更新数据更新原生引擎。

其中,原生引擎更新模块44可以进一步用于采用原生引擎的更新数据中的方法替换应用中原生引擎中的同名称的方法。

其中,更新数据获取模块41可以进一步用于以第一更新周期从应用服务器获取脚本应用模块的更新数据,以第二更新周期从应用服务器获取通用接口库的更新数据,以第三更新周期从应用服务器获取原生引擎的更新数据;并且,设置为:第一更新周期小于第二更新周期,第二更新周期小于第三更新周期。

下面参考图5描述本发明另一个实施例的应用更新装置。

图5为本发明应用更新装置的另一个实施例的结构图。如图5所示,该实施例的应用更新装置还可以包括:通用接口库相关更新模块55,用于当更新数据包括通用接口库的更新数据时,确定通用接口库的更新数据所涉及的脚本应用模块,并对通用接口库的更新数据所涉及的脚本应用模块进行更新,对通用接口库的更新数据未涉及的脚本应用模块不进行更新。

此外,应用更新装置还可以包括:原生引擎相关更新模块56,用于当更新数据包括原生引擎的更新数据时,确定原生引擎的更新数据所涉及的通用接口库和脚本应用模块,并对原生引擎的更新数据所涉及的通用接口库和脚本应用模块进行更新,对原生引擎的更新数据未涉及的通用接口库和脚本应用模块不进行更新。

此外,应用更新装置还可以包括:拆分模块57,用于通过在代码库中扫描并提取具有预设名称的应用接口,获得脚本应用模块,以及通过在代码库中扫描并提取具有预设名称的通用接口,获得通用接口库。

此外,应用更新装置还可以包括:合包模块58,用于将通用接口库与更新后的脚本应用模块进行合包处理,或者将脚本应用模块与更新后的通用接口库进行合包处理。

图6为本发明应用更新装置的又一个实施例的结构图。如图6所示,该实施例的装置600包括:存储器610以及耦接至该存储器610的处理器620,处理器620被配置为基于存储在存储器610中的指令,执行前述任意一个实施例中的应用更新方法。

其中,存储器610例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(bootloader)以及其他程序等。

图7为本发明应用更新装置的再一个实施例的结构图。如图7所示,该实施例的装置600包括:存储器610以及处理器620,还可以包括输入输出接口730、网络接口740、存储接口750等。这些接口730,740,750以及存储器610和处理器620之间例如可以通过总线760连接。其中,输入输出接口730为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口740为各种联网设备提供连接接口。存储接口750为sd卡、u盘等外置存储设备提供连接接口。

此外,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行前述任意一种应用更新方法。

本领域内的技术人员应当明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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