应用更新方法、装置、计算机设备及存储介质与流程

文档序号:29119221发布日期:2022-03-04 20:46阅读:102来源:国知局
应用更新方法、装置、计算机设备及存储介质与流程

1.本技术实施例涉及计算机技术领域,特别涉及一种应用更新方法、装置、计算机设备及存储介质。


背景技术:

2.在应用发布之后,通常会对应用进行更新,以此来满足用户日益增长的需求。随着计算机技术的发展,应用的功能越来越丰富,更新速度也越来越快。在更新某一设备上的应用时,该设备下载应用更新后的应用程序包,并安装该应用程序包,实现对应用的更新。但是,由于上述方法需要下载并安装应用程序包,更新效率低。


技术实现要素:

3.本技术实施例提供了一种应用更新方法、装置、计算机设备及存储介质,能够提高应用更新的效率。所述技术方案如下:
4.一方面,提供了一种应用更新方法,所述方法包括:
5.获取应用的更新信息,所述更新信息包括至少一个函数名称和每个函数名称对应的更新代码;
6.在所述应用运行过程中,拦截携带目标函数名称的调用指令,所述目标函数名称为所述更新信息中的任一函数名称;
7.执行所述目标函数名称对应的目标更新代码。
8.另一方面,提供了一种应用更新装置,所述装置包括:
9.更新信息获取模块,用于获取应用的更新信息,所述更新信息包括至少一个函数名称和每个函数名称对应的更新代码;
10.指令拦截模块,用于在所述应用运行过程中,拦截携带目标函数名称的调用指令,所述目标函数名称为所述更新信息中的任一函数名称;
11.代码执行模块,用于执行所述目标函数名称对应的目标更新代码。
12.在一种可能实现方式中,所述指令拦截模块,用于在所述应用运行过程中,通过所述应用中的动态引擎,拦截携带目标函数名称的调用指令;
13.所述代码执行模块,用于通过所述动态引擎,执行所述目标函数名称对应的目标更新代码。
14.在另一种可能实现方式中,所述动态引擎包括消息拦截器;所述指令拦截模块,包括:
15.指令拦截单元,用于在所述应用运行过程中,通过所述消息拦截器,拦截携带目标函数名称的调用指令。
16.在另一种可能实现方式中,所述指令拦截单元,包括:
17.指针指向子单元,用于在所述应用运行过程中,通过所述消息拦截器监听到所述调用指令,将所述目标函数名称对应的函数指针指向消息转发函数指针;
18.指令拦截子单元,用于运行所述消息转发函数指针对应的接口拦截函数,对所述调用指令进行拦截。
19.在另一种可能实现方式中,所述运行所述消息转发函数指针对应的接口拦截函数,对所述调用指令进行拦截之后,所述执行所述目标函数名称对应的目标更新代码之前,所述装置还包括:
20.函数指针指向模块,用于将所述接口拦截函数的函数指针指向所述消息拦截器中的回调函数;
21.代码查询模块,用于运行所述回调函数,在所述更新信息中查询所述目标函数名称对应的目标更新代码。
22.在另一种可能实现方式中,所述更新代码包括多个字符,所述动态引擎包括词法分析器、语法解析器及语句执行器;
23.所述代码执行模块,包括:
24.分析处理单元,用于通过所述词法分析器,对所述更新代码进行分析处理,得到令牌token组合,所述token组合包括多个token,每个token包括字符组合及对应的字符类型,所述字符组合包括至少一个字符;
25.语法解析单元,用于通过所述语法解析器,对所述多个token进行语法解析,得到抽象语法树,所述抽象语法树包括单行语句或控制语句中的至少一种;
26.语句执行单元,用于通过所述语句执行器,执行所述抽象语法树中的语句。
27.在另一种可能实现方式中,所述分析处理单元,包括:
28.分析处理子单元,用于通过所述词法分析器,按照所述多个字符的顺序,对所述更新代码进行分析处理,得到多个字符组合;
29.生成子单元,用于根据所述多个字符组合及每个字符组合对应的字符类型,生成所述多个token;
30.组合处理子单元,用于对所述多个token进行组合处理,得到所述token组合。
31.在另一种可能实现方式中,所述抽象语法树包括多个节点,每个节点包括所述单行语句或所述控制语句;所述语句执行单元,包括:
32.路径确定子单元,用于通过所述语句执行器,遍历所述抽象语法树中的每个节点,确定所述调用指令对应的路径,所述路径包括至少一个节点;
33.语句执行子单元,用于按照所述路径,执行所述路径中每个节点的语句。
34.在另一种可能实现方式中,所述更新信息获取模块,包括:
35.第一请求发送单元,用于向服务器发送更新信息获取请求;
36.信息接收单元,用于接收所述服务器根据所述更新信息获取请求返回的所述更新信息。
37.在另一种可能实现方式中,所述更新信息获取模块,包括:
38.第二请求发送单元,用于向服务器发送更新信息获取请求,以使所述服务器按照目标协议对所述更新信息进行处理,得到更新响应数据,将所述更新响应数据返回至所述应用;
39.数据接收单元,用于接收所述服务器返回的所述更新响应数据;
40.信息提取单元,用于按照所述目标协议,从所述更新响应数据中提取所述更新信
息。
41.另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行以实现如上述方面所述的应用更新方法中所执行的操作。
42.另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现如上述方面所述的应用更新方法中所执行的操作。
43.再一方面,提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机程序代码,所述计算机程序代码存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序代码,处理器执行所述计算机程序代码,使得所述计算机设备实现如上述方面所述的应用更新方法中所执行的操作。
44.本技术实施例提供的技术方案带来的有益效果至少包括:
45.本技术实施例提供的方法、装置、计算机设备及存储介质,应用获取到更新信息后,在拦截到携带目标函数名称调用指令时,不再执行函数名称对应的原代码,而是直接执行目标函数名称对应的目标更新代码,实现了目标函数的在线更新,无需设备下载并安装应用的应用程序包,提高了应用更新的效率。并且,在应用运行过程中自动对应用进行在线更新,该在线更新过程用户无感知,减小了应用更新对用户的影响。并且,本技术实施例提供的自动更新方法,在应用具有更新信息时,即可在应用运行过程中实现自动更新,无需用户主动触发再对应用进行更新,从而有效提高了应用更新的覆盖率,保持应用的当前版本为最新的版本,降低了后台需要维护的应用的版本数量,从而降低了维护成本。
附图说明
46.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
47.图1是本技术实施例提供的一种实施环境的结构示意图;
48.图2是本技术实施例提供的一种应用更新方法的流程图;
49.图3是本技术实施例提供的一种应用更新方法的流程图;
50.图4是本技术实施例提供的一种动态引擎对应用的更新的流程图;
51.图5是本技术实施例提供的一种消息拦截器拦截调用指令的流程图;
52.图6是本技术实施例提供的一种词法分析器对更新代码进行处理的流程图;
53.图7是本技术实施例提供的一种语法解析器生成抽象语法树的流程图;
54.图8是本技术实施例提供的一种语句执行器的结构示意图;
55.图9是本技术实施例提供的一种代码组成的示意图;
56.图10是本技术实施例提供的一种代码的示意图;
57.图11是本技术实施例提供的一种应用更新方法的流程图;
58.图12是本技术实施例提供的一种应用更新装置的结构示意图;
59.图13是本技术实施例提供的一种应用更新装置的结构示意图;
60.图14是本技术实施例提供的一种终端的结构示意图;
61.图15是本技术实施例提供的一种服务器的结构示意图。
具体实施方式
62.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
63.本技术所使用的术语“至少一个”、“多个”、“每个”、“任一”,至少一个包括一个、两个或两个以上,多个包括两个或两个以上,而每个是指对应的多个中的每一个,任一是指多个中的任意一个。举例来说,多个字符组合包括3个字符组合,而每个是指这3个字符组合中的每一个字符组合,任一是指这3个字符组合中的任意一个字符组合,可以是第一个字符组合,可以是第二个字符组合、也可以是第三个字符组合。
64.本技术实施例提供的应用更新方法,能够用于计算机设备中,可选地,该计算机设备为终端或服务器。可选地,该服务器是独立的物理服务器,或者是多个物理服务器构成的服务器集群或者分布式系统,或者是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选地,该终端是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱或智能手表等,但并不局限于此。可选地,终端以及服务器通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
65.图1是本技术实施例提供的一种实施环境的结构示意图,如图1所示,该实施环境包括终端101和服务器102,该终端101中安装有应用103。
66.终端101为应用103提供安装环境,将应用103安装在终端101中。服务器102为应用103对应的服务器,为该应用103提供服务。另外,该服务器102中存储有应用103的更新信息,通过与应用103之间的交互,将更新信息提供给应用103,供应用103根据该更新信息进行更新。
67.本技术实施例提供的方法,可用于应用更新场景中。在应用启动时,从服务器处获取到应用的更新信息,拦截携带更新信息中包括的函数名称的调用指令,不再执行该函数名称对应的原代码,后续执行更新信息中函数名称对应的更新代码,实现了对函数名称对应的函数功能,从而对应用的在线更新效果。
68.相关技术中,在应用未启动的情况下,下载并安装应用的应用程序包,而后运行应用程序,执行应用程序中的代码,与相关技术相比,本技术实施例提高了应用更新的效率。
69.图2是本技术实施例提供的一种应用更新方法的流程图,应用于计算机设备中,如图2所示,该方法包括:
70.201、计算机设备获取应用的更新信息。
71.其中,更新信息包括至少一个函数名称和每个函数名称对应的更新代码。函数名称为应用中实现一种功能的函数的名称,函数名称对应的更新代码是用来实现函数名称对应的功能的代码,与函数名称对应的原代码不同。也即是,执行函数名称对应的更新代码实现的功能,与执行函数名称对应的原代码实现的功能不同。
72.202、计算机设备在应用运行过程中,拦截携带目标函数名称的调用指令。
73.其中,目标函数名称为更新信息中的任一函数名称。
74.203、计算机设备执行目标函数名称对应的目标更新代码。
75.本技术实施例提供的方法,应用获取到更新信息后,在拦截到携带目标函数名称调用指令时,不再执行函数名称对应的原代码,而是直接执行目标函数名称对应的目标更新代码,实现了目标函数的在线更新,无需设备下载并安装应用的应用程序包,提高了应用更新的效率。并且,在应用运行过程中自动对应用进行在线更新,该在线更新过程用户无感知,减小了应用更新对用户的影响。并且,本技术实施例提供的自动更新方法,在应用具有更新信息时,即可在应用运行过程中实现自动更新,无需用户主动触发再对应用进行更新,从而有效提高了应用更新的覆盖率,保持应用的当前版本为最新的版本,降低了后台需要维护的应用的版本数量,从而降低了维护成本。
76.图3是本技术实施例提供的一种应用更新方法的流程图,交互主体包括终端和服务器,如图3所示,该方法包括:
77.301、终端向服务器发送更新信息获取请求。
78.其中,更新信息获取请求用于获取应用的更新信息。
79.在本技术实施例中,服务器中存储有应用的更新信息,应用向服务器发送更新信息获取请求,以使获取服务器存储的更新信息,后续能够根据该更新信息对应用进行更新。
80.在一种可能实现方式中,该步骤301包括:终端确定应用当前的当前版本信息,向服务器发送更新信息获取请求,该更新信息获取请求携带应用的当前版本信息。
81.可选地,当前版本信息包括应用的版本标识、更新时间等。其中,版本标识用于指示应用的版本,应用的不同版本对应的版本标识不同。例如,应用的版本标识为“2.0”、或“3.0”等。更新时间用于表示对应版本的更新信息上传至服务器的时间。
82.在终端向服务器发送更新信息获取请求时,该更新信息获取请求携带应用的当前版本信息,以使服务器后续能够根据应用的当前版本信息,从存储的数据中确定该应用对应的更新信息,即最新版本的应用对应的更新信息。
83.在一种可能实现方式中,该步骤301包括:在应用启动时,向服务器发送更新信息获取请求。例如,用户对终端中的应用图标的点击操作,此时应用启动,向服务器发送更新信息获取请求。
84.在一种可能实现方式中,该步骤301包括:在应用启动时,弹出更新提示界面,检测到对更新提示界面中的更新选项的触发操作,向服务器发送更新信息获取请求。其中,该更新选项用于触发向服务器发送更新信息获取请求。例如,在即时通信应用启动时,弹出更新提示界面,提示用户该应用具有对应的更新信息,终端基于该更新提示界面,检测到用户对更新提示界面中的更新选项的触发操作,则向服务器发送更新信息获取请求。
85.302、服务器接收更新信息获取请求,按照目标协议对更新信息进行处理,得到更新响应数据,将更新响应数据返回至应用。
86.其中,更新信息包括至少一个函数名称和每个函数名称对应的更新代码。函数名称表示应用中实现一种功能的函数的名称,不同的函数名称所指示的功能函数不同,例如,函数名称为跳转功能函数、颜色变换功能函数等。应用后续在对携带函数名称的调用指令进行响应时,不执行函数名称对应的原代码,执行该函数名称对应的更新代码,即可实现该函数更新后的功能,从而实现了对应用更新的效果。
87.目标协议是指应用与服务器之间进行通信需遵守的协议,可选地,该目标协议中定义了应用与服务器之间发送的数据的格式。
88.在一种可能实现方式中,该目标协议中包括交互信息模板,该交互信息模板包括多个字段,则该步骤302包括:服务器确定交互信息模板中与更新信息对应的目标字段,将更新信息添加至目标字段中,得到该更新响应数据。可选地,多个字段中还包括接口标识字段、地址字段等。
89.可选地,交互信息模板中包括函数名称字段及代码字段,更新信息包括多个函数名称及对应的更新代码,则服务器将多个函数名称依次添加至函数名称字段中,将多个函数名称对应的更新代码依次添加至代码字段中,且多个函数名称在函数名称字段中的排列顺序,与多个更新代码在代码字段中的排列顺序对应。例如,更新信息中包括函数名称a及对应的更新代码1、函数名称b及对应的更新代码2、函数名称c及对应的更新代码3,函数名称字段中函数名称的排列顺序为函数名称a、函数名称c及函数名称b,则在代码字段中更新代码的排列顺序为更新代码1、更新代码3及更新代码2。
90.在一种可能实现方式中,服务器中存储有版本信息与更新信息的对应关系,更新信息获取请求携带应用的当前版本信息,则该步骤302包括:服务器根据应用的当前版本信息,查询对应关系,确定当前版本信息之后的目标版本信息,将目标版本信息对应的更新信息,作为该应用对应的更新信息。
91.可选地,该版本信息中包括对应版本的第一更新时间,则服务器接收更新信息获取请求后,根据更新信息获取请求携带的版本信息中的第一更新时间及存储的版本信息对应的更新时间,确定第一更新时间之后的更新时间对应的版本信息,将该版本信息对应的更新信息,确定为应用对应的更新信息。
92.例如,第一更新时间为9月10日,而服务器中存储的第一版本信息的更新时间为10月5日,即确定第一版本信息是在应用的当前版本信息之后更新的,因此,将第一版本信息对应的更新信息,确定为应用对应的更新信息。
93.另外,服务器中存储的更新信息是由其他终端上传至服务器的。在一种可能实现方式中,其他终端将更新信息上传至服务器,由服务器进行存储。可选地,更新信息是以字符串形式存储于服务器中。
94.可选地,其他终端按照接口协议对更新信息进行处理,得到更新上传数据,将更新上传数据上传至服务器,由服务器按照接口协议,从更新上传数据中提取到更新信息,对该更新信息进行存储。其中,该接口协议是指其他终端与服务器之间进行通信需遵守的协议。
95.例如,开发人员通过oc(objective-c,一种编程语言)编写代码,通过格式转换工具,对编写后的代码进行转换,得到字符串形式的更新信息,通过其他终端按照接口协议对字符串形式的更新信息进行处理,得到更新上传数据,服务器接收到更新上传数据后,按照接口协议,从更新上传数据提取到字符串形式的更新信息,将字符串形式的更新信息进行存储。
96.303、终端接收服务器返回的更新响应数据,按照目标协议,从更新响应数据中提取更新信息。
97.由于更新响应数据是由服务器根据目标协议生成的,则应用根据该目标协议,能够从更新响应数据中提取到更新信息。
98.在一种可能实现方式中,该更新响应数据是由多个字段组成的,该多个字段中包括更新信息对应的目标字段,则该步骤303包括:按照目标协议,确定更新响应数据中更新信息对应的目标字段,从目标字段中提取更新信息。其中,该目标字段为多个字段中的任一字段。
99.可选地,更新响应数据中包括函数名称字段及代码字段,则终端按照目标协议,确定更新响应数据中的函数名称字段及代码字段,按照多个函数名称在函数名称字段中的排列顺序,依次提取多个函数名称,按照多个更新代码在代码字段中的排列顺序,依次提取多个更新代码,根据提取到的多个函数名称及多个更新代码,生成更新信息。其中,按照提取顺序,多个函数名称与多个更新代码一一对应。
100.在一种可能实现方式中,更新信息是以列表的形式存在,更新信息如表1所示。
101.表1
102.函数名称更新代码函数名称a更新代码1函数名称b更新代码2函数名称c更新代码3
103.需要说明的是,本技术实施例是以应用与服务器之间根据目标协议进行交互为例进行说明的,而在另一实施例中,无需执行步骤301-303,直接由应用向服务器发送更新信息获取请求,服务器接收应用发送的更新信息获取请求,将更新信息返回至应用,由应用接收服务器根据更新信息获取请求返回的更新信息。
104.需要说明的是,本技术实施例是以应用与服务器之间进行交互为例进行说明的,通过应用与服务器之间的交互,应用获取到服务器返回的更新信息,而在另一实施例中,应用采取其他方式,获取应用的更新信息。
105.304、终端在应用运行过程中,通过消息拦截器,拦截携带目标函数名称的调用指令。
106.在本技术实施例中,应用中包括dynamicengine(动态引擎),该动态引擎包括消息拦截器、词法分析器、语法解析器及语句执行器,该消息拦截器用于拦截携带目标函数名称的调用指令,词法分析器用于对更新代码进行分析,语法解析器用于生成抽象语法树,语句执行器用于执行抽象语法树中的语句。在应用获取到更新信息后,由应用中的消息拦截器,拦截携带更新信息中包括的函数名称的调用指令,并在拦截调用指令后,由词法分析器、语法解析器及语句执行器依次对相应的更新代码进行处理,即执行函数名称对应的更新代码对调用指令进行响应,从而实现对应用的更新。通过动态引擎实现对应用的更新的过程,如图4所示,消息拦截器在拦截到目标函数名称的调用指令,并将指针指向更新代码,由词法分析器对更新代码进行分析处理,得到token组合,之后由语法解析器对token组合进行语法解析,得到抽象语法树,并由语法执行器执行抽象语法树中的语句,得到语句执行的结果。
107.在本技术实施例中,应用中包括至少一个函数名称及对应的代码,在应用监听到携带任一函数名称的调用指令后,执行该函数名称对应的代码,从而对该调用指令进行响应,实现相应的功能。例如,监听到携带页面跳转函数名称的调用指令,执行该页面跳转函数名称对应的代码,能够实现页面跳转功能。而在应用获取到更新信息后,通过拦截携带目
标函数名称的调用指令,以使应用不再根据调用指令执行目标函数名称对应的原代码,后续执行目标函数名称对应的目标更新代码,从而实现更新代码相应的功能,实现了功能替换,从而实现了应用更新的效果。
108.其中,目标函数名称为更新信息中的任一函数名称。
109.在应用运行过程中,检测到对应用的触发操作,获取到携带函数名称的调用指令,以使后续能够执行该函数名称对应的代码,对触发操作进行响应。由于更新信息中包括至少一个函数名称,则在应用获取到更新信息后,由消息拦截器对携带目标函数名称的调用指令进行拦截,以使应用不再根据该调用指令,执行该目标函数名称对应的原代码,后续能够执行相应的更新代码,从而实现了应用在线更新效果。
110.在一种可能实现方式中,该步骤304包括以下步骤3041-3042:
111.3041、在应用运行过程中,通过消息拦截器监听到携带目标函数名称的调用指令,将目标函数名称对应的函数指针指向消息转发函数指针。
112.其中,函数指针用于指示函数名称对应的代码,通过函数名称对应的函数指针,应用能够确定函数名称对应的代码。消息转发函数指针用于将目标函数名称的调用指令指向接口拦截函数,后续能够实现对调用指令的拦截。
113.在本技术实施例中,应用监听到携带任一函数名称的调用指令时,通过该函数名称对应的函数指针,能够确定该函数名称对应的代码,以使能够执行函数名称对应的代码,实现该函数名称对应的功能。因此,在应用获取到更新信息后,在消息拦截器监听到携带目标函数名称的调用指令时,将目标函数名称对应的函数指针指向消息转发函数指针,以使应用不再执行目标函数名称对应的原代码,后续能够执行目标函数名称对应的目标更新代码,从而实现对应用的更新。
114.可选地,该消息转发函数指针是由应用在runtime(运行时环境)中运行的指针,用于将拦截到的调用指令进行转发。其中,运行时环境是指应用在运行时所处的环境。应用在运行时环境中,能够实现对应用的功能函数的代码进行改变,从而实现对应用的在线更新。例如,该消息转发函数指针为应用在runtime中的_objc_msgforward(消息转发函数指针)。
115.3042、运行消息转发函数指针对应的接口拦截函数,对调用指令进行拦截。
116.其中,接口拦截函数用于对监听到的携带目标函数名称的调用指令进行拦截。例如,该接口拦截函数为forwardinvocation(转发调用函数)。
117.在一种可能实现方式中,该步骤3042包括:响应于目标函数名称所属的class类中包括接口拦截函数,运行class类中的接口拦截函数,对调用指令进行拦截。
118.在一种可能实现方式中,该步骤3042包括:响应于目标函数名称所属的class类中不包括接口拦截函数,运行类方法添加函数,在class类中添加接口拦截函数,运行class类中的接口拦截函数,对调用指令进行拦截。
119.在一种可能实现方式中,在步骤3042之后,该方法还包括:将接口拦截函数的函数指针指向消息拦截器中的回调函数,运行回调函数,在更新信息中查询目标函数名称对应的目标更新代码。
120.其中,回调函数用于从更新信息中,查询监听到的目标函数名称对应的目标更新代码。例如,该回调函数为interceptor(消息拦截器)中的handler(回调)函数。通过消息拦截器拦截携带目标函数名称的调用指令,并查询到目标函数对应的更新代码的过程,如图5
所示,消息拦截器将携带目标函数名称的调用指令的函数指针指向运行时环境中的转发函数指针,并由运行时环境中的运行类方法添加函数,在当前的目标函数所处的类(class)中添加接口拦截函数,并将接口拦截函数的函数指针指向消息拦截器中的回调函数,通过该回调函数从更新信息中查询到目标函数名称对应的目标更新代码。
121.可选地,参见上述表1,更新以列表的形式存在,在应用运行回调函数后,从列表中查询目标函数名称对应的目标更新代码。需要说明的是,本技术实施例是以消息拦截器为例,通过消息拦截器拦截携带目标函数名称的调用指令进行说明的,而在另一实施例中,在应用运行过程中,应用无需通过消息拦截器拦截调用指令,应用直接通过应用中的动态引擎,拦截携带目标函数名称的调用指令即可,或者采取其他方式拦截携带目标函数名称的调用指令。
122.305、终端通过词法分析器,对更新代码进行分析处理,得到token组合。
123.其中,token(令牌)组合包括多个token,每个token包括字符组合及对应的字符类型,字符组合包括至少一个字符。字符类型为字符组合对应的类型,可选地,字符类型包括数字类型、字符串类型、单词类型、符号类型或空格类型等至少一项。例如,单词类型包括标识符和关键字,标识符是由数字、字母、下划线组合生成的。符号类型包括算术符号和逻辑运算符号,如“+”、
“-”
、“非”、“与”等。空格类型中除了包括空格外,还包括换行符。
124.应用通过词法分析器,对更新代码中的字符进行分组,得到多个字符组合,并确定每个字符组合对应的字符类型,生成token,从而得到多个token构成的token组合。
125.在一种可能实现方式中,该步骤305包括以下步骤3051-3052:
126.3051、通过词法分析器,按照多个字符的顺序,对更新代码进行分析处理,得到多个字符组合。
127.其中,更新代码包括多个字符,按照多个字符的顺序,依次对更新代码进行分析处理,得到多个字符组合。例如,字符组合为“0”、“9”、“helloworld”、“()”等。
128.可选地,通过词法分析器,按照多个字符的顺序,对更新代码进行分词处理,得到多个字符组合。
129.3052、根据多个字符组合及每个字符组合对应的字符类型,生成多个token。
130.词法分析器在得到字符组合后,确定该组合对应的字符类型,将该字符组合及对应的字符类型进行组合,生成对应的token。
131.在一种可能实现方式中,按照字符组合的生成顺序,依次确定每个字符组合对应的字符类型,生成多个token。
132.3053、对多个token进行组合处理,得到token组合。
133.将得到的多个token按照对应的字符组合在更新代码中的顺序,生成token组合。
134.如图6所示,通过词法分析器按照多个字符的顺序,读取更新代码中的字符,在得到一个字符组合后,确定该字符组合对应的字符类型,生成该字符组合对应的token,将生成的token存入token列表(tokenarray)中,并继续读取更新代码中剩余的字符,重复上述过程,从而将生成的多个token存入tokenarray中,如果在继续读取更新代码中剩余的字符时,确定更新代码已被读取完成,则词法分析器结束此过程,得到的token列表即为token组合,之后将得到的token组合提供给语法解析器,后续由语法解析器对token组合进行语法解析。
135.306、终端通过语法解析器,对多个token进行语法解析,得到抽象语法树。
136.其中,抽象语法树包括单行语句或控制语句中的至少一种。可选地,单行语句包括至少一个字符组合。可选地,控制语句包括至少一个字符组合。
137.由于每个token中包括一个字符组合及对应的字符类型,则通过语法解析器,根据多个token中的字符组合及对应的字符类型,将多个token在语法上建立关联关系,得到抽象语法树。
138.在一种可能实现方式中,该步骤306包括:应用通过语法解析器,按照多个token的顺序,根据多个token中的字符组合对应的字符类型,将任意个数的字符组合建立关联关系,得到多个语句,并建立多个语句之间的关联关系,得到抽象语法树。
139.在一种可能实现方式中,抽象语法树包括多个节点,每个节点对应一条语句,该语句为单行语句或控制语句。
140.在一种可能实现方式中,linenode(单行语句)包括methodnode(方法调用)、assignnode(声明赋值)、blocknode(块调用)或returnnode(返回值)。可选地,assignnode包括assignleftnode(左值)或assignrightnode(右值)。可选地,assignrightnode包括valuenode(表达式求值)、methodnode(方法调用)或blocknode(block调用)。
141.在一种可能实现方式中,controlnode(控制语句)包括ifelsenode(条件判断节点)、fornode(遍历节点)、whilenode(条件循环节点),即对应的语句包括if-else语句、for语句、for-in语句、while语句、do-while语句。可选地,每条控制语句包括linenode(单行语句)、valuenode(表达式求值)、breaknode(中断节点)、continuenode(跳出循环节点)中的至少一种。
142.如图7所示,通过语法解析器对token组合进行解析处理后,生成的抽象语法树的根节点为更新代码,即抽象语法树是由更新代码中的字符构成的。且抽象语法树中包括单行语句或控制语句,单行语句和控制语句均包括多种类型的语句,如单行语句包括方法调用语句、声明赋值语句、块调用语句及返回值语句,声明赋值语句包括左值语句和右值语句,且右值语句包括表达式求值语句、方法调用语句及块调用语句;控制语句包括条件判断节点语句、遍历节点语句及条件循环节点语句,且条件判断节点语句、遍历节点语句及条件循环节点语句均能够包括单行语句、表达式求值语句、中断节点语句及跳出循环节点语句等。
143.307、终端通过语句执行器,执行抽象语法树中的语句。
144.应用通过语句执行器,按照生成的抽象语法树,执行抽象语法树中的语句,实现目标函数名称对应的功能,从而实现对调用指令进行响应。
145.在一种可能实现方式中,抽象语法树包括多个节点,每个节点包括单行语句或控制语句,该步骤307包括:通过语句执行器,遍历抽象语法树中的每个节点,确定调用指令对应的路径,按照路径,执行路径中每个节点的语句。
146.其中,路径包括至少一个节点。
147.在本技术实施例中,抽象语法树中包括多个路径,不同的路径包括至少一个不同的节点。通过遍历抽象语法树中的每个节点,确定调用指令对应的路径,从而确定路径中的多个语句,由语句执行器依次执行该路径中的多个语句,对调用指令进行响应。
148.可选地,语句执行器包括多个语句执行组件,不同的语句执行组件用于执行不同
类型的语句,则语句执行器执行路径中每个节点的语句,包括:按照路径中多个节点的顺序,确定当前节点的语句所属的类型,调用与该类型匹配的语句执行组件,执行当前节点的语句。
149.如图8所示,语句执行器包含了3个组件:valueinvoker(值调用组件)、methodinvoker(方法调用组件)、blockinvoker(块调用组件),其中valueinvoker基于nsexpression(表达式系统)和nspredicate(谓词系统),用来执行valuenode,methodinvoker基于nsinvocation(消息转发)执行固定参数的methodnode、基于objc_msgsend执行可变参数的methodnode,blockinvoker基于libffi(一种数据库)库实现block(块)的定义,基于nsinvocation执行blocknode回调。在得到抽象语法树后,遍历抽象语法树中各个节点对应的语句,确定各个节点中语句的类型,通过语法执行器中不同类型组件,执行类型匹配的的语句。
150.需要说明的是,本技术实施例是以动态引擎包括词法分析器、语法解析器及语句执行器为例,通过词法分析器、语法解析器及语句执行器执行更新代码进行说明的,而在另一实施例中,无需执行步骤305-307,应用直接通过动态引擎,执行目标函数名称对应的目标更新代码即可;或者,应用能够采取其他方式执行目标函数名称对应的目标更新代码。
151.在本技术实施例中,字符串形式的更新代码是由多条语句组成的,如图9所示,这些语句包括单行语句或控制语句。单行语句包括声明赋值、方法调用、算术运算或逻辑运算。控制语句包括分支语句或循环语句,分支语句和循环语句包括单行语句,即单行语句是最基本的执行单元。如图9所示,ios系统中已经存在执行更新代码中包括的语句的功能。基于表达式系统,能够执行算术运算语句;基于谓词系统,能够执行逻辑运算语句;基于消息转发机制,能够执行方法调用语句;基于自定义符号解析,能够执行声明赋值语句,将变量值存储在上下文参数中。因此,通过本技术实施例提供的动态引擎,能够实现对ios系统中的应用进行在线更新。
152.本技术实施例提供的动态引擎的安装包的大小只有446kb,相关技术中的jspatch(一种动态更新框架)安装包的大小为733kb,即本技术实施例提供的动态引擎比现有技术中的jspatch更加轻量。并且,以方法调用为测试用例,对比动态引擎及jspatch的执行耗时,实现代码如图10所示。通过对方法调用执行10000次,得到动态引擎及jspatch的执行耗时。本技术实施例提供的方法,通过动态引擎包括的消息拦截器、词法分析器、语法解析器及语句执行器,拦截携带目标函数名称的调用指令,并执行目标函数名称对应的目标更新代码,此过程所所需的时长为494毫秒,而相关技术中通过jspatc中的jscore接口和oc接口,执行应用中的更新代码,实现对应用的更新,此过程所需的时长为1085毫秒,即通过动态引擎对应用更新的执行速度更快。
153.本技术实施例提供的方法,应用获取到更新信息后,在拦截到携带目标函数名称调用指令时,不再执行函数名称对应的原代码,而是直接执行目标函数名称对应的目标更新代码,实现了目标函数的在线更新,无需设备下载并安装应用的应用程序包,提高了应用更新的效率。并且,在应用运行过程中自动对应用进行在线更新,该在线更新过程用户无感知,减小了应用更新对用户的影响。并且,本技术实施例提供的自动更新方法,在应用具有更新信息时,即可在应用运行过程中实现自动更新,无需用户主动触发再对应用进行更新,从而有效提高了应用更新的覆盖率,保持应用的当前版本为最新的版本,降低了后台需要
维护的应用的版本数量,从而降低了维护成本。
154.并且,通过应用中的消息拦截器监听携带更新信息中包括的函数名称的调用指令,避免了对待更新的函数名称的调用指令的遗漏,且通过词法分析器、语句解析器及语句执行器,对函数名称对应的更新代码进行处理,以使应用能够准确地执行函数名称对应的更新代码,保证了对应用更新的准确率。
155.如图11所示,是本技术实施例的一种应用更新方法的流程图,如图11所示,该方法包括:
156.1、开发者通过开发终端使用oc编写代码,得到oc源码,使用工具将编写的oc源码转换为字符串形式,得到字符串代码,并按照开发终端与服务器之间的接口数据协议,将字符串代码上传至服务器中。
157.其中,开发终端为pc(personal computer,个人电脑)端或移动端。可选地,该移动端为手机、平板电脑等。
158.2、服务器接收到开发终端上传的字符串代码后,将字符串代码作为应用的更新信息,并对更新信息进行存储。
159.3、在应用在启动时,向服务器发送信息获取请求。
160.4、服务器接收该信息获取请求,查询到该应用的更新信息,向应用发送信息获取响应,该信息获取响应携带更新信息。
161.5、应用接收到更新信息获取响应后,由动态引擎根据更新信息拦截携带目标函数名称的调用指令,并执行更新信息中的更新代码。
162.采取监听拦截的方式,由动态引擎拦截携带目标函数名称的调用指令,以使应用不再根据调用指令执行该目标函数名称对应的原代码,后续执行该目标名称对应的更新代码,从而实现更新代码相应的功能,实现了功能替换。
163.图12是本技术实施例提供的一种应用更新装置的结构示意图,如图13所示,该装置包括:
164.更新信息获取模块1201,用于获取应用的更新信息,更新信息包括至少一个函数名称和每个函数名称对应的更新代码;
165.指令拦截模块1202,用于在应用运行过程中,拦截携带目标函数名称的调用指令,目标函数名称为更新信息中的任一函数名称;
166.代码执行模块1203,用于执行目标函数名称对应的目标更新代码。
167.本技术实施例提供的方法,应用获取到更新信息后,在拦截到携带目标函数名称调用指令时,不再执行函数名称对应的原代码,而是直接执行目标函数名称对应的目标更新代码,实现了目标函数的在线更新,无需设备下载并安装应用的应用程序包,提高了应用更新的效率。并且,在应用运行过程中自动对应用进行在线更新,该在线更新过程用户无感知,减小了应用更新对用户的影响。并且,本技术实施例提供的自动更新方法,在应用具有更新信息时,即可在应用运行过程中实现自动更新,无需用户主动触发再对应用进行更新,从而有效提高了应用更新的覆盖率,保持应用的当前版本为最新的版本,降低了后台需要维护的应用的版本数量,从而降低了维护成本。
168.在一种可能实现方式中,指令拦截模块1202,用于在应用运行过程中,通过应用中的动态引擎,拦截携带目标函数名称的调用指令;
169.代码执行模块1203,用于通过动态引擎,执行目标函数名称对应的目标更新代码。
170.在另一种可能实现方式中,动态引擎包括消息拦截器;如图13所示,指令拦截模块1202,包括:
171.指令拦截单元1221,用于在应用运行过程中,通过消息拦截器,拦截携带目标函数名称的调用指令。
172.在另一种可能实现方式中,如图13所示,指令拦截单元1221,包括:
173.指针指向子单元12211,用于在应用运行过程中,通过消息拦截器监听到调用指令,将目标函数名称对应的函数指针指向消息转发函数指针;
174.指令拦截子单元12212,用于运行消息转发函数指针对应的接口拦截函数,对调用指令进行拦截。
175.在另一种可能实现方式中,如图13所示,装置还包括:
176.函数指针指向模块1204,用于将接口拦截函数的函数指针指向消息拦截器中的回调函数;
177.代码查询模块1205,用于运行回调函数,在更新信息中查询目标函数名称对应的目标更新代码。
178.在另一种可能实现方式中,更新代码包括多个字符,动态引擎包括词法分析器、语法解析器及语句执行器;
179.如图13所示,代码执行模块1203,包括:
180.分析处理单元1231,用于通过词法分析器,对更新代码进行分析处理,得到令牌token组合,token组合包括多个token,每个token包括字符组合及对应的字符类型,字符组合包括至少一个字符;
181.语法解析单元1232,用于通过语法解析器,对多个token进行语法解析,得到抽象语法树,抽象语法树包括单行语句或控制语句中的至少一种;
182.语句执行单元1233,用于通过语句执行器,执行抽象语法树中的语句。
183.在另一种可能实现方式中,如图13所示,分析处理单元1231,包括:
184.分析处理子单元12311,用于通过词法分析器,按照多个字符的顺序,对更新代码进行分析处理,得到多个字符组合;
185.生成子单元12312,用于根据多个字符组合及每个字符组合对应的字符类型,生成多个token;
186.组合处理子单元12313,用于对多个token进行组合处理,得到token组合。
187.在另一种可能实现方式中,抽象语法树包括多个节点,每个节点包括单行语句或控制语句;如图13所示,语句执行单元1233,包括:
188.路径确定子单元12331,用于通过语句执行器,遍历抽象语法树中的每个节点,确定调用指令对应的路径,路径包括至少一个节点;
189.语句执行子单元12332,用于按照路径,执行路径中每个节点的语句。
190.在另一种可能实现方式中,如图13所示,更新信息获取模块1201,包括:
191.第一请求发送单元1211,用于向服务器发送更新信息获取请求;
192.信息接收单元1212,用于接收服务器根据更新信息获取请求返回的更新信息。
193.在另一种可能实现方式中,如图13所示,更新信息获取模块1201,包括:
194.第二请求发送单元1213,用于向服务器发送更新信息获取请求,以使服务器按照目标协议对更新信息进行处理,得到更新响应数据,将更新响应数据返回至应用;
195.数据接收单元1214,用于接收服务器返回的更新响应数据;
196.信息提取单元1215,用于按照目标协议,从更新响应数据中提取更新信息。
197.图14是本技术实施例提供的一种终端的结构示意图,可以实现上述实施例中终端执行的操作。终端1400还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
198.通常,终端1400包括有:处理器1401和存储器1402。
199.处理器1401可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。存储器1402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的,用于存储至少一个指令,该至少一个指令用于被处理器1401所具有以实现本技术中方法实施例提供的应用更新方法。
200.在一些实施例中,终端1400还可选包括有:外围设备接口1403和至少一个外围设备。处理器1401、存储器1402和外围设备接口1403之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1403相连。具体地,外围设备包括:射频电路1404、显示屏1405和音频电路1406中的至少一种。
201.射频电路1404用于接收和发射rf(radio frequency,射频)信号,也称电磁信号。射频电路1404通过电磁信号与通信网络及其他通信设备进行通信。
202.显示屏1405用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。该显示屏1405可以是触摸显示屏,还可以用于提供虚拟按钮和/或虚拟键盘。
203.音频电路1406可以包括麦克风和扬声器。麦克风用于采集用户及环境的音频信号,并将音频信号转换为电信号输入至处理器1401进行处理,或者输入至射频电路1404以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1400的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1401或射频电路1404的电信号转换为音频信号。
204.本领域技术人员可以理解,图14中示出的结构并不构成对终端1400的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
205.图15是本技术实施例提供的一种服务器的结构示意图,该服务器1500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)1501和一个或一个以上的存储器1502,其中,存储器1502中存储有至少一条程序代码,至少一条程序代码由处理器1501加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器还可以具有有线或无线网络接口、键盘及输入输出接口等部件,以便进行输入输出,该服务器还可以包括其他用于实现设备功能的部件,在此不做赘述。
206.服务器1500可以用于执行上述应用更新方法中服务器所执行的步骤。
207.本技术实施例还提供了一种计算机设备,该计算机设备包括处理器和存储器,存储器中存储有至少一条程序代码,该至少一条程序代码由处理器加载并执行以实现上述实施例的应用更新方法中所执行的操作。
208.本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储
有至少一条程序代码,该至少一条程序代码由处理器加载并执行以实现上述实施例的应用更新方法中所执行的操作。
209.本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机程序代码,该计算机程序代码存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序代码,处理器执行该计算机程序代码,使得该计算机设备实现如上述实施例的应用更新方法中所执行的操作。
210.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
211.以上所述仅为本技术实施例的可选实施例,并不用以限制本技术实施例,凡在本技术实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1