CN117667157A - 热更新方法和系统、客户端应用的更新方法、介质及设备 - Google Patents

热更新方法和系统、客户端应用的更新方法、介质及设备 Download PDF

Info

Publication number
CN117667157A
CN117667157A CN202311850640.7A CN202311850640A CN117667157A CN 117667157 A CN117667157 A CN 117667157A CN 202311850640 A CN202311850640 A CN 202311850640A CN 117667157 A CN117667157 A CN 117667157A
Authority
CN
China
Prior art keywords
code
flutter
update package
hot update
javascript
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311850640.7A
Other languages
English (en)
Inventor
邹铭杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Netease Zaigu Technology Co Ltd
Original Assignee
Hangzhou Netease Zaigu Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Netease Zaigu Technology Co Ltd filed Critical Hangzhou Netease Zaigu Technology Co Ltd
Priority to CN202311850640.7A priority Critical patent/CN117667157A/zh
Publication of CN117667157A publication Critical patent/CN117667157A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本公开的实施方式提供了一种热更新方法和系统、客户端应用的更新方法、介质及设备,所述方法包括:获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;将所述JavaScript代码打包,生成热更新包;将所述热更新包传输给客户端,以使所述客户端利用所述热更新包更新所述Flutter应用。上述方法使客户端能利用热更新包对Flutter应用进行热更新,及时实现Flutter应用的功能更新和Bug修复,无需重新发布并让用户重新下载安装,提升用户体验,并且用户可以在Typescript文件中直接编写Dart代码学习,无需额外学习Typescript语言,降低了学习成本。

Description

