发明内容
本公开实施例至少提供一种应用程序更新、应用程序开发方法、装置及计算机设备。
第一方面,本公开实施例提供了一种应用程序更新方法,应用于安装有解释器的Flutter应用,包括:
接收服务器发送的关于所述Flutter应用的更新资源包;
基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件;所述目标功能为所述Flutter应用中的新增功能;
在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面。
一种可选的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,所述方法还包括:
为所述目标功能生成目标修改标识;其中,所述目标修改标记用于指示所述目标功能为新增功能;
在目标映射表中查找所述目标功能的功能标记,并基于所述功能标记确定所述目标功能所对应的映射信息;
将所述目标修改标记添加至所述映射信息中,其中,所述目标映射表用于指示所述Flutter应用的各功能是否包含对应的字节码文件。
一种可选的实施方式中,所述在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面,包括:
在检测到针对所述目标功能的运行指令的情况下,在所述目标映射表中查找所述目标功能的功能标记;
基于查找到的所述功能标记确定所述目标功能所对应的映射信息,并在所述映射信息中查找所述目标功能的目标修改标识;
在查找到所述目标修改标识的情况下,调用所述Flutter应用的解释器,并通过所述解释器运行所述目标功能的目标字节码文件。
一种可选的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,所述方法还包括:
确定所述目标功能所对应的功能信息;所述功能信息包括以下至少之一:所述目标功能的功能类型信息,所述目标功能的更新时间,所述目标功能的生效时间;
基于所述功能信息,生成所述目标功能的更新提示信息;其中,所述更新提示信息用于指示用户已接收到所述Flutter应用的新增功能的字节码文件;
在所述Flutter应用所在终端设备的显示界面上显示更新提示窗口,并在所述更新提示窗口中展示所述更新提示信息。
一种可选的实施方式中,所述检测到针对所述目标功能的运行指令,包括:
检测用户对所述更新提示窗口中更新提示信息的第一触发操作;
基于检测到的所述第一触发操作确定所述目标功能所对应页面的页面跳转标识,并在所述更新提示窗口中展示所述页面跳转标识;
在检测到用户对所述页面跳转标识的第二触发操作的情况下,在所述终端设备的显示界面上显示所述目标功能所对应页面。
第二方面,本公开实施例提供了一种应用程序开发方法,应用于服务器,所述服务器中包含Dart编译器,包括:
确定Flutter应用中的待编译功能的Dart代码,并通过所述Dart编译器对所述Dart代码进行编译操作;
获取所述编译操作所对应的中间产物,并基于所述中间产物生成所述待编译功能的目标字节码文件;
将所述目标字节码文件发送至Flutter应用,以使所述Flutter应用通过解释器运行所述目标字节码文件。
一种可选的实施方式中,所述获取所述编译操作所对应的中间产物,包括:
获取所述Dart代码文件编译过程中的动态链接库文件,并将所述动态链接库文件确定为所述编译操作所对应的中间产物。
一种可选的实施方式中,所述将所述目标字节码文件发送至Flutter应用,包括:
接收所述Flutter应用中针对目标功能标识的触发操作,并确定所述触发操作所对应的目标功能;
获取所述目标功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用进行解码。
第三方面,本公开实施例还提供一种用程序更新装置,包括:
接收单元,用于接收服务器发送的关于所述Flutter应用的更新资源包;
解压单元,用于基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件;所述目标功能为所述Flutter应用中的新增功能;
运行单元,用于在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面。
第四方面,本公开实施例还提供一种应用程序开发装置,包括:
确定单元,用于确定Flutter应用中的待编译功能的Dart代码,并通过所述Dart编译器对所述Dart代码进行编译操作;
获取单元,用于获取所述编译操作所对应的中间产物,并基于所述中间产物生成所述待编译功能的目标字节码文件;
发送单元,用于将所述目标字节码文件发送至Flutter应用,以使所述Flutter应用通过解释器运行所述目标字节码文件。
第五方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面至第二方面中任一种可能的实施方式中的步骤。
第六方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面至第二方面中任一种可能的实施方式中的步骤。
本公开实施例提供的应用程序更新、应用程序开发方法、装置及计算机设备,在本公开实施例中,首先可以基于服务器发送的Flutter应用的更新资源包进行解压,得到目标功能的目标字节码文件,然后,在检测到针对该目标功能的运行指令的情况下,就可以通过解释器运行该目标字节码文件,以显示该目标功能所对应的页面,从而实现了针对该Flutter应用的动态更新,缩短了更新流程,提高了更新效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在现有的针对Flutter应用的更新方案中,如果开发人员在Flutter应用中添加了或者更改了功能,那么,开发人员需要将更新之后的Flutter应用上传至应用商店,以使用户在应用商店中重新下载该更新之后的Flutter应用,从而完成Flutter应用的更新。因此,现有的针对Flutter应用的更新方案更新流程较为冗长,更新效率较低。
基于上述研究,本公开提供了一种应用程序更新、应用程序开发方法、装置及计算机设备。在本公开实施例中,首先可以基于服务器发送的Flutter应用的更新资源包进行解压,得到目标功能的目标字节码文件,然后,在检测到针对该目标功能的运行指令的情况下,就可以通过解释器运行该目标字节码文件,以显示该目标功能所对应的页面,从而实现了针对该Flutter应用的动态更新,缩短了更新流程,提高了更新效率。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用程序更新、应用程序开发方法进行详细介绍,本公开实施例所提供的应用程序更新、应用程序开发方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。在一些可能的实现方式中,该应用程序更新、应用程序开发方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的一种应用程序更新方法的流程图,所述方法包括步骤S101~S105,其中:
S101:接收服务器发送的关于所述Flutter应用的更新资源包。
在本公开实施例中,在服务器中对Flutter应用进行更新得到更新资源包后,可以主动向Flutter应用发送该更新资源包,或者,响应于Flutter应用针对该更新资源包的获取请求,向该Flutter应用发送更新资源包。
这里,在服务器响应于Flutter应用针对更新资源包的获取请求,向该Flutter应用发送更新资源包的情况下,在检测到服务器中针对Flutter应用进行更新后,该Flutter应用就可以询问用户是否需要获取该更新资源包,在用户确定获取该更新资源包后,就可以向服务器发送该更新资源包的获取请求。
S103:基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件;所述目标功能为所述Flutter应用中的新增功能。
在本公开实施例中,为了提高文件传输效率以及在一定程度上保证传输安全性,上述更新资源包可以为SDK(Software Development Kit,软件开发工具包)格式的,因此,Flutter应用在接收到该更新资源包后,可以首先对该更新资源包进行解压操作,得到解压文件,其中,该解压文件中可以包含目标功能的目标字节码文件和/或目标功能的功能标记。
在得到Flutter应用中目标功能的目标字节码文件之后,就可以将该目标字节码文件存储在本地文件中。具体实施时,首先,可以获取Flutter应用在本地文件中的存储目录,并基于目标功能的功能标记,在该存储目录下建立目标功能的存储文件,然后,就可以将上述目标字节码文件存储到该存储文件中。
S105:在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面。
在本公开实施例中,在将上述目标字节码文件存储到本地文件中之后,就可以在Flutter应用已有的功能页面中新增一个目标功能的功能入口,其中,该功能入口可以为该目标功能的目标功能标识。例如,在该目标功能为短视频的情况下,就可以在该Flutter应用的主页面中新增一个“短视频”的目标功能标识(例如,短视频按钮)作为目标功能的功能入口。
接下来,在检测到针对该功能入口的触发操作后,就可以确定检测到针对上述目标功能的运行指令。然后,就可以获取该目标功能的目标字节码文件,并将该目标字节码文件加载到解释器(例如,Dart解释器)中,以通过解释器运行该目标字节码文件,从而在显示界面上显示该目标功能所对应的页面。
通过上述描述可知,在本公开实施例中,首先可以基于服务器发送的Flutter应用的更新资源包进行解压,得到目标功能的目标字节码文件,然后,在检测到针对该目标功能的运行指令的情况下,就可以通过解释器运行该目标字节码文件,以显示该目标功能所对应的页面,从而实现了针对该Flutter应用的动态更新,缩短了更新流程,提高了更新效率。
在一个可选的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,上述方法还包括如下过程:
(1)、为所述目标功能生成目标修改标识;其中,所述目标修改标记用于指示所述目标功能为新增功能;
(2)、在目标映射表中查找所述目标功能的功能标记,并基于所述功能标记确定所述目标功能所对应的映射信息;
(3)、将所述目标修改标记添加至所述映射信息中,其中,所述目标映射表用于指示所述Flutter应用的各功能是否包含对应的字节码文件。
在本公开实施例中,可以为Flutter应用建立目标映射表,其中,该目标映射表用于指述Flutter应用的各功能是否包含对应的字节码文件。因此,在检测到针对Flutter应用中的指定功能的触发操作后,就可以获取该目标映射表,并基于该目标映射表确定该指定功能是否对应字节码文件,在该指定功能对应字节码文件的情况下,就可以运行该字节码文件。
在得到Flutter应用中目标功能的目标字节码文件之后,就可以为该目标功能生成修改标识,并在目标映射表中查找该目标功能的功能标记。
这里,在该目标映射表中不包含该目标功能的功能标记的情况下,可以在该目标映射表中增加该目标功能的功能标记,并建立该目标功能所对应的映射信息。然后,就可以将目标修改标记添加到该映射信息之中。
需要说明的是,上述映射信息用于指示该目标功能在本地文件中所对应的运行文件,其中,该运行文件中可以为字节码文件或者AOT(Ahead Of Time)编译文件。这里,该在构建上述Flutter应用时得到的编译产物为AOT编译文件,该AOT编译文件为和处理器类型相关的二进制代码。
通过上述描述可知,可以为Flutter应用建立目标映射表,并基于获取到的目标功能的目标字节码,在该目标映射表中更新该目标功能的映射信息,从而在检测到针对Flutter应用中的指定功能的触发操作后,就可以获取该目标映射表,并基于该目标映射表确定该指定功能是否对应字节码文件,提高了查找字节码文件的效率以及设备响应的速度。
在一个可选的实施方式中,上述步骤S105,在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面,具体包括如下过程:
S1051:在检测到针对所述目标功能的运行指令的情况下,在所述目标映射表中查找所述目标功能的功能标记。
在本公开实施例中,在检测到针对目标功能的运行指令的情况下,就可以获取Flutter应用所对应的目标映射表,并在该目标映射表中查找目标功能的功能标记。
具体实施时,可以通过遍历指令遍历该目标映射表,从而获取该功能标记。或者,首先确定该运行指令所指示的目标功能的功能标记,并通过匹配指令在该目标映射表中匹配该功能标记。
S1052:基于查找到的所述功能标记确定所述目标功能所对应的映射信息,并在所述映射信息中查找所述目标功能的目标修改标识。
S1053:在查找到所述目标修改标识的情况下,调用所述Flutter应用的解释器,并通过所述解释器运行所述目标功能的目标字节码文件。
在本公开实施例中,在查找到目标修改标识的情况下,就可以确定该目标功能存在对应的目标字节码文件,接下来,就可以基于上述映射信息中,确定该目标功能所对应的目标字节码文件在本地文件中的存储位置。
在确定出上述目标字节码文件在本地文件中的存储位置之后,就可以基于该存储位置查找该目标字节码文件,并通过调用Flutter应用的解释器来运行该目标字节码文件。
具体实施时,可以首先对该目标字节码文件进行解析,在得到解析结果后,就可以得到该目标字节码文件中的可运行字节码信息,其中,该可运行字节码信息可以为该目标字节码文件中的library、function、field等字段所指示的信息。
通过上述描述可知,在检测到针对Flutter应用中的目标功能的运行指令后,就可以获取该Flutter应用的目标映射表,并基于该目标映射表确定该指定功能对应的目标字节码文件,提高了查找字节码文件的效率以及设备响应的速度。
在一个可选的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,上述方法还包括如下过程:
(1)、确定所述目标功能所对应的功能信息;所述功能信息包括以下至少之一:所述目标功能的功能类型信息,所述目标功能的更新时间,所述目标功能的生效时间;
(2)、基于所述功能信息,生成所述目标功能的更新提示信息;其中,所述更新提示信息用于指示用户已接收到所述Flutter应用的新增功能的字节码文件;
(3)、在所述Flutter应用所在终端设备的显示界面上显示更新提示窗口,并在所述更新提示窗口中展示所述更新提示信息。
在本公开实施例中,在基于上述更新资源包进行解压后,就可以得到该更新资源包所对应的目标功能的功能信息。
这里,上述目标功能的功能类型信息可以用于表征该目标功能的功能类型,例如,购物类,游戏类,阅读类等,其中,该功能类型信息中还可以包含该目标功能的功能介绍信息。上述目标功能的更新时间可以为服务器将该目标功能的更新资源包发送至Flutter应用中的时间。上述目标功能的生效时间用于指示该目标功能的生效起止日期以及结束日期。例如,该目标功能为圣诞限定活动,那么,该目标功能的生效日期就可以为2021.12.24-2021.12.31。
接下来,就可以基于上述功能信息生成目标功能的更新提示信息,然并将该更新提示信息展示在显示界面上。具体实施时,可以建立更新提示窗口,并通过该更新提示窗口将该更新提示信息展示在终端设备的显示界面上。这里,上述更新提示信息可以包含至少部分功能信息。
通过上述描述可知,在得到Flutter应用中目标功能的目标字节码文件之后,就可以确定该目标功能的功能信息,并基于该功能信息生成目标功能的更新提示信息,以便用户能根据该更新提示信息了解该目标功能的基本信息,减少了用户错过目标功能的更新的可能性,提高了用户的使用体验。
在一个可选的实施方式中,上述步骤S105,检测到针对所述目标功能的运行指令,具体包括如下过程:
(1)、检测用户对所述更新提示窗口中更新提示信息的第一触发操作;
(2)、基于检测到的所述第一触发操作确定所述目标功能所对应页面的页面跳转标识,并在所述更新提示窗口中展示所述页面跳转标识;
(3)、在检测到用户对所述页面跳转标识的第二触发操作的情况下,在所述终端设备的显示界面上显示所述目标功能所对应页面。
在本公开实施例中,上述更新提示窗口中还可以包含询问信息,其中,该询问信息可以用于询问用户是否跳转至目标功能所对应页面。在检测到用户针对该询问信息的确认操作后,就可以确定检测到针对该更新提示信息的第一触发操作。
在检测到针对该更新提示信息的第一触发操作之后,就可以确定上述目标功能所对应页面的页面跳转标识,其中,该页面跳转标识可以为该目标功能对应页面的目标页面链接。
具体实施时,在用户通过该页面跳转标识跳转至目标功能所对应页面的过程中,可以基于用户当前时刻的浏览内容,分为以下几种情况:
情况一:
在当前时刻用户浏览的内容不是上述Flutter应用中内容的情况下,可以首先确定该目标功能所对应的功能入口在Flutter应用中所属的页面,并基于该功能入口所属页面的页面链接生成上述页面跳转标识。在用户基于该页面跳转标识跳转至功能入口所属页面内之后,就可以在该功能入口所属页面内通过指示标识指示该功能入口,以使用户触发该功能入口,从而进入该目标功能对应页面,从而便于用户了解该目标功能的访问路径。
应理解的是,在用户通过上述页面跳转标识跳转至Flutter应用之前,可以首先询问用户是否需要打开该Flutter应用,再响应于用户的确定操作打开该Flutter应用。
情况二:
在当前时刻用户浏览的内容是上述Flutter应用中内容的情况下,上述页面跳转标识可以为该目标功能对应页面的目标页面链接,用户可以通过第二触发操作触发该页面跳转标识,从而打开该目标功能所对应页面。或者,该页面跳转标识可以为功能入口所属页面的页面链接,在用户基于该页面跳转标识跳转至功能入口所属页面内之后,就可以在该功能入口所属页面内通过指示标识指示该功能入口,以使用户触发该功能入口,从而进入该目标功能对应页面,从而便于用户了解该目标功能的访问路径。
通过上述描述可知,用户可以通过更新提示窗口打开目标功能所对应页面,从而在一定程度上缩短用户的浏览路径,便于用户更快捷的体验目标功能。
参见图2所示,为本公开实施例提供的一种应用程序开发方法的流程图,所述方法包括步骤S201~S205,其中:
S201:确定Flutter应用中的待编译功能的Dart代码,并通过所述Dart编译器对所述Dart代码进行编译操作。
在本公开实施例中,首先需要获取Flutter应用中待编译功能的Dart代码,其中,待编译功能可以为上述目标功能。这里,在针对Flutter应用进行新功能开发的情况下,得到的开发产物就可以为上述Dart代码。
应理解的是,由于上述Flutter应用的编译语言为Dart语言,因此,在对该Flutter应用进行新功能开发后,得到的开发产物就为上述Dart代码。
在本公开实施例中,在获取到上述Dart代码之后,就可以对该Dart代码进行编译。具体实施时,可以将该Dart代码加载到Dart编译器中,以通过该Dart编译器对该Dart代码进行识别并编译。
S203:获取所述编译操作所对应的中间产物,并基于所述中间产物生成所述待编译功能的目标字节码文件。
在本公开实施例中,Dart编译器对Dart代码进行编译的过程如图3所示,其中,首先可以对该Dart代码进行语法分析以及词法分析,从而得到中间产物,这里,对该Dart代码进行语法分析以及词法分析的过程如下所述,此处不再赘述。
应理解的是,由图3可知,上述Dart编译器在对上述中间产物依次进行中间优化、指令生成之后,得到的最终编译产物为AOT编译文件,该AOT编译文件为和处理器类型相关的二进制代码。
在本公开实施例中所描述的Flutter应用为能够支持对该目标字节码文件进行解释的应用,因此,如果现有Flutter应用无法对该目标字节码文件进行解释,则需要重新编译得到新的能够对该目标字节码文件进行解释的Flutter应用,具体编译过程描述如下:
首先,可以获取目标命令行参数,其中,该目标命令行参数用于确定编译Flutter应用的Flutter引擎,不同的Flutter引擎能够编译得到具有不同功能的Flutter应用。之后,就通过目标命令行参数将该Flutter应用编译为能够支持运行目标字节码文件的应用。具体实施时,可以在现有版本的Flutter应用中新增解释器功能(例如,新增Dart解释器)。接下来,在封装该Flutter应用的过程中,可以通过宏控制编译该Flutter应用的解释器(例如,Dart解释器),以使该Flutter应用在运行时能够通过解释器运行字节码文件。
S205:将所述目标字节码文件发送至Flutter应用,以使所述Flutter应用通过解释器运行所述目标字节码文件。
在本公开实施例中,可以响应于Flutter应用针对目标字节码文件的获取请求,生成该目标字节码文件的更新资源包,并将该更新资源包发送至Flutter应用。或者,在确定出该目标字节码文件后,就可以直接生成该目标字节码文件的更新资源包,并将该更新资源包主动下发至Flutter应用。Flutter应用在获取到该更新资源包之后,就可以利用上述应用程序更新方法对该更新资源包进行处理,具体处理此处不再详细描述,以上述实施例为准。
通过上述描述可知,在本公开实施例中,首先可以获取待编译功能的Dart代码,并对该Dart代码进行编译操作,然后,就可以基于编译操作的中间产物生成目标字节码文件,并将该目标字节码文件发送至Flutter应用,以使Flutter应用中的该目标字节码文件进行运行,从而实现该目标字节码文件所对应的功能,进而缩短了Flutter应用的更新流程,提高了更新效率。
在一个可选的实施方式中,上述步骤S203,获取所述编译操作所对应的中间产物,具体包括如下过程:
获取所述Dart代码文件编译过程中的动态链接库文件,并将所述动态链接库文件确定为所述编译操作所对应的中间产物。
在本公开实施例中,由图3可知,在获取到上述Dart代码之后,就可以通过对该Dart代码进行语法分析以及词法分析,从而得到中间产物。具体实施时,对上述Dart代码进行语法分析以及词法分析后,首先可以得到该Dart代码的动态链接库文件(也即,dill文件),然后,就可以将该动态链接库文件确定为中间产物,其中,该动态链接库文件可以为中间编译文件(即:kernel产物)。
在本公开实施例中,首先需要对上述Dart代码进行语法分析以及词法分析。具体的,上述语法分析可以用于识别Dart代码的单词序列,并分别分析该Dart代码的单词序列是否符合Dart语言的语法。另外的,上述词法分析可用用于识别Dart代码中的字符,并分析该别Dart代码中的字符是否符合Dart代码的要求。
这里,在该Dart代码中的Dart代码的单词序列不符合Dart语言的语法,或者Dart代码中的字符不符合Dart代码的要求的情况下,可以对该Dart代码中的Dart代码进行修改,从而使得修改后的Dart代码能够被正常编译。
在对上述Dart代码进行语法分析以及词法分析后,就可以对该Dart代码进行编译,得到该Dart代码的动态链接库文件(也即,dill文件),并将所述动态链接库文件确定为中间产物。
通过上述描述可知,通过获取Dart代码编译过程中的动态链接库文件的方式,就可以将该动态链接库文件确定为中间产物,从而使得上述Dart编译器能够针对该中间产物进行编译,得到目标字节码文件。
在一个可选的实施方式中,上述步骤S205,将所述目标字节码文件发送至Flutter应用,具体包括如下过程:
S2051:接收所述Flutter应用中针对目标功能标识的触发操作,并确定所述触发操作所对应的目标功能。
在本公开实施例中,目标功能标识可以为上述功能入口。Flutter应用在检测到针对该目标功能标识的触发操作后,首先会确定该目标功能标识所对应的目标功能,并在本地文件中查找该目标功能所对应的目标字节码文件。
在未查找到该目标字节码文件的情况下,就可以向服务器发送针对该目标字节码文件的获取请求,其中,该获取请求中携带该目标功能标识所对应的目标功能的功能标记,以使服务器基于该获取请求确定触发操作所对应的目标功能。
S2052:获取所述目标功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用进行解码。
在本公开实施例中,如图4所示为服务器和Flutter应用之间交互的示意图。其中,该目标功能中可以包含多个页面,服务器在获取到该目标功能所对应的目标字节码文件之后,就可以生成该目标字节码文件的更新资源包,并将该更新资源包传输至Flutter应用。
Flutter应用在接收到该更新资源包后,就可以通过解压操作获取该更新资源包中的目标字节码文件,并通过解释器运行该目标字节码文件。这里,该Flutter应用由多个页面组成,另外,该Flutter应用中还应包含AOT编译文件等运行文件,Flutter软件开发工具包以及Dart软件开发工具包等。
通过上述描述可知,在接收到Flutter应用中针对目标功能标识的触发操作后,就可以确定该触发操作所对应的目标字节码文件,并将该目标字节码文件传输至Flutter应用中,以使该Flutter应用能够运行该目标字节码文件,从而实现该目标字节码文件所对应的目标功能。
在一个可选的实施方式中,如图3所示为Dart编译器对待处理Dart代码文件进行编译的过程,该方法包括步骤S301~S304。其中:
S301:获取待编译功能的Dart代码;
S302:针对上述Dart代码进行语法分析以及词法分析,得到中间产物;
在本公开实施例中,针对上述Dart代码进行语法分析以及词法分析如上述步骤S203所对应的实施方式所述,此处不再赘述。
S303:获取预先设定的字节码格式,并按照该预先设定的字节码格式对中间产物进行编译,得到并保存目标字节码文件;
在本公开实施例中,首先可以获取中间产物中各个组成部分的属性信息,并根据该属性信息所指示的预先设定的字节码格式对该中间产物进行编译,得到目标字节码文件。
S304:针对上述中间产物进行中间优化以及指令生成,得到AOT编译文件。
综上,在本公开实施例中,首先可以基于服务器发送的Flutter应用的更新资源包进行解压,得到目标功能的目标字节码文件,然后,在检测到针对该目标功能的运行指令的情况下,就可以通过解释器运行该目标字节码文件,以显示该目标功能所对应的页面,从而实现了针对该Flutter应用的动态更新,缩短了更新流程,提高了更新效率。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用程序更新方法对应的应用程序更新装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用程序更新方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图5所示,为本公开实施例提供的一种应用程序更新的示意图,所述装置包括:接收单元51、解压单元52、运行单元53;其中,
接收单元51,用于接收服务器发送的关于所述Flutter应用的更新资源包;
解压单元52,用于基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件;所述目标功能为所述Flutter应用中的新增功能;
运行单元53,用于在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面。
在本公开实施例中,首先可以基于服务器发送的Flutter应用的更新资源包进行解压,得到目标功能的目标字节码文件,然后,在检测到针对该目标功能的运行指令的情况下,就可以通过解释器运行该目标字节码文件,以显示该目标功能所对应的页面,从而实现了针对该Flutter应用的动态更新,缩短了更新流程,提高了更新效率。
一种可能的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,该装置还用于:
为所述目标功能生成目标修改标识;其中,所述目标修改标记用于指示所述目标功能为新增功能;
在目标映射表中查找所述目标功能的功能标记,并基于所述功能标记确定所述目标功能所对应的映射信息;
将所述目标修改标记添加至所述映射信息中,其中,所述目标映射表用于指示所述Flutter应用的各功能是否包含对应的字节码文件。
一种可能的实施方式中,运行单元53,还用于:
在检测到针对所述目标功能的运行指令的情况下,在所述目标映射表中查找所述目标功能的功能标记;
基于查找到的所述功能标记确定所述目标功能所对应的映射信息,并在所述映射信息中查找所述目标功能的目标修改标识;
在查找到所述目标修改标识的情况下,调用所述Flutter应用的解释器,并通过所述解释器运行所述目标功能的目标字节码文件。
一种可能的实施方式中,在基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件之后,该装置还用于:
确定所述目标功能所对应的功能信息;所述功能信息包括以下至少之一:所述目标功能的功能类型信息,所述目标功能的更新时间,所述目标功能的生效时间;
基于所述功能信息,生成所述目标功能的更新提示信息;其中,所述更新提示信息用于指示用户已接收到所述Flutter应用的新增功能的字节码文件;
在所述Flutter应用所在终端设备的显示界面上显示更新提示窗口,并在所述更新提示窗口中展示所述更新提示信息。
一种可能的实施方式中,运行单元53,还用于:
检测用户对所述更新提示窗口中更新提示信息的第一触发操作;
基于检测到的所述第一触发操作确定所述目标功能所对应页面的页面跳转标识,并在所述更新提示窗口中展示所述页面跳转标识;
在检测到用户对所述页面跳转标识的第二触发操作的情况下,在所述终端设备的显示界面上显示所述目标功能所对应页面。
参照图6所示,为本公开实施例提供的一种应用程序开发装置的示意图,所述装置包括:确定单元61、获取单元62、发送单元63;其中,
确定单元61,用于确定Flutter应用中的待编译功能的Dart代码,并通过所述Dart编译器对所述Dart代码进行编译操作;
获取单元62,用于获取所述编译操作所对应的中间产物,并基于所述中间产物生成所述待编译功能的目标字节码文件;
发送单元63,用于将所述目标字节码文件发送至Flutter应用,以使所述Flutter应用通过解释器运行所述目标字节码文件。
在本公开实施例中,首先可以获取待编译功能的Dart代码,并对该Dart代码进行编译操作,然后,就可以基于编译操作的中间产物生成目标字节码文件,并将该目标字节码文件发送至Flutter应用,以使Flutter应用中的该目标字节码文件进行运行,从而实现该目标字节码文件所对应的功能,进而缩短了Flutter应用的更新流程,提高了更新效率。
一种可能的实施方式中,获取单元62,还用于:
获取所述Dart代码文件编译过程中的动态链接库文件,并将所述动态链接库文件确定为所述编译操作所对应的中间产物。
一种可能的实施方式中,发送单元63,还用于:
接收所述Flutter应用中针对目标功能标识的触发操作,并确定所述触发操作所对应的目标功能;
获取所述目标功能所对应的目标字节码文件,并将所述目标字节码文件传输至所述Flutter应用进行解码。
关于装置中的各单元的处理流程、以及各单元之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的应用程序更新方法,本公开实施例还提供了一种计算机设备700,如图7所示,为本公开实施例提供的计算机设备700结构示意图,包括:
处理器71、存储器72、和总线73;存储器72用于存储执行指令,包括内存721和外部存储器722;这里的内存721也称内存储器,用于暂时存放处理器71中的运算数据,以及与硬盘等外部存储器722交换的数据,处理器71通过内存721与外部存储器722进行数据交换,当所述计算机设备700运行时,所述处理器71与所述存储器72之间通过总线73通信,使得所述处理器71执行以下指令:
接收服务器发送的关于所述Flutter应用的更新资源包;
基于所述更新资源包进行解压操作,得到所述Flutter应用中目标功能的目标字节码文件;所述目标功能为所述Flutter应用中的新增功能;
在检测到针对所述目标功能的运行指令的情况下,通过所述解释器运行所述目标功能的目标字节码文件,以显示所述目标功能所对应的页面。
对应于图2中的应用程序更新方法,本公开实施例还提供了另一种计算机设备800,如图8所示,为本公开实施例提供的计算机设备800结构示意图,包括:
处理器81、存储器82、和总线83;存储器82用于存储执行指令,包括内存821和外部存储器822;这里的内存821也称内存储器,用于暂时存放处理器81中的运算数据,以及与硬盘等外部存储器822交换的数据,处理器81通过内存821与外部存储器822进行数据交换,当所述计算机设备800运行时,所述处理器81与所述存储器82之间通过总线83通信,使得所述处理器81执行以下指令:
确定Flutter应用中的待编译功能的Dart代码,并通过所述Dart编译器对所述Dart代码进行编译操作;
获取所述编译操作所对应的中间产物,并基于所述中间产物生成所述待编译功能的目标字节码文件;
将所述目标字节码文件发送至Flutter应用,以使所述Flutter应用通过解释器运行所述目标字节码文件。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序更新、应用程序开发方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序更新、应用程序开发方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。