一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于Flutter跨应用的工程构建方法、系统、终端及介质与流程

2022-02-21 04:09:38 来源:中国专利 TAG:

基于flutter跨应用的工程构建方法、系统、终端及介质
技术领域
1.本发明涉flutter业务技术领域,尤其涉及基于flutter跨应用的工程构建方法、系统、终端及介质。


背景技术:

2.在使用flutter混合开发的大型应用中,客户端开发最大的痛点之一就是编译时长影响开发体验。在flutter native这种开发模式下,native编译速度慢,模块开发无法突破。应用中集成了众多中间件,但很多功能无法通过flutter直接调用,需要使用各种channel到native去调用对应功能。因此,总结来说,目前flutter开发面临如下多个痛点:1)flutter侧混合编译速度慢,android首次编译10min ,ios首次编译20min ;2)混合栈编程中历史包袱导致ios/android双端返回给flutter侧的数据可能存在不一致性;3)集成模块开发效率相比模块开发较低,单模块页面测试性能数据无法展开。


技术实现要素:

3.有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是flutter开发的编译速度慢,调试效率低的问题。
4.为实现上述目的,本发明提供了一种基于flutter跨应用的工程构建方法,包括:第一应用的flutter工程发起网络请求;在所述第一应用中设置的拦截模块拦截所述网络请求并将其发送至第二应用;所述第二应用的原生工程接收并解析所述网络请求后转发至后端服务器,并将所述后端服务器返回的网络请求处理结果发送至所述第一应用。
5.在本发明的较佳实施方式中,所述flutter工程设有第一sparrow模块;所述第一sparrow模块对所述网络请求进行打包后发送;所述拦截模块拦截所述网络请求后进行分析并选择对应的第二应用,以向所述第二应用转发所述网络请求,供所述第二应用向所述后端服务器发起所述网络请求。
6.在本发明的另一较佳实施方式中,所述拦截模块包括flutterboost插件。
7.在本发明的另一较佳实施方式中,所述原生工程包括服务模块和第二sparrow模块;所述服务模块接收所述网络请求,并调用所述第二sparrow模块的网络库以进行相应的数据解析,所述服务模块将解析结果发送至所述后端服务器,以及从所述后端服务器接收网络请求处理结果后再回传至所述第一应用。
8.为实现上述目的,本发明提供了一种基于flutter跨应用的工程构建系统,包括:第一应用,包括flutter工程,并设置拦截模块;第二应用,包括原生工程;所述原生工程设有服务模块;其中,所述flutter工程发起网络请求;所述拦截模块拦截所述网络请求并将其发送至所述第二应用;所述服务模块接收所述网络请求后转发至后端服务器,并将所述后端服务器返回的网络请求处理结果发送至所述第一应用。
9.在本发明的另一较佳实施方式中,所述原生工程包括服务模块和第二sparrow模块;所述服务模块接收所述网络请求,并调用所述第二sparrow模块的网络库以进行相应的
数据解析,并将解析结果发送至所述后端服务器,以及从所述后端服务器接收所述网络请求处理结果后再回传至所述第一应用。
10.为实现上述目的,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现所述基于flutter跨应用的工程构建方法。
11.为实现上述目的,本发明提供了一种电子终端,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行所述基于flutter跨应用的工程构建方法。
12.本发明提供的基于flutter跨应用的工程构建方法、系统、终端及介质,具有以下技术效果:本发明实现一种利用http请求去代理客户端的method channel和event channel,将网络请求通过http请求交给服务端去处理,拿到服务端真正的mechod channel和event channel数据,因此有效解决了现有flutter-native混合开发中所遇到的编译速度慢、数据不一致性、开发效率低等问题。
13.以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
14.图1是本发明一实施例中基于flutter跨应用的工程构建方法的流程示意图。
15.图2a是现有技术中壳flutter工程和native工程之间的交互原理示意图。
16.图2b是本发明中壳flutter工程和native工程之间的交互原理示意图。
17.图3是本发明一实施例中基于flutter跨应用的工程构建系统的结构示意图。
18.图4是本发明一实施例中电子终端的结构示意图。
具体实施方式
19.以下通过特定的具体实例说明本技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本技术的其他优点与功效。本技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本技术的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
20.需要说明的是,在下述描述中,参考附图,附图描述了本技术的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本技术的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本技术的实施例的范围仅由公布的专利的权利要求书所限定。这里使用的术语仅是为了描述特定实施例,而并非旨在限制本技术。空间相关的术语,例如“上”、“下”、“左”、“右”、“下面”、“下方”、“下部”、“上方”、“上部”等,可在文中使用以便于说明图中所示的一个元件或特征与另一元件或特征的关系。
21.在本发明重,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包
括性的,或意味着任一个或任何组合。因此,“a、b或c”或者“a、b和/或c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a、b和c”。仅当元件、功能或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
22.为了使本发明的目的、技术方案及优点更加清楚明白,通过下述实施例并结合附图,对本发明实施例中的技术方案的进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定发明。
23.如图1所示,展示了本发明在一实施例中基于flutter跨应用的工程构建方法的流程示意图。
24.需说明的是,本实施例的工程构建方法可应用于控制器,如arm(advanced risc machines)控制器、fpga(field programmable gate array)控制器、soc(system on chip)控制器、dsp(digital signal processing)控制器、或者mcu(micorcontroller unit)控制器等。该方法还可应用于计算机设备,其包括存储器、存储控制器、一个或多个处理单元(cpu)、外设接口、rf电路、音频电路、扬声器、麦克风、输入/输出(i/o)子系统、显示屏、其他输出或控制设备,以及外部端口等组件,类型包括但不限于台式电脑、笔记本电脑、平板电脑、智能手机、智能手环、智能手表、智能头盔等。该方法还可应用于服务器,所述服务器可以根据功能、负载等多种因素布置在一个或多个实体服务器上,也可以由分布的或集中的服务器集群构成,本实施例不作限定。
25.本实施例所提供的基于flutter跨应用的工程构建方法,主要包括步骤s11~s13,下文将对各步骤做详尽的解释说明。
26.步骤s11:第一应用的flutter工程发起网络请求。
27.应理解,flutter是google开源的构建用户界面工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、web、桌面和嵌入式平台,可用于构建跨平台手机app的sdk(software development kit,软件开发工具包),可以快速地在android和ios系统上构建高质量的原生用户界面。flutter可以与现有的代码一起工作,因其具有快速开发、富有表现力和灵活的ui、原生性能等特点而被广泛使用。所谓快速开发表现为毫秒级的热重载,修改后的应用界面会立即更新;所谓富有表现力和灵活的ui表现为快速发布聚焦于原生体验的功能,其分层的架构允许用户自定义,从而实现快速渲染和富有表现力且灵活的设计;所谓原生性能表现为flutter包含了许多核心的widget(小程序),如滚动、导航、图标和字体等,这些都可以在ios和android上达到原生应用一样的性能。
28.flutter工程的类型包括但不限于flutter application(flutter应用)、flutter module(flutter模组)、flutter plugin(flutter插件)、flutter package(flutter组包)。具体来说,flutter application(flutter应用)是一种标准的fluter app工程,包含标准的dart层和native平台层;flutter module(flutter模组)是指混编到已有的安卓/ios工程内;flutter plugin(flutter插件)是flutter平台插件工程,包含dart层与native平台层的实现,提供安卓或ios的底层封装,在flutter层提供组件功能,使flutter可以比较方便的调取native的模块,很多平台相关性或者对于flutter实现起来比较复杂的部分都可以封装成plugin;flutter package(flutter组包)是指flutter纯dart插件工程,仅包含dart层的实现,通常可定义一些公共widget。为便于理解,下文以flutter plugin(flutter插件)类型为例进行说明,但本发明并不仅以该flutter类型为限。
29.步骤s12:在所述第一应用中设置的拦截模块拦截所述网络请求并将其发送至第二应用。
30.具体而言,所述第一应用的flutter工程设有第一sparrow模块;所述第一sparrow模块对所述flutter工程发起的网络请求进行打包后向外发送;第一应用中设置的拦截模块对所述网络请求拦截后进行分析并选择对应的第二应用,以向第二应用转发所述网络请求。
31.需说明的是,flutter工程和原生工程是通过平台通道(channel)来完成的。平台通道的类型包括但不限于基本信息平台通道(basic message channel)、方法通道(method channel)和事件通道(event channel)。基本信息平台通道(basic message channel)用于传递字符串和半结构化的信息,用以持续通信,例如原生工程将遍历到的文件信息陆续传递到dart,再例如flutter工程将从服务端陆续获取到的信息发给原生工程进行加工,原生工程将加工处理结果返回等。方法通道(method channel)是一次性通信,例如flutter工程调用native工程进行拍照等。事件通道(event channel)用于数据流(event streams)的通信,用以持续通信,在收到消息后无法回复此消息,常用于native工程向dart的通信。
32.步骤s13:所述第二应用的原生工程接收并解析所述网络请求后转发至后端服务器供其处理,并将所述后端服务器返回的网络请求处理结果发送至所述第一应用。
33.需说明的是,在现有的flutter native混合开发模式下,flutter工程和native工程同处于一个应用中,但因为native工程编译速度慢,导致模块开发遇到瓶颈。因此,本发明减少了对同一个应用中native测库的依赖,让flutter工程和实际起到原生性能的native工程分属于不同的两个应用中,并通过拦截技术实现跨应用平台的工程构建。
34.为便于理解,现以哈罗出行应用为例并结合图2a和2b来进一步说明。
35.图2a展示的现有技术中壳flutter工程和native工程之间的交互原理,具体如下:flutter工程中设有第一sparrow模块,native工程中也设有第二sparrow模块。flutter页面发起网络请求,所述第一sparrow将所述网络请求进行相应打包,并通过通道(platform channel)向native模块发送所述网络请求;native模块中的第二sparrow模块对所述网络请求进行相应解析。
36.需说明的是,flutter的ui框架使用dart语言编写,而native侧并不使用dart语言编写(如c 语言),这就涉及到两种不同编写语言之间的通信。因此,flutter提供了platform channel的模块,可以方便地向native发送消息,或从native接收消息。以dart调用c 为例,可支持同步调用方式和异步调用方式;所谓同步调用是指在解析dart代码时若遇到native关键字,会将后面的函数名进行解析,得到相应的函数指针;所谓异步调用基于端口和消息队列实现,其中创建端口、发送消息等操作也要基于同步调用实现,端口(port)用来索引消息处理器(message_handler),每个消息处理器都持有一个消息队列。异步调用的过程就是调用者向一个端口发送一个消息,存储在消息队列中,并唤醒消息处理器去处理所有的消息。
37.由于图2a中的flutter模块和native模块同属于一个应用,所以模块化混合开发导致混合工程中同时包含native端的代码和flutter侧的代码,故导致编译时间过长,影响开发效率。
38.图2b展示的是本发明中壳flutter工程和native工程之间的交互原理,具体如下:
flutter工程中设有第一sparrow模块,flutter页面发起网络请求,所述第一sparrow将所述网络请求进行相应打包,并通过通道(platform channel)向native模块发送所述网络请求。
39.值得注意的是,native工程中设有client模块,所述client模块用于拦截所述网络请求,也即本实施例中与flutter工程并不调用与其同属于一个应用中的native工程的网络库,而是网络请求被拦截并转发至对应的第二应用的service服务器。第二应用(如图中的哈罗出行app)中的第二sparrow模块,对网络请求做出相应的解析处理,随后将解析结果发送至真正的后端服务器,后端服务器响应于网络请求进行相应的处理,处理结果发送回第二应用,第二应用再将处理结果传输至第一应用的flutter界面。因此,本发明实现一种利用http请求去代理客户端的method channel和event channel,将网络请求通过http请求交给服务端去处理,拿到服务端真正的mechod channel和event channel数据。flutter单业务开发的跨进程快速工程构建方法不再依赖于业务库,研发阶段单业务可在1分钟内构建独立的测试app,更容易开发人员入门,对于flutter-native混合开发工程来说是一种技术上革命性的颠覆。
40.值得说明的是,所述后端服务器是指最终对网络请求做出数据处理的服务器,例如位于机房内的服务器等。所述后端服务器根据体系结构的不同,可分为ia架构服务器和risc架构服务器。其中,risc架构服务器采用的cpu是精简指令集的处理器;ia架构服务器采用的是cisc体系结构,即复杂指令集体系结构,这种体系结构的特点是指令较长,指令的功能较强,单个指令可执行的功能较多。
41.在一些示例中,所述拦截模块包括flutterboost插件,flutterboost是一种开源的flutter插件,可以为现有原生应用程序提供flutter混合集成方案,其理念是将flutter像webview一样使用,flutterboost帮助开发者处理native和flutter页面的映射和跳转。
42.如图3所示,展示了本发明在一实施例中基于flutter跨应用的工程构建系统的结构示意图。本实施例提供的基于flutter跨应用的工程构建系统包括第一应用31和第二应用32。第一应用31包括flutter工程311,并设置第一sparrow模块312和拦截模块313;第二应用32包括原生工程;原生工程设有服务模块321和第二sparrow模块322。
43.所述flutter工程311发起网络请求;第一sparrow模块312对所述网络请求进行打包后发送。拦截模块313拦截所述网络请求并将其发送至对应的第二应用32。第二应用32的服务模块321接收所述网络请求,并调用该第二sparrow模块322的网络库以进行数据解析,解析结果发送自后端服务器(即真正用于对该网络请求进行处理的服务器),再从所述后端服务器接收网络请求处理结果后返回至所述第一应用31的flutter工程311。
44.需说明的是,flutter是google开源的构建用户界面工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、web、桌面和嵌入式平台,可用于构建跨平台手机app的sdk(software development kit,软件开发工具包),可以快速地在android和ios系统上构建高质量的原生用户界面。flutter可以与现有的代码一起工作,因其具有快速开发、富有表现力和灵活的ui、原生性能等特点而被广泛使用。所谓快速开发表现为毫秒级的热重载,修改后的应用界面会立即更新;所谓富有表现力和灵活的ui表现为快速发布聚焦于原生体验的功能,其分层的架构允许用户自定义,从而实现快速渲染和富有表现力且灵活的设计;所谓原生性能表现为flutter包含了许多核心的widget(小程序),如滚动、导航、
图标和字体等,这些都可以在ios和android上达到原生应用一样的性能。
45.flutter工程的类型包括但不限于flutter application(flutter应用)、flutter module(flutter模组)、flutter plugin(flutter插件)、flutter package(flutter组包)。具体来说,flutter application(flutter应用)是一种标准的fluter app工程,包含标准的dart层和native平台层;flutter module(flutter模组)是指混编到已有的安卓/ios工程内;flutter plugin(flutter插件)是flutter平台插件工程,包含dart层与native平台层的实现,提供安卓或ios的底层封装,在flutter层提供组件功能,使flutter可以比较方便的调取native的模块,很多平台相关性或者对于flutter实现起来比较复杂的部分都可以封装成plugin;flutter package(flutter组包)是指flutter纯dart插件工程,仅包含dart层的实现,通常可定义一些公共widget。
46.另外,flutter工程和原生工程是通过平台通道(channel)来完成的。平台通道的类型包括但不限于基本信息平台通道(basic message channel)、方法通道(method channel)和事件通道(event channel)。基本信息平台通道(basic message channel)用于传递字符串和半结构化的信息,用以持续通信,例如原生工程将遍历到的文件信息陆续传递到dart,再例如flutter工程将从服务端陆续获取到的信息发给原生工程进行加工,原生工程将加工处理结果返回等。方法通道(method channel)是一次性通信,例如flutter工程调用native工程进行拍照等。事件通道(event channel)用于数据流(event streams)的通信,用以持续通信,在收到消息后无法回复此消息,常用于native工程向dart的通信。
47.在一些示例中,所述拦截模块包括flutterboost插件,flutterboost是一种开源的flutter插件,可以为现有原生应用程序提供flutter混合集成方案,其理念是将flutter像webview一样使用,flutterboost帮助开发者处理native和flutter页面的映射和跳转。
48.应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,服务模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上服务模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
49.例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,简称asic),或,一个或多个微处理器(digital signal processor,简称dsp),或,一个或者多个现场可编程门阵列(field programmable gate array,简称fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,简称cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称soc)的形式实现。
50.如图4所示,展示了本发明在一实施例中电子终端的结构示意图。本实例提供的电
子终端,包括:处理器41、存储器42、通信器43;存储器42通过系统总线与处理器41和通信器43连接并完成相互间的通信,存储器42用于存储计算机程序,通信器43用于和其他设备进行通信,处理器41用于运行计算机程序,使电子终端执行如上基于flutter跨应用的工程构建方法的各个步骤。
51.上述提到的系统总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
52.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
53.本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述基于flutter跨应用的工程构建方法。
54.本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
55.于本技术提供的实施例中,所述计算机可读写存储介质可以包括只读存储器、随机存取存储器、eeprom、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁存储设备、闪存、u盘、移动硬盘、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。另外,任何连接都可以适当地称为计算机可读介质。例如,如果指令是使用同轴电缆、光纤光缆、双绞线、数字订户线(dsl)或者诸如红外线、无线电和微波之类的无线技术,从网站、服务器或其它远程源发送的,则所述同轴电缆、光纤光缆、双绞线、dsl或者诸如红外线、无线电和微波之类的无线技术包括在所述介质的定义中。然而,应当理解的是,计算机可读写存储介质和数据存储介质不包括连接、载波、信号或者其它暂时性介质,而是旨在针对于非暂时性、有形的存储介质。如申请中所使用的磁盘和光盘包括压缩光盘(cd)、激光光盘、光盘、数字多功能光盘(dvd)、软盘和蓝光光盘,其中,磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。
56.综上所述,本技术提供基于flutter跨应用的工程构建方法、系统、终端及介质,本发明实现一种利用http请求去代理客户端的method channel和event channel,将网络请求通过http请求交给服务端去处理,拿到服务端真正的mechod channel和event channel数据,因此有效解决了现有flutter-native混合开发中所遇到的编译速度慢、数据不一致性、开发效率低等问题。所以,本技术有效克服了现有技术中的种种缺点而具高度产业利用价值。
57.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献