热更新方法和系统、客户端应用的更新方法、介质及设备
技术领域
本公开的实施方式涉及计算机技术领域,更具体地,本公开的实施方式涉及一种热更新方法和系统、客户端应用的更新方法、介质及设备。
背景技术
本部分旨在为权利要求书中陈述的本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
Flutter是一种使用Dart语言开发的跨平台移动应用开发框架,具有快速开发、自定义UI、高性能和强大的工具支持等特点。它可以帮助开发者轻松构建高性能、美观、跨平台的移动应用,同时加快开发速度和提高用户体验,可以用于开发iOS、Android、Web和桌面应用。
但是Flutter框架并不支持热更新功能,在需要更新Flutter应用或者修复应用中的Bug时,只能重新发布Flutter应用,让用户重新下载安装,其中应用市场审核也需要一定时间,耗费的时间较长,用户体验较差。
发明内容
有鉴于此,本公开提供一种热更新方法和系统、客户端应用的更新方法、介质及设备,以解决相关技术中的不足。
在本公开实施方式的第一方面中,提供了一种种热更新方法,用于对Flutter应用热更新,所述方法包括:
获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;
对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;
将所述JavaScript代码打包,生成热更新包;
将所述热更新包传输给客户端,以使所述客户端利用所述热更新包更新所述Flutter应用。
可选的,将所述热更新包传输给客户端包括:
将所述热更新包上传到指定地址进行存储,以供客户端从所述指定地址下载所述热更新包。
可选的,利用所述热更新包更新所述Flutter应用包括:
对所述热更新包进行编译,得到若干JavaScript对象;
根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;
根据所述若干Flutter组件更新所述Flutter应用。
可选的,所述方法还包括:
预先提供若干自定义命令,响应于用户对所述自定义命令的调用请求,触发执行创建热更新项目、生成所述热更新包以及加密所述热更新包的若干命令。
在本公开实施方式的第二方面中,提供了一种客户端应用的更新方法,所述客户端安装有Flutter应用,所述方法用于更新所述Flutter应用;所述方法包括:
获取基于如上述第一方面所述的方法传输的热更新包;
对所述热更新包进行编译,得到若干JavaScript对象;
根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;
根据所述若干Flutter组件更新所述Flutter应用。
可选的,获取热更新包的步骤包括:
从指定地址下载所述热更新包,所述指定地址用于存储服务端上传的热更新包。
在本公开实施方式的第三方面中,提供了一种热更新系统,包括服务端和若干安装有Flutter应用的客户端;
所述服务端,用于获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;将所述JavaScript代码打包,生成热更新包;将所述热更新包传输给所述客户端;
所述客户端,用于获取所述热更新包;对所述热更新包进行编译,得到若干JavaScript对象;根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;根据所述若干Flutter组件更新所述Flutter应用。
可选的,还包括:
热更新管理平台,用于接收所述服务端上传的热更新包,以供所述客户端下载。
在本公开实施方式的第四方面中,一种介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的方法,或第二方面所述的方法。
在本公开实施方式的第五方面中,提供了一种计算设备,包括:
处理器;
用于存储处理器可执行程序的存储器;
其中,所述处理器通过运行所述可执行程序以实现如上述第一方面所述的方法,或第二方面所述的方法。
根据本公开实施方式,通过获取用户编写的Dart代码,将Dart代码转换为能调用组件API以生成热更新组件TypeScript代码,将TypeScript代码编译成JavaScript代码并打包,生成热更新包,从而使客户端能利用热更新包对Flutter应用进行热更新,及时实现Flutter应用的功能更新和Bug修复,无需重新发布并让用户重新下载安装,提升用户体验,并且用户可以在Typescript文件中直接编写Dart代码学习,无需额外学习Typescript语言,降低了学习成本。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示意性地示出了根据本公开实施方式的一种热更新方法的流程图;
图2示意性地示出了根据本公开实施方式的一种客户端应用的更新方法的流程图;
图3示意性地示出了根据本公开实施方式的一种热更新系统的示意图;
图4示意性地示出了根据本公开实施方式的一种介质的示意图;
图5示意性地示出了根据本公开实施方式的一种计算设备的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本公开的实施方式,提出了一种热更新方法和系统、客户端应用的更新方法、介质及设备。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
Flutter是一种使用Dart语言开发的跨平台移动应用开发框架,具有快速开发、自定义UI、高性能和强大的工具支持等特点。它可以帮助开发者轻松构建高性能、美观、跨平台的移动应用,同时加快开发速度和提高用户体验,可以用于开发iOS、Android、Web和桌面应用。
应用程序热更新是指应用程序在运行期间,通过网络连接下载并安装新的代码或资源,以实现应用程序的功能更新或Bug修复,而无需重新发布整个应用程序的过程。通过热更新,开发人员可以快速响应用户需求,提供新的功能、修复错误或优化性能,同时避免了用户需要手动更新应用的不便。
但是发明人发现Flutter框架并不支持热更新功能,在需要更新Flutter应用或者修复应用中的Bug时,只能重新发布Flutter应用,让用户重新下载安装,其中应用市场审核也需要一定时间,耗费的时间较长,用户体验较差。
除此之外,发明人考虑到JavaScript语言的动态化特性,在运行时可以动态加载新的代码或更新现有的代码,具备实时更新能力,较适用于热更新场景。TypeScript是在JavaScript的基础上添加静态类型定义构建而成的编程语言,是JavaScript语言的超集,可以被编译成JavaScript语言。由于TypeScript可维护性和可靠性更高,并且其生态圈较大,有大量的第三方库和工具可供选择,开发人员通常会选择使用TypeScript替代JavaScript来进行开发。发明人还考虑到,Flutter应用的开发人员通常是使用Dart语言进行开发,若想编写Typescript代码则需要另外进行学习,学习成本较高。
因此,发明人提出了针对Flutter应用进行热更新的方法,通过获取用户编写的Dart代码,将Dart代码转换为能调用组件API以生成热更新组件TypeScript代码,将TypeScript代码编译成JavaScript代码并打包,生成热更新包,从而使客户端能利用热更新包对Flutter应用进行热更新,及时实现Flutter应用的功能更新和Bug修复,无需重新发布并让用户重新下载安装,提升用户体验,并且用户可以在Typescript文件中直接编写Dart代码学习,无需额外学习Typescript语言,降低了学习成本。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
示例性方法
下面参考图1来描述根据本公开示例性实施方式的一种热更新方法。
图1示意性地示出了根据本公开实施方式的一种热更新方法,用于对Flutter应用热更新,所述方法包括:
步骤S101,获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;
步骤S102,对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;
步骤S103,将所述JavaScript代码打包,生成热更新包;
步骤S104,将所述热更新包传输给客户端,以使所述客户端利用所述热更新包更新所述Flutter应用。
在本实施例中,可以预先根据Dart语言的语法特性和语法糖,例如初始化对象的方式、级联操作符、可选链式调用等,用TypeScript语言编写相应的扩展方法和语法糖,在现有类上添加新的方法以及自定义语法转换的方法,确保TypeScript编写的扩展方法能与Dart语法特性的语义相匹配,并且TypeScript编写的语法糖能被TypeScript编译器正确解析和执行,从而可以通过预先编好的TypeScript语言编写相应的扩展方法和语法糖,将Dart代码转换为TypeScript代码,使得使开发人员可以在TypeScript文件中直接编写Dart代码。
例如,TypeScript中初始化对象时需要使用new关键字,在Dart中则不需要,此时可以编写一个语法糖替换TypeScript初始化对象的方法,使得开发人员可以在TypeScript文件中采用和Dart一样的初始化对象的方式,无需使用new关键字来初始化对象。
在本实施例中,可以预先使用TypeScript构建对应于Flutter组件的组件,所构建的组件的API与Flutter组件API也相对应,用户编写的Dart代码中可以调用Flutter组件API,将Dart代码转换为TypeScript代码后,TypeScript代码则可以调用Flutter组件API所对应的组件API,以生成热更新组件。其中,Flutter组件可以包括Flutter官方所提供的组件,也可以包括用户自定义的Flutter组件,本公开对此不作限制。
在Flutter中一切皆Widget,Flutter中的对象例如UI元素、组件等,都可以是Widget。Widget可以分为有状态的Widget和无状态的Widget,有状态的Widget可以根据用户交互、数据变化等因素而改变自身的属性或状态,无状态的Widget则不可改变。
在本实施例中,使用TypeScript构建对应于Flutter组件的组件时,可以使用TypeScript定义基础Widget类,用于表示基础的Flutter组件;还可以定义继承于Widget类的StatefulWidget类及StatelessWidget类,用于表示Flutter中的有状态组件和无状态组件,并可以在其中提供initState(初始化组件状态),setState(更新组件状态),dispose(销毁组件)等方法;还可以根据Flutter组件定义对应的继承于Widget类的基础UI组件类,例如Button(按钮),Icon(图标),Image(图片)等组件。
在本实施例中,使用TypeScript构建对应于Flutter组件的组件时,所构建的组件的API所包括的参数也要与Flutter组件API的参数相对应。例如,Flutter组件包括Button(按钮)组件,Button组件API包括text和onclick两个参数,使用TypeScript所构建的对应组件的API也要包括text和onclick两个参数。
本实施例通过获取用户编写的Dart代码,将Dart代码转换为能调用组件API以生成热更新组件TypeScript代码,将TypeScript代码编译成JavaScript代码并打包,生成热更新包,从而使客户端能利用热更新包对Flutter应用进行热更新,及时实现Flutter应用的功能更新和Bug修复,无需重新发布并让用户重新下载安装,提升用户体验,并且用户可以在Typescript文件中直接编写Dart代码学习,无需额外学习Typescript语言,降低了学习成本。
在一实施例中,步骤S104中将所述热更新包传输给客户端可以包括:
将热更新包上传到指定地址进行存储,以供客户端从指定地址下载所述热更新包。
在本实施例中,同一Flutter应用程序可以有多个版本,不同版本可以对应不同的热更新包,可以通过服务器的数据库存储不同Flutter应用程序以及对应的不同版本的热更新包,每个Flutter应用可以对应有唯一的应用标识。服务器接收到热更新包时,可以根据应用标识确定出热更新包对应的Flutter应用,在数据库中为该Flutter应用添加新的版本信息,与该热更新包进行绑定并存储。在服务器中热更新包可以位于对应的Flutter应用的相应版本的目录下,可以通过服务器地址以及热更新包的文件路径确定指定地址。
在一实施例中,步骤S104中利用热更新包更新Flutter应用可以包括:
对热更新包进行编译,得到若干JavaScript对象;
根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将若干JavaScript对象转换为若干Flutter组件;
根据若干Flutter组件更新Flutter应用。
在本实施例中,热更新包是将包括若干JavaScript对象的JavaScript代码打包生成的,由此客户端对获取到的热更新包进行编译,可以得到若干JavaScript对象,JavaScript对象可以与使用TypeScript构建的组件API相对应。
在本实施例中,可以通过TypeScript构建的组件API与Flutter组件API的对应关系,来确定JavaScript对象与Flutter组件的映射关系,进而生成相应的映射表。
在本实施例中,通常一个JavaScript对象类/Flutter组件可以对应有若干构造方法,不同的构造方法所需的参数可能不同。映射表可以包括JavaScript对象的类名和构造方法名及对应的Flutter组件的组件名和构造方法名。
基于映射表将若干JS对象转换为若干Flutter组件的具体过程可以包括:
通过JavaScript的反射机制,获取当前JavaScript对象的类名,在映射表中根据JavaScript对象的类名找到对应的Flutter组件名;
通过JavaScript的反射机制获取当前JavaScript对象的构造方法名,在映射表中根据JavaScript对象的构造方法名找到对应的Flutter组件的构造方法名;
根据获取的Flutter组件的组件名和构造方法名,确定该Flutter组件对应的参数列表;
针对参数列表中的每个参数,通过JavaScript的反射机制从JavaScript对象中获取到对应的参数值;
将包含若干参数值的参数列表,传入获取的Flutter组件的构造方法名所对应的构造方法中,创建Flutter组件。
在本实施例中,JavaScript对象之间会有层次关系,相应的Flutter组件之间也会有层次关系,根据若干Flutter组件更新Flutter应用时,可以通过递归的方式将若干JavaScript对象转换为具有层次关系的若干Flutter组件,即形成了Flutter组件树,通过Flutter组件树添加到当前需热更新的Flutter应用中相应的容器组件中,从而实现Flutter应用的热更新。
在一实施例中,热更新方法还可以包括:
预先提供若干自定义命令,响应于用户对自定义命令的调用请求,触发执行创建热更新项目、生成热更新包以及加密热更新包的若干命令。
在本实施例中,可以预先确定创建热更新项目、生成热更新包以及加密热更新包分别所需的若干命令,并分别创建可调用所需的若干命令的对应的自定义命令,从而使用户可以直接调用对应的自定义命令来进行创建热更新项目、生成热更新包以及加密热更新包的操作,无需依次去调用对应的若干命令,极大方便了用户,提升用户体验。
示例性方法
下面参考图2来描述根据本公开示例性实施方式的一种客户端应用的更新方法。
图2示意性地示出了根据本公开实施方式的一种客户端应用的更新方法,所述客户端安装有Flutter应用,所述方法用于更新所述Flutter应用;所述方法包括:
步骤S201,获取上述任一实施例所述的热更新方法传输的热更新包;
步骤S202,对所述热更新包进行编译,得到若干JavaScript对象;步骤S203,根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;
步骤S204,根据所述若干Flutter组件更新所述Flutter应用。
在本实施例中,热更新包是将包括若干JavaScript对象的JavaScript代码打包生成的,由此客户端对获取到的热更新包进行编译,可以得到若干JavaScript对象,JavaScript对象可以与使用TypeScript构建的组件API相对应。
在本实施例中,可以通过TypeScript构建的组件API与Flutter组件API的对应关系,来确定JavaScript对象与Flutter组件的映射关系,进而生成相应的映射表。
在本实施例中,通常一个JavaScript对象类/Flutter组件可以对应有若干构造方法,不同的构造方法所需的参数可能不同。映射表可以包括JavaScript对象的类名和构造方法名及对应的Flutter组件的组件名和构造方法名。
基于映射表将若干JS对象转换为若干Flutter组件的具体过程可以包括:
通过JavaScript的反射机制,获取当前JavaScript对象的类名,在映射表中根据JavaScript对象的类名找到对应的Flutter组件名;
通过JavaScript的反射机制获取当前JavaScript对象的构造方法名,在映射表中根据JavaScript对象的构造方法名找到对应的Flutter组件的构造方法名;
根据获取的Flutter组件的组件名和构造方法名,确定该Flutter组件对应的参数列表;
针对参数列表中的每个参数,通过JavaScript的反射机制从JavaScript对象中获取到对应的参数值;
将包含若干参数值的参数列表,传入获取的Flutter组件的构造方法名所对应的构造方法中,创建Flutter组件。
在本实施例中,JavaScript对象之间会有层次关系,相应的Flutter组件之间也会有层次关系,根据若干Flutter组件更新Flutter应用时,可以通过递归的方式将若干JavaScript对象转换为具有层次关系的若干Flutter组件,即形成了Flutter组件树,通过Flutter组件树添加到当前需热更新的Flutter应用中相应的容器组件中,从而实现Flutter应用的热更新。
在一实施例中步骤S201获取热更新包的步骤可以包括:
从指定地址下载热更新包,指定地址用于存储服务端上传的热更新包。
在本实施例中,同一Flutter应用程序可以有多个版本,不同版本可以对应不同的热更新包,可以通过服务器的数据库存储不同Flutter应用程序以及对应的不同版本的热更新包,每个Flutter应用可以对应有唯一的应用标识。服务器接收到热更新包时,可以根据应用标识确定出热更新包对应的Flutter应用,在数据库中为该Flutter应用添加新的版本信息,与该热更新包进行绑定并存储。在服务器中热更新包可以位于对应的Flutter应用的相应版本的目录下,可以通过服务器地址以及热更新包的文件路径确定指定地址。
示例性系统
在介绍了本公开示例性实施方式的方法之后,接下来,参考图3来描述根据本公开示例性实施方式的一种热更新系统。
图3示意性地示出了根据本公开实施方式的一种热更新系统,包括服务端11和若干安装有Flutter应用的客户端12;
服务端11,用于获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;将所述JavaScript代码打包,生成热更新包;将所述热更新包传输给客户端12;
客户端12,用于获取所述热更新包;对所述热更新包进行编译,得到若干JavaScript对象;根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;根据所述若干Flutter组件更新所述Flutter应用。
在一实施例中,热更新系统还可以包括:
热更新管理平台13,用于接收服务端11上传的热更新包,以供客户端12下载。
示例性介质
在介绍了本公开示例性实施方式的方法之后,接下来,参考图4来描述本公开示例性实施方式的介质。
本示例性实施方式中,可以通过程序产品实现上述方法,如可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
该程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。
可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RE等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如C语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性计算设备
在介绍了本公开示例性实施方式的插件、方法和介质之后,接下来,参考图5来描述本公开示例性实施方式的计算设备。
图5显示的计算设备50仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,计算设备50以通用计算设备的形式表现。计算设备50的组件可以包括但不限于:上述至少一个处理单元501、上述至少一个存储单元502,连接不同系统组件(包括处理单元501和存储单元502)的总线503。
总线503包括数据总线、控制总线和地址总线。
存储单元502可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)5021和/或高速缓存存储器5022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)5023。
存储单元502还可以包括具有一组(至少一个)程序模块5024的程序/实用工具5025,这样的程序模块5024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算设备50也可以与一个或多个外部设备504(例如键盘、指向设备等)通信。
这种通信可以通过输入/输出(I/O)接口505进行。并且,计算设备50还可以通过网络适配器506与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图5所示,网络适配器506通过总线503与计算设备50的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备50使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了热更新系统的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (10)

