一种动态修复应用程序的方法、装置及相关系统的制作方法
【专利摘要】本发明公开的动态修复应用程序的方法,包括:客户端接收预先配置的已修复程序段;存储所述已修复程序段;记录存储所述已修复程序段的地址;将所述已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。相应的,本发明还公开了动态修复应用程序的装置及相关系统。与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提高用户体验。
【专利说明】
一种动态修复应用程序的方法、装置及相关系统
技术领域
[0001]本发明涉及互联网技术领域,更具体而言,涉及一种动态修复应用程序的方法、装置及相关系统。
【背景技术】
[0002]众所周知,移动终端的运行依赖于内置的运行系统,鉴于移动终端的便捷性和操作简易性,人们越来越倾向于通过移动终端进行网络活动,因此,为了迎合用户的需求,同时,增加移动终端的使用灵活性,第三方服务器基于移动终端的运行系统开发出多种实现不同功能的APP (Applicat1n,应用程序),当用户想要通过移动终端进行某种活动时,可以在移动终端安装能够实现相应功能的APP。
[0003]具体的,以1S系统为例,由于APP为第三方服务器开发的第三方应用程序,在第三方服务器开发出APP之后,需要经过客户端的1S系统的审核,当1S系统审核通过后,将该APP在APP Store中发布,此时,当用户需要使用该APP时,才能够从APP Store中下载。
[0004]然而,客户端1S系统审核APP的时间相对较长,通常为7天左右,如果在APP发布之后发现某些功能存在错误,则需要先将APP下线,然后对APP存在的错误进行修复,修复后需要再次审核继而再次发布,该过程需要消耗很长的时间,导致APP的成本消耗大,崩溃率上升,严重影响用户体验。
【发明内容】
[0005]有鉴于此,本发明实施例提供了一种动态修复应用程序的方法、装置及相关系统,能够解决APP发布后修复错误所造成的消耗时间长,从而导致APP的成本消耗大,崩溃率上升的问题。
[0006]第一方面,本发明实施例提供了一种动态修复应用程序的方法,包括:客户端接收预先配置的已修复程序段;存储所述已修复程序段;记录存储所述已修复程序段的地址;将所述已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。
[0007]在第一方面的第一种可能的实现方式中,将所述已修复程序段的地址存储到应用程序APP中,包括:在所述APP中创建所述已修复程序段的地址对应的存储节点;在已创建的所述存储节点写入所述已修复程序段的地址。
[0008]结合上述第一方面,在第二种可能的实现方式中,将所述已修复程序段的地址存储到应用程序APP中,包括:从所述APP中读取待修复程序段的地址对应的存储节点,其中,所述待修复程序段是所述已修复程序段修复之前的程序段;在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址,以使用所述已修复程序段的地址替换所述待修复程序段的地址。
[0009]结合上述第一方面,在第三种可能的实现方式中,所述在所述APP中创建所述已修复程序段的地址的存储节点包括:读取所述已修复程序段的标识信息;根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;确定所述功能模块的地址所对应的存储节点;为所述功能模块的地址对应的存储节点添加子存储节点,并将所述子存储节点作为所述已修复程序段的地址的存储节点。
[0010]结合上述第一方面,在第四种可能的实现方式中,所述从所述APP中读取待修复程序段的地址对应的存储节点包括:读取所述已修复程序段的标识信息;根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;确定所述功能模块的地址所对应的存储节点;以所述功能模块的地址对应的存储节点为根存储节点,从子存储节点中查找所述待修复程序的地址对应的存储节点。
[0011]结合上述第一方面,在第五种可能的实现方式中,所述从所述APP中读取待修复程序段的地址对应的存储节点包括:读取所述已修复程序段的标识信息;根据所述标识信息查找所述已修复程序段所属的功能模块;从所述功能模块中确定所述待修复程序段;为所述待修复程序段添加存储地址;将所添加的所述待修复程序段的存储地址对应的存储节点确定为所述待修复程序段的地址对应的存储节点。
[0012]第二方面,本发明实施例还提供了一种动态修复应用程序的方法,包括:服务器接收运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号;当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段;将所述已修复程序段发送到客户端,由所述客户端存储所述已修复程序段;获取存储所述已修复程序段的地址;将所述已修复程序段的地址存储到所述APP中,以便于所述APP运行时,所述客户端通过所述已修复程序段的地址调用所述已修复程序段。
[0013]在第二方面的第一种可能实现方式中,所述对应所述APP配置已修复程序段包括:顺次从版本号大于所述当前版本号的APP中获取与所述APP不同的程序段;按照属性值为所述程序段添加标识信息;将添加有所述标识信息的程序段确定为所述已修复程序段。
[0014]第三方面,本发明实施例提供了一种动态修复应用程序的装置,包括:接收模块,用于接收预先配置的已修复程序段;存储模块,用于存储所述接收模块所接收的已修复程序段;记录模块,用于记录所述存储模块存储所述已修复程序段的地址;所述存储模块,还用于将所述记录模块记录的已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。
[0015]在第三方面的第一种可能实现方式中,所述存储模块包括:创建单元和写入单元,其中,所述创建单元,用于在所述APP中创建所述已修复程序段的地址对应的存储节点;所述写入单元,用于在已创建的所述存储节点写入所述已修复程序段的地址。
[0016]结合上述第三方面,在第二种可能的实现方式中,所述存储模块还包括:读取单元,其中,所述读取单元,用于从所述APP中读取待修复程序段的地址对应的存储节点,其中,所述待修复程序段是所述已修复程序段修复之前的程序段;所述写入单元,还用于在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址,以使用所述已修复程序段的地址替换所述待修复程序段的地址。
[0017]结合上述第三方面,在第三种可能的实现方式中,所述创建单元包括:第一读取子单元、第一查找子单元、第一确定子单元和第一添加子单元,其中,所述第一读取子单元,用于读取所述已修复程序段的标识信息;所述第一查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;所述第一确定子单元,用于确定所述功能模块的地址所对应的存储节点;所述第一添加子单元,用于为所述功能模块的地址对应的存储节点添加子存储节点,并将所述子存储节点作为所述已修复程序段的地址的存储节点。
[0018]结合上述第三方面,在第四种可能的实现方式中,所述读取单元包括:第二读取子单元、第二查找子单元和第二确定子单元,其中,所述第二读取子单元,用于读取所述已修复程序段的标识信息;所述第二查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;所述第二确定子单元,用于确定所述功能模块的地址所对应的存储节点;所述第二查找子单元,还用于以所述功能模块的地址对应的存储节点为根存储节点,从子存储节点中查找所述待修复程序的地址对应的存储节点。
[0019]结合上述第三方面,在第五种可能的实现方式中,所述读取单元包括:第二添加子单元,其中,所述第二查找子单元,还用于根据所述标识信息查找所述已修复程序段所属的功能模块;所述第二确定子单元,还用于从所述功能模块中确定所述待修复程序段;所述第二添加子单元,用于为所述待修复程序段添加存储地址;所述第二确定子单元,还用于将所添加的所述待修复程序段的存储地址对应的存储节点确定为所述待修复程序段的地址对应的存储节点。
[0020]第四方面,本发明实施例还提供了一种动态修复应用程序的装置,包括:接收模块,用于接收运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号;配置模块,用于当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段;发送模块,用于将所述已修复程序段发送到客户端。
[0021]在第四方面的第一种可能实现方式中,所述配置模块包括:获取单元、添加单元和确定单元,其中,所述获取单元,用于顺次从版本号大于所述当前版本号的APP中获取与所述APP不同的程序段;所述添加单元,用于按照属性值为所述程序段添加标识信息;所述确定单元,用于将添加有所述标识信息的程序段确定为所述已修复程序段。
[0022]第五方面,本发明实施例提供了一种动态修复应用程序的系统,包括:服务器和客户端,其中,所述服务器,用于收客户端发送的运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号;当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段;将所述已修复程序段发送到所述客户端;所述客户端,用于接收服务器预先配置的已修复程序段;存储所述已修复程序段;记录存储所述已修复程序段的地址;将所述已修复程序段的地址存储到应用程序APP中,以便于所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。
[0023]由以上技术方案可知,本发明实施例所提供的动态修复应用程序的方法、装置及相关系统,在APP需要修复时,客户端接收服务器预先配置的已修复程序段,在存储所述已修复程序段之后,记录所述已修复程序段的地址,并将已修复程序段的地址存储到APP中,从而在APP运行过程中,通过已修复程序段的地址查找到已修复程序段,并执行已修复程序段。因此,与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提高用户体验。
【附图说明】
[0024]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本发明的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本发明的主旨。
[0025]图1为本发明实施例提供的动态修复应用程序方法的方法流程图;
[0026]图2为本发明实施例提供的动态修复应用程序的方法的第二种实施方式的方法流程图;
[0027]图3为本发明实施例提供的动态修复应用程序的方法的第三种实施例方式的方法流程图;
[0028]图4为本发明实施例提供的动态修复应用程序的方法的第四种实施例方式的方法流程图;
[0029]图5为本发明实施例提供的动态修复应用程序的装置的结构示意图;
[0030]图6为本发明实施例提供的动态修复应用程序的装置第二种实施方式的结构示意图;
[0031]图7为本发明实施例提供的动态修复应用程序的系统的结构示意图。
【具体实施方式】
[0032]需要指出的是,1S系统的开发语言为Objective-C语言(本发明实施例中简称为OC语言),因此,基于1S系统运行的APP均使用OC语言开发。其中,使用OC语言开发的程序在执行时,通过调用不同的方法实现不同的功能,而不同的方法属于不同的类,所以,在APP运行过程中需要调用某一方法时,首先确定该方法所属的类,然后,从类中查找并调用该方法。基于OC语言的语法,类和方法对应的实现程序段均存储在移动终端的内存中,APP中对应记录存储程序段的地址,因此,APP在运行时,通过地址查找并调用相关程序段。基于上述实现过程,本发明实施例的技术方案,通过修改程序段的地址改变APP所调用的程序段,从而对APP的功能进行修复。
[0033]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0034]由于本发明实施例的技术方案中,修复APP的具体操作主要在客户端完成,因此,为了使本领域技术人员准确的了解本方案,下面将从客户端的角度对本方案进行说明。
[0035]请参见图1,图1为本发明实施例提供的动态修复应用程序的方法流程图。本实施例将从整体上介绍本发明的实现方法,所述方法包括以下步骤:
[0036]步骤SlOl:客户端接收预先配置的已修复程序段。
[0037]其中,当客户端运行APP时,该APP可以通过客户端向其对应的服务器发送连接请求,其中,连接请求中包括该APP的版本号。服务器在读取该APP的版本号之后,可以通过该APP的版本号确定该APP需要修复的程序,从而预先配置该APP对应的已修复程序段,并发送到客户端。需要说明的是,服务器根据APP的版本号配置已修复程序段的过程详见下述实施例的描述,本发明实施例此处不做详述。
[0038]由于APP的执行过程是调用一个个方法程序段的过程,因此,本方案所述的已修复程序段可以视为程序段合集,包括至少一个程序段,并且每个程序段对应实现一种方法。此外,为了能够明确每个程序段所表示的内容及所属的类,服务器可以根据程序段所表示的方法的属性值,或者方法名称,为每个程序段添加标识信息,用于客户端识别已修复程序段,从而便于客户端修复APP。
[0039]例如,当用户在iphone手机上运行UC浏览器时,当前版本号的UC浏览器相对于最新版本号的UC浏览器缺少添加控件的功能,那么,服务器将添加控件的执行程序作为已修复程序段发送到客户端,由客户端在当前运行的UC浏览器的基础上,将添加控件的程序段加入。
[0040]步骤S102:存储所述已修复程序段。
[0041]其中,现有技术中,如果直接修改OC语言开发的程序,1S系统能够检测得知,从而不允许修改操作的执行,导致无法通过直接修改OC语言来在线修复APP。为解决该问题,技术人员在开发APP时,预先在APP中设置有修复平台,该修复平台通过在1S系统中可修改的编程语言编写,而且能够提供调用OC语言代码的环境。具体的,由于1S系统允许JavaScript代码执行,因此,在本发明的一个优选示例中,修复平台可以使用JavaScript代码编写。当然也可以使用其他满足上述条件的语言编写,本发明实施例对此不做限制。
[0042]本实施例中,将使用JavaScript代码编写的修复平台称为JS平台。当JS平台接收到已修复程序段之后,首先,将已修复程序段存储到客户端内存,然后,获取已修复程序段在内存中的存储地址。由此可见,为了保证JS平台能够识别所接收的已修复程序段,月艮务器可以直接使用JavaScript代码编写已修复程序段。
[0043]为了保证APP运行时能够直接调用所存储的已修复程序段,在JS平台接收到已修复程序段,并根据标识信息识别每个已修复程序段之后,将每个已修复程序段转换为APP能识别的格式,然后再存储到内存中。具体的,转换代码格式的方法为本领域技术人员所熟知的技术,本发明实施例此处不再赘述。
[0044]本实施例中,通过设置修复平台,能够在APP动态运行时,接收用于执行的已修复程序段,从而既能够满足1S系统的规则,又能够在APP运行时动态修复APP。
[0045]步骤S103:记录存储所述已修复程序段的地址。
[0046]其中,由上述描述可知,OC程序执行时首先查找待调用方法的地址,然后根据所读取的地址查找并执行方法对应的程序。因此,JS平台将已修复程序段存储到内存之后,记录存储已修复程序段的地址,以便于将已修复程序段的地址存储到APP的相应位置,使APP运行过程中读取到已修复程序段的地址。
[0047]需要说明的是,由上述描述可知,已修复程序段是程序段的合集,而本实施例所述的已修复程序段的地址具体为,已修复程序段中每个已修复程序段所对应的存储地址。
[0048]步骤S104:将所述已修复程序段的地址存储到应用程序APP中。
[0049]其中,本实施例中,APP在运行时能够调用已修复程序段,并执行已修复程序段,则认为已经对APP完成修复,因此,在JS平台存储已修复程序段之后,需要将已修复程序段的地址存储到APP中。
[0050]根据上述描述可知,在OC语言编写的程序中,方法从属于一个类,在本实施例中,可以将类作为程序段所属的功能模块,每个功能模块同样对应一个存储地址。在APP执行过程中,通常先读取到功能模块的地址,确定功能模块的地址之后,再确定程序段的地址,因此,为了便于APP更加高效的运行,功能模块的地址和程序段的地址在APP中可以按照从属关系进行存储。具体的,每个地址对应写在一个存储节点,功能模块的地址所对应的存储节点可以看做根存储节点,而从属于该功能模块的程序段的地址所对应的存储节点,为该根存储节点的子存储节点,从而能够清晰的反应地址的对应关系。因此,本实施例中,应当将已修复程序段的地址写入到APP中相应的存储节点。
[0051]需要指出的是,1S系统提供有runtime机制,runtime机制是指,系统将把某些可以重复使用的程序或者实例打包或者重建成为“运行库",而“运行库”中的程序或者实例可以在运行时被连接或者被任何程序调用。因此,本方案中JS平台读取和调用APP的程序和地址的过程,均是通过runtime机制完成。其中,JS平台通过runtime机制调用APP程序和地址的方法和过程,为本领域技术人员所熟知的技术,本发明实施例此处不再赘述。
[0052]此外,由于JS平台与APP的程序语言不同,所以能够识别的程序格式也不相同,在JS平台调用APP的相应程序时,OC程序首先按照预设格式封装JS平台调用的程序,然后再将封装后的程序传递至JS平台。具体的,JS平台可以通过正则表达式把所有的程序调用都改成调用一个固定的_oc()函数,S卩,JS平台所调用的程序均需要以_oc()函数的格式封装。具体的,由于JavaScript语言具有将OC语言中的NSDict1nary与JavaScript对象自动转换的特性,因此,当JS平台调用APP中的程序段时,OC程序可以将JS调用的程序封装成一个NSDict1nary,并在NSDict1nary中将指出该程序段的类名、方法名及指针等,从而能够保证JS平台调用任意的OC程序。
[0053]由本实施例的描述可知,本方案通过在APP中设置修复平台,能够在不违背1S开发规则的情况下,接收用于执行的已修复程序段,并依据已修复程序段动态修复APP,从而能够避免APP下线、修复、再审核所消耗的时间。
[0054]此外,修复APP通常是对APP执行下述三种操作,向APP中添加程序段、从APP中删除程序段以和修改APP中的部分程序段,而上述实施例对本方案的描述相对概括,为了使本领域技术人员更加清楚的理解本方案,下面基于上述三种修复操作,分别对本发明实施例的技术方案进行详细描述。
[0055]需要说明的是,下述实施例是在上述实施例基础上的展开,也是对上述实施例的补充,因此,本实施例中与上述实施例相同的步骤,详见上述实施例的描述,本实施例不再赘述。
[0056]请参见图2,图2为本发明实施例提供的动态修复应用程序方法的第二种实施方式的方法流程图,本实施例将对添加程序段的操作过程进行描述。本实施例所述方法包括下述步骤:
[0057]步骤S201:客户端接收预先配置的已修复程序段。
[0058]其中,基于上述实施例的描述可知,已修复程序段是方法程序段的合集,包括至少一个完整方法对应的程序段,因此,为了明确客户端需要对每个已修复程序段执行的操作,服务器针对每个已修复程序段预先添加操作指令,操作指令可以通过数字或者字母表示,本发明实施例对此不做限制。客户端在接收到已修复程序段之后,可以根据操作指令对已修复程序段的地址执行相应操作。例如,本实施例中,添加操作的操作指令可以设置为“ad”或者其他标识信息,当客户端读取到操作指令信息之后,根据操作指令确定下一步操作。
[0059]步骤S202:存储所述已修复程序段。
[0060]步骤S203:记录存储所述已修复程序段的地址。
[0061]步骤S204:在所述APP中创建所述已修复程序段的地址对应的存储节点。
[0062]其中,根据上述描述可知,APP中的地址通过存储节点形成从属关系,因此,当向APP添加程序段时,需要将已修复程序段的地址写到其相应的存储节点。由于所添加程序段为新程序段,所以,APP中不存在写入已修复程序段地址存储节点,在将已修复程序段的地址存储到APP之前,需要创建已修复程序段地址对应的存储节点。
[0063]由于已修复程序段从属于某一功能模块,所以,已修复程序段的地址对应的存储节点,应当为功能模块的地址所对应的存储节点的子存储节点,因此,客户端可以根据已修复程序段的标识信息查找该功能模块的地址,并根据功能模块的地址确定其对应的存储节点,然后,以该功能模块的地址对应的存储节点为根节点,添加新的子存储节点,该新的子存储节点即为所添加的已修复程序段的地址所对应的存储节点。
[0064]需要说明的是,存储节点可以为存储位置的标记,因此,创建存储节点的过程是确定存储位置,并在所确定的存储位置添加标记的过程,具体的,为本领域技术人员所熟知的技术手段,本发明实施例此处不再详述。
[0065]步骤S205:在已创建的所述存储节点写入所述已修复程序段的地址。
[0066]基于上述步骤,在创建存储节点之后,APP将所创建的存储节点按照预设封装格式进行封装,并发送至JS平台,JS平台获知存储节点后,向APP发送在存储节点写入已修复程序段的地址的命令,完成对已修复程序段的地址的存储。
[0067]由本实施例的描述可知,向APP添加程序段时,无须修改APP对应的执行程序,仅在APP中添加新的存储节点即可,从而能够避免对1S系统的修改,向APP动态添加已修复程序段。
[0068]上述实施例基于添加程序段的场景对本发明实施例的技术方案进行了描述,除此之外,本方案还包括修改程序段和删除程序段的场景,下述实施例将基于修改程序段和删除程序段的场景对本方案进行描述。
[0069]请参见图3,图3为本发明实施例提供的动态修复应用程序的方法的第三种实施例方式的方法流程图,所述方法包括如下步骤:
[0070]步骤S301:客户端接收预先配置的已修复程序段。
[0071 ] 其中,本实施例中,当修改程序段时,JS平台通过使用已修复程序段替换待修复程序段的方式,将APP所执行的原程序段替换为新程序段,因此,客户端所接收的已修复程序段的操作指令为“替换”指令。
[0072]此外,需要说明的是,当删除某个程序段时,由于待删除程序段不存在对应的已修复程序段,所以,可以将待删除程序段对应的已修复程序段视为空,服务器可以仅将待删除程序段的标识信息和“替换”操作指令发送到客户端。
[0073]步骤S302:存储所述已修复程序段。
[0074]步骤S303:记录存储所述已修复程序段的地址。
[0075]其中,由于待删除程序段所对应的已修复程序段为空,因此,不存在已修复程序段对应的地址,该待删除程序段的已修复程序段地址也为空,空的存储地址可以使用“O”表不O
[0076]步骤S304:从所述APP中读取待修复程序段的地址对应的存储节点。
[0077]其中,在删除程序段和替换程序段时,APP中均存储有修复前的待修复程序段地址,因此,JS平台在接收到已修复程序段的地址后,需要向APP发送查找待修复程序段的地址对应的存储节点的命令,当APP接收到命令后,可以根据已修复程序段的标识信息查找到对应的功能模块的地址,并确定该功能模块的地址所对应的存储节点。由于待修复程序段是该功能模块的子程序段,因此,可以在所确定的存储节点的子存储节点中查找待修复程序段地址的存储节点。同样的,APP查找到待修复程序段地址的存储节点后,按照预设封装格式封装后再发送至JS平台。
[0078]需要说明的是,在OC语言程序中,大部分方法程序段通过列表的形式存储,方法程序段在列表中通过指针指向,那么,指向方法程序段的指针为方法程序的地址。而上述在APP中查找存储节点的方法,为基于该场景的描述。
[0079]然而,在OC语言程序中,还包括部分需直接执行的方法程序,例如,super方法和self方法,该类程序在APP中不存在地址,因此,也不存在存储节点。所以,当待修复程序段为此类程序时,APP首先根据标识信息查找相应的功能模块,从功能模块对应的程序段中查找到待修复程序段之后,为该待修复程序段添加读取路径,该读取路径即是待修复程序段的地址,而所添加的地址在APP中对应存储节点为待发送到JS平台的存储节点。
[0080]步骤S305:在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址。
[0081]其中,由上述描述可知,本实施例中,通过使用已修复程序段的地址替换待修复程序段的地址,来修复待修复程序段,因此,将已修复程序段的地址写入APP的同时,已修复程序段的地址覆盖待修复程序段的地址,从而使得APP执行时,无法通过待修复程序段的地址调用到待修复程序段,完成修复。
[0082]当对APP的修复操作是删除程序段时,修复过程与上述过程相同,由于已修复程序段的地址为“0”,修复之后,已修复程序段的地址不指向任何程序段,从而在APP运行时,既无法调用到待修复程序段,也无法调用到其他程序段,等同于已删除待修复程序。
[0083]由本实施例的描述可知,通过将待修复程序段的地址替换为已修复程序段的地址,能够在不下发新程序的基础上替换待修复程序段,从而能够在APP动态运行的情况下完成对APP的修复,避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提高用户体验。
[0084]上述实施例从客户端的角度阐述了本方案的技术内容,为了使本领域技术人员对本方案有更加全面、完整的了解,下面从服务器的角度对本方案进行描述。
[0085]请参见图4,图4为本发明实施例提供的动态修复应用程序的方法的第四种实施例方式的方法流程图,所述方法包括下述步骤:
[0086]步骤S401:服务器接收运行应用系统APP的连接请求。
[0087]其中,当用户在客户端点击运行APP时,APP通过客户端向其对应的服务器发送连接请求,该连接请求中包括待运行APP的版本号,服务器可以根据待运行APP的版本号确定待运行APP是否需要修复。
[0088]步骤S402:当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段。
[0089]其中,版本号是每一代APP的版本标识,工程人员通过版本号能够了解每一代APP所提供的功能,而且,每个版本的APP均是在上一版本的APP基础上的改进,因此,当服务器读取客户端待运行APP的版本号之后,可以通过判断该版本号是否为最高版本号来确定待运行APP是否需要修复,如果该版本号是最高版本号,则认为客户端当前待运行的APP无须修复,服务器可以向客户端返回常规的运行信息;如果该版本号不是最高版本号,则客户端当前待运行的APP需要修复,服务器针对该版本号的APP配置已修复程序段,以便于客户端按照已修复程序段修复待运行的APP。
[0090]由于APP的开发及维护均在服务器端完成,服务器存储有各个版本的APP对应的程序,因此,本实施例中,服务器可以获取版本号高于客户端APP的版本号的所有APP程序,按照版本号从小到大的顺序逐一获取高版本号的APP与客户端APP不同的程序段,并为每个程序段按照属性信息添加标识信息,得到已修复程序段。
[0091]例如,客户端运行的UC浏览器版本号为5.1.0,而UC浏览器的最高版本号为
5.1.3,当服务器接收客户端运行版本号为5.1.0的UC浏览器的请求后,获取版本号为
5.1.1,5.1.2和5.1.3的UC浏览器程序,并分别获取版本号为5.1.1与版本号为5.1.0,版本号为5.1.2与版本号为5.1.0,以及版本号为5.1.3与版本号为5.1.0的UC浏览器的不同程序段,根据每个程序段的属性值为程序段添加标识信息,形成版本号为5.1.0的UC浏览器的已修复程序段。
[0092]需要说明的是,为了减少配置已修复程序段的步骤,提高配置已修复程序段的效率,工程人员每开发出新一个版本的APP时,可以将该版本的APP与上一版本的APP的区别程序段单独存储,以使服务器配置已修复程序段时,能够直接获取已修复程序段。
[0093]此外,为了便于客户端的修复平台识别和处理已修复程序段,服务器可以使用与修复平台的编程语言相同的变成语言进行编写,例如,在本实施例中,由于修复平台使用JavaScript代码编写,服务器也可以使用JavaScript代码编写已修复程序段。
[0094]骤S403:将所述已修复程序段发送到客户端。
[0095]其中,当服务器配置完成已修复程序段之后,将已修复程序段发送到客户端,由客户端修复当前待运行的APP,详见上述实施例的描述,本发明实施例不再赘述。
[0096]由此可见,本发明实施例所提供的动态修复应用程序的方法,在APP需要修复时,客户端接收服务器预先配置的已修复程序段,在存储所述已修复程序段之后,记录所述已修复程序段的地址,并将已修复程序段的地址存储到APP中,从而在APP运行过程中,通过已修复程序段的地址查找到已修复程序段,并执行已修复程序段。因此,与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提高用户体验。
[0097]与上述实现方法相对应的,本发明实施例还提供了一种动态修复应用程序的装置,请参见图5,图5为本发明实施例提供的动态修复应用程序的装置的结构示意图,本实施例将针对客户端的装置结构进行描述。
[0098]所述装置包括:接收模块11、存储模块12和记录模块13,其中,所述接收模块11,用于接收预先配置的已修复程序段;所述存储模块12,用于存储所述接收模块11所接收的已修复程序段;所述记录模块13,用于记录所述存储模块12存储所述已修复程序段的地址;本实施例中,所述存储模块12,还用于将所述记录模块13记录的已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。
[0099]所述装置中各个模块的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
[0100]由本实施例的描述可知,本方案通过在APP中设置修复平台,能够在不违背1S开发规则的情况下,接收用于执行的已修复程序段,并依据已修复程序段动态修复APP,从而能够避免APP下线、修复、再审核所消耗的时间。
[0101]需要说明的是,在本实施例中,存储模块12包括:创建单元和写入单元,其中,所述创建单元,用于在所述APP中创建所述已修复程序段的地址对应的存储节点;所述写入单元,用于在已创建的所述存储节点写入所述已修复程序段的地址。
[0102]其中,在本实施例中,所述创建单元包括:第一读取子单元、第一查找子单元、第一确定子单元和第一添加子单元,其中,所述第一读取子单元,用于读取所述已修复程序段的标识信息;所述第一查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;所述第一确定子单元,用于确定所述功能模块的地址所对应的存储节点;所述第一添加子单元,用于为所述功能模块的地址对应的存储节点添加子存储节点,并将所述子存储节点作为所述已修复程序段的地址的存储节点。
[0103]而在另一个实施例中,所述存储模块还包括:读取单元,其中,所述读取单元,用于从所述APP中读取待修复程序段的地址对应的存储节点,其中,所述待修复程序段是所述已修复程序段修复之前的程序段。在本实施例中,所述写入单元,还用于在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址,以使用所述已修复程序段的地址替换所述待修复程序段的地址。
[0104]其中,在本实施例中,所述读取单元包括:第二读取子单元、第二查找子单元和第二确定子单元,其中,所述第二读取子单元,用于读取所述已修复程序段的标识信息;所述第二查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址;所述第二确定子单元,用于确定所述功能模块的地址所对应的存储节点;所述第二查找子单元,还用于以所述功能模块的地址对应的存储节点为根存储节点,从子存储节点中查找所述待修复程序的地址对应的存储节点。
[0105]在上述实施例的基础上,在另一个实施例中,所述读取单元包括:第二添加子单元,其中,在本实施例中,所述第二查找子单元,还用于根据所述标识信息查找所述已修复程序段所属的功能模块;所述第二确定子单元,还用于从所述功能模块中确定所述待修复程序段;所述第二添加子单元,用于为所述待修复程序段添加存储地址;所述第二确定子单元,还用于将所添加的所述待修复程序段的存储地址对应的存储节点确定为所述待修复程序段的地址对应的存储节点。
[0106]所述装置中各个模块和单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
[0107]由本实施例的描述可知,本发明实施例所提供的动态修复应用程序的装置,与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提尚用户体验。
[0108]上述实施例从客户端的角度对本方案中的装置进行了描述,为了使本领域技术人员对本方案有更加全面、完整的了解,下面从服务器的角度对装置进行描述。
[0109]请参见图6,图6为本发明实施例提供的动态修复应用程序的装置第二种实施方式的结构示意图,所述装置包括:接收模块21、配置模块22和发送模块23,其中,接收模块21,用于接收运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号;配置模块22,用于当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段;发送模块23,用于将所述已修复程序段发送到客户端。
[0110]其中,在本实施例中,配置模块包括:获取单元、添加单元和确定单元,其中,获取单元,用于顺次从版本号大于所述当前版本号的APP中获取与所述APP不同的程序段;添加单元,用于按照属性值为所述程序段添加标识信息;确定单元,用于将添加有所述标识信息的程序段确定为所述已修复程序段。
[0111]所述装置中各个模块和单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
[0112]由此可见,本发明实施例所提供的动态修复应用程序的装置,在APP需要修复时,客户端接收服务器预先配置的已修复程序段,在存储所述已修复程序段之后,记录所述已修复程序段的地址,并将已修复程序段的地址存储到APP中,从而在APP运行过程中,通过已修复程序段的地址查找到已修复程序段,并执行已修复程序段。因此,与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提高用户体验。
[0113]与上述实现方法和装置相对应的,本发明实施例还提供了一种动态修复应用程序的系统,参见图7,图7为本发明实施例提供的动态修复应用程序的系统的结构示意图,所述系统包括:服务器I和客户端2。其中,服务器1,用于收客户端2发送的运行应用系统APP的连接请求,其中,连接请求中包括APP的当前版本号;当当前版本号小于最高版本号时,对应APP配置已修复程序段,并将已修复程序段发送到客户端2 ;客户端2用于接收服务器I预先配置的已修复程序段;存储已修复程序段;记录存储已修复程序段的地址;将已修复程序段的地址存储到应用程序APP中,以便于APP运行时通过已修复程序段的地址调用已修复程序段。
[0114]需要说明的是,服务器I与客户端2的具体操作过程与结构,详见上述实施例的描述,本发明实施例此处不在赘述。
[0115]综合上述,本发明实施例所提供的动态修复应用程序的方法、装置及相关系统,在APP需要修复时,客户端接收服务器预先配置的已修复程序段,在存储所述已修复程序段之后,记录所述已修复程序段的地址,并将已修复程序段的地址存储到APP中,从而在APP运行过程中,通过已修复程序段的地址查找到已修复程序段,并执行已修复程序段。因此,与现有技术相比,本发明实施例的技术方案,能够在线上修复APP,从而能够避免APP下线、修复、再审核所消耗的时间,进而不仅能够降低APP的成本消耗,大大降低崩溃率,而且能够提尚用户体验O
[0116]以上所述仅是本发明的【具体实施方式】,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种动态修复应用程序的方法,其特征在于,包括: 客户端接收预先配置的已修复程序段; 存储所述已修复程序段; 记录存储所述已修复程序段的地址; 将所述已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。2.如权利要求1所述的方法,其特征在于,将所述已修复程序段的地址存储到应用程序APP中,包括: 在所述APP中创建所述已修复程序段的地址对应的存储节点; 在已创建的所述存储节点写入所述已修复程序段的地址。3.如权利要求1所述的方法,其特征在于,将所述已修复程序段的地址存储到应用程序APP中,包括: 从所述APP中读取待修复程序段的地址对应的存储节点,其中,所述待修复程序段是所述已修复程序段修复之前的程序段; 在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址,以使用所述已修复程序段的地址替换所述待修复程序段的地址。4.如权利要求2所述的方法,其特征在于,所述在所述APP中创建所述已修复程序段的地址的存储节点包括: 读取所述已修复程序段的标识信息; 根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址; 确定所述功能模块的地址所对应的存储节点; 为所述功能模块的地址对应的存储节点添加子存储节点,并将所述子存储节点作为所述已修复程序段的地址的存储节点。5.如权利要求3所述的方法,其特征在于,所述从所述APP中读取待修复程序段的地址对应的存储节点包括: 读取所述已修复程序段的标识信息; 根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址; 确定所述功能模块的地址所对应的存储节点; 以所述功能模块的地址对应的存储节点为根存储节点,从子存储节点中查找所述待修复程序的地址对应的存储节点。6.如权利要求3所述的方法,其特征在于,所述从所述APP中读取待修复程序段的地址对应的存储节点包括: 读取所述已修复程序段的标识信息; 根据所述标识信息查找所述已修复程序段所属的功能模块; 从所述功能模块中确定所述待修复程序段; 为所述待修复程序段添加存储地址; 将所添加的所述待修复程序段的存储地址对应的存储节点确定为所述待修复程序段的地址对应的存储节点。7.—种动态修复应用程序的方法,其特征在于,包括: 服务器接收运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号; 当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段; 将所述已修复程序段发送到客户端,由所述客户端存储所述已修复程序段;获取存储所述已修复程序段的地址;将所述已修复程序段的地址存储到所述APP中,以便于所述APP运行时,所述客户端通过所述已修复程序段的地址调用所述已修复程序段。8.如权利要求7所述的方法,其特征在于,所述对应所述APP配置已修复程序段包括: 顺次从版本号大于所述当前版本号的APP中获取与所述APP不同的程序段; 按照属性值为所述程序段添加标识信息; 将添加有所述标识信息的程序段确定为所述已修复程序段。9.一种动态修复应用程序的装置,其特征在于,包括: 接收模块,用于接收预先配置的已修复程序段; 存储模块,用于存储所述接收模块所接收的已修复程序段; 记录模块,用于记录所述存储模块存储所述已修复程序段的地址; 所述存储模块,还用于将所述记录模块记录的已修复程序段的地址存储到应用程序APP中,所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。10.如权利要求9所述的装置,其特征在于,所述存储模块包括:创建单元和写入单元,其中, 所述创建单元,用于在所述APP中创建所述已修复程序段的地址对应的存储节点; 所述写入单元,用于在已创建的所述存储节点写入所述已修复程序段的地址。11.如权利要求9所述的装置,其特征在于,所述存储模块还包括:读取单元,其中, 所述读取单元,用于从所述APP中读取待修复程序段的地址对应的存储节点,其中,所述待修复程序段是所述已修复程序段修复之前的程序段; 所述写入单元,还用于在所述待修复程序段的地址对应的存储节点写入所述已修复程序段的地址,以使用所述已修复程序段的地址替换所述待修复程序段的地址。12.如权利要求10所述的装置,其特征在于,所述创建单元包括:第一读取子单元、第一查找子单元、第一确定子单元和第一添加子单元,其中, 所述第一读取子单元,用于读取所述已修复程序段的标识信息; 所述第一查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址; 所述第一确定子单元,用于确定所述功能模块的地址所对应的存储节点; 所述第一添加子单元,用于为所述功能模块的地址对应的存储节点添加子存储节点,并将所述子存储节点作为所述已修复程序段的地址的存储节点。13.如权利要求11所述的装置,其特征在于,所述读取单元包括:第二读取子单元、第二查找子单元和第二确定子单元,其中, 所述第二读取子单元,用于读取所述已修复程序段的标识信息; 所述第二查找子单元,用于根据所述标识信息从所述APP中查找所述已修复程序段所属的功能模块的地址; 所述第二确定子单元,用于确定所述功能模块的地址所对应的存储节点; 所述第二查找子单元,还用于以所述功能模块的地址对应的存储节点为根存储节点,从子存储节点中查找所述待修复程序的地址对应的存储节点。14.如权利要求11所述的装置,其特征在于,所述读取单元包括:第二添加子单元,其中, 所述第二查找子单元,还用于根据所述标识信息查找所述已修复程序段所属的功能模块; 所述第二确定子单元,还用于从所述功能模块中确定所述待修复程序段; 所述第二添加子单元,用于为所述待修复程序段添加存储地址; 所述第二确定子单元,还用于将所添加的所述待修复程序段的存储地址对应的存储节点确定为所述待修复程序段的地址对应的存储节点。15.一种动态修复应用程序的装置,其特征在于,包括: 接收模块,用于接收运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号; 配置模块,用于当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段; 发送模块,用于将所述已修复程序段发送到客户端。16.如权利要求15所述的装置,其特征在于,所述配置模块包括:获取单元、添加单元和确定单元,其中, 所述获取单元,用于顺次从版本号大于所述当前版本号的APP中获取与所述APP不同的程序段; 所述添加单元,用于按照属性值为所述程序段添加标识信息; 所述确定单元,用于将添加有所述标识信息的程序段确定为所述已修复程序段。17.—种动态修复应用程序的系统,其特征在于,包括:服务器和客户端,其中, 所述服务器,用于收客户端发送的运行应用系统APP的连接请求,其中,所述连接请求中包括所述APP的当前版本号;当所述当前版本号小于最高版本号时,对应所述APP配置已修复程序段;将所述已修复程序段发送到所述客户端; 所述客户端,用于接收服务器预先配置的已修复程序段;存储所述已修复程序段;记录存储所述已修复程序段的地址;将所述已修复程序段的地址存储到应用程序APP中,以便于所述APP运行时通过所述已修复程序段的地址调用所述已修复程序段。
【文档编号】G06F9/44GK106020786SQ201510742193
【公开日】2016年10月12日
【申请日】2015年11月2日
【发明人】张志坚, 马妙魁
【申请人】广州市动景计算机科技有限公司