1.一种热更新方法,其特征在于,用于对Flutter应用热更新,所述方法包括:
获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;
所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;
对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;
将所述JavaScript代码打包,生成热更新包;
将所述热更新包传输给客户端,以使所述客户端利用所述热更新包更新所述Flutter应用。
2.根据权利要求1所述的方法,其特征在于,将所述热更新包传输给客户端包括:
将所述热更新包上传到指定地址进行存储,以供客户端从所述指定地址下载所述热更新包。
3.根据权利要求1所述的方法,其特征在于,利用所述热更新包更新所述Flutter应用包括:
对所述热更新包进行编译,得到若干JavaScript对象;
根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;
根据所述若干Flutter组件更新所述Flutter应用。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
预先提供若干自定义命令,响应于用户对所述自定义命令的调用请求,触发执行创建热更新项目、生成所述热更新包以及加密所述热更新包的若干命令。
5.一种客户端应用的更新方法,其特征在于,所述客户端安装有Flutter应用,所述方法用于更新所述Flutter应用;所述方法包括:
获取基于权利要求1-4任一所述的方法传输的热更新包;
对所述热更新包进行编译,得到若干JavaScript对象;
根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;
根据所述若干Flutter组件更新所述Flutter应用。
6.根据权利要求5所述的方法,其特征在于,获取热更新包的步骤包括:
从指定地址下载所述热更新包,所述指定地址用于存储服务端上传的热更新包。
7.一种热更新系统,其特征在于,包括服务端和若干安装有Flutter应用的客户端;
所述服务端,用于获取用户编写的Dart代码,将所述Dart代码转换为TypeScript代码;所述TypeScript代码用于调用组件API以生成热更新组件,所述组件API为符合TypeScript语法的Flutter组件API;对所述TypeScript代码进行编译,生成JavaScript代码;所述JavaScript代码包括若干JavaScript对象;将所述JavaScript代码打包,生成热更新包;将所述热更新包传输给所述客户端;
所述客户端,用于获取所述热更新包;对所述热更新包进行编译,得到若干JavaScript对象;根据存储了JavaScript对象与Flutter组件的映射关系的映射表,将所述若干JavaScript对象转换为若干Flutter组件;根据所述若干Flutter组件更新所述Flutter应用。
8.根据权利要求7所述的系统,其特征在于,还包括:
热更新管理平台,用于接收所述服务端上传的热更新包,以供所述客户端下载。
9.一种介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4中任一项所述的方法或者权利要求5或6所述的方法。
10.一种计算设备,其特征在于,包括:
处理器;
用于存储处理器可执行程序的存储器;
其中,所述处理器通过运行所述可执行程序以实现如权利要求1至4中任一项所述的方法或者权利要求5或6所述的方法。
CN202311850640.7A 2023-12-28 2023-12-28 热更新方法和系统、客户端应用的更新方法、介质及设备 Pending CN117667157A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311850640.7A CN117667157A (zh) 2023-12-28 2023-12-28 热更新方法和系统、客户端应用的更新方法、介质及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311850640.7A CN117667157A (zh) 2023-12-28 2023-12-28 热更新方法和系统、客户端应用的更新方法、介质及设备

Publications (1)

Publication Number Publication Date
CN117667157A true CN117667157A (zh) 2024-03-08

Family

ID=90079015

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311850640.7A Pending CN117667157A (zh) 2023-12-28 2023-12-28 热更新方法和系统、客户端应用的更新方法、介质及设备

Country Status (1)

Country Link
CN (1) CN117667157A (zh)

Similar Documents

Publication Publication Date Title
CN101470621B (zh) 虚拟机配置系统
US9811360B2 (en) Dynamic determination of application server runtime classloading
WO2017050094A1 (zh) 加载应用程序的方法及装置
US7694277B2 (en) Cross version customization of design environment
US10824453B2 (en) Hypervisor-based just-in-time compilation
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
US9841953B2 (en) Pluggable components for runtime-image generation
US20090064196A1 (en) Model based device driver code generation
US20060161898A1 (en) Method and system for project library dependency management
US8387032B1 (en) Captive runtime deployment
TW201308209A (zh) 運行時間系統
US20200012590A1 (en) Development-time awareness of a production dependency injection environment
JP6951442B2 (ja) シブリング・コール処理のためのコンピュータ・プログラム製品、コンピュータ・システムおよびコンピュータによって実施される方法
US20090144711A1 (en) System and method for common compiler services based on an open services gateway initiative architecture
CN111880801A (zh) 应用程序动态化方法、装置、电子设备
CN113312046A (zh) 子应用页面处理方法、装置和计算机设备
US20080141219A1 (en) Multiple inheritance facility for java script language
CN116755713A (zh) 应用程序的生成方法、装置、设备及存储介质
Rourke Learn WebAssembly: Build web applications with native performance using Wasm and C/C++
WO2022097020A1 (en) Updated shared library reloading without stopping execution of an application
CN111552480B (zh) 跨平台编译方法、装置、设备及可读存储介质
CN116401003A (zh) 基于桌面操作系统的安卓应用运行方法、系统及存储介质
CN112379885B (zh) 小程序编译方法、装置、设备及可读存储介质
CN117667157A (zh) 热更新方法和系统、客户端应用的更新方法、介质及设备
CN113204351B (zh) 一种嵌入式系统包管理方法及其使用方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination