CN113805890A - 小程序跨应用迁移方法、设备、终端、系统及存储介质 - Google Patents
小程序跨应用迁移方法、设备、终端、系统及存储介质 Download PDFInfo
- Publication number
- CN113805890A CN113805890A CN202111064530.9A CN202111064530A CN113805890A CN 113805890 A CN113805890 A CN 113805890A CN 202111064530 A CN202111064530 A CN 202111064530A CN 113805890 A CN113805890 A CN 113805890A
- Authority
- CN
- China
- Prior art keywords
- target
- abstract syntax
- syntax tree
- application program
- original
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 230000006870 function Effects 0.000 claims abstract description 129
- 238000006243 chemical reaction Methods 0.000 claims abstract description 57
- 230000008569 process Effects 0.000 claims abstract description 28
- 230000005012 migration Effects 0.000 claims description 45
- 238000013508 migration Methods 0.000 claims description 45
- 238000004891 communication Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 20
- 238000011161 development Methods 0.000 claims description 15
- 238000009877 rendering Methods 0.000 claims description 11
- 238000004806 packaging method and process Methods 0.000 claims description 9
- 230000009466 transformation Effects 0.000 claims description 2
- 230000001131 transforming effect Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 36
- 238000005516 engineering process Methods 0.000 description 10
- 230000003287 optical effect Effects 0.000 description 5
- 230000006978 adaptation Effects 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000003044 adaptive effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- SPBWHPXCWJLQRU-FITJORAGSA-N 4-amino-8-[(2r,3r,4s,5r)-3,4-dihydroxy-5-(hydroxymethyl)oxolan-2-yl]-5-oxopyrido[2,3-d]pyrimidine-6-carboxamide Chemical compound C12=NC=NC(N)=C2C(=O)C(C(=O)N)=CN1[C@@H]1O[C@H](CO)[C@@H](O)[C@H]1O SPBWHPXCWJLQRU-FITJORAGSA-N 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000003339 best practice Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种小程序跨应用迁移方法、设备、终端、系统及存储介质,属于数据处理领域。该方法包括:解析原应用程序的小程序的原代码文件,生成原抽象语法树;根据原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树;基于目标抽象语法树,生成小程序在目标应用程序的目标代码文件;将目标代码文件传输至用户终端,以使用户终端在目标应用程序运行目标代码文件的过程中,获取目标配置参数完成目标应用程序的应用程序编程接口API调用以实现小程序的功能,目标配置参数包括与目标应用程序的当前API版本匹配的配置参数。根据本申请实施例能够提高小程序在不同应用程序的兼容性。
Description
技术领域
本申请属于数据处理领域,尤其涉及一种小程序跨应用迁移方法、装置、设备、终端、系统及存储介质。
背景技术
小程序是一种不需要下载安装即可使用的应用,依附在宿主应用程序中。而随着小程序技术的快速发展,各个应用程序平台都推出了自己的小程序框架规范。
为了提高小程序的灵活应用,希望小程序能够在不同的应用程序中迁移,也就是说,使在某一应用程序运行的小程序,可迁移至另一应用程序。但由于不同应用程序的规范等不同,导致小程序在不同应用程序的兼容性较差,甚至在一些应用程序中无法直接运行。
发明内容
本申请实施例提供一种小程序跨应用迁移方法、设备、终端、系统及存储介质,能够提高小程序在不同应用程序的兼容性。
第一方面,本申请实施例提供一种小程序跨应用迁移方法,应用于编译设备,该方法包括:解析原应用程序的小程序的原代码文件,生成原抽象语法树,原抽象语法树为与原应用程序对应的原代码文件的抽象语法树;根据原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树,目标抽象语法树为与目标应用程序对应的原代码文件的抽象语法树;基于目标抽象语法树,生成小程序在目标应用程序的目标代码文件;将目标代码文件传输至用户终端,以使用户终端在目标应用程序运行目标代码文件的过程中,获取目标配置参数完成目标应用程序的应用程序编程接口API调用以实现小程序的功能,目标配置参数包括与目标应用程序的当前API版本匹配的配置参数。
第二方面,本申请实施例提供一种小程序跨应用迁移方法,应用于用户终端,用户终端安装有目标应用程序,该方法包括:获取小程序在目标应用程序的目标代码文件,目标代码文件由编译设备基于目标抽象语法树生成,目标抽象语法树由编译设备根据原抽象语法树和目标应用程序的目标转换规则转换得到的,原抽象语法树由编译设备解析原应用程序的小程序的原代码文件生成得到;在目标应用程序运行目标代码文件的过程中,获取目标配置参数,目标配置参数包括与目标应用程序的当前应用程序编程接口API版本匹配的配置参数;利用目标配置参数完成目标应用程序的API调用,以实现小程序的功能。
第三方面,本申请实施例提供一种编译设备,包括:解析模块,用于解析原应用程序的小程序的原代码文件,生成原抽象语法树,原抽象语法树为与原应用程序对应的原代码文件的抽象语法树;转换模块,用于根据原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树,目标抽象语法树为与目标应用程序对应的原代码文件的抽象语法树;文件生成模块,用于基于目标抽象语法树,生成小程序在目标应用程序的目标代码文件;通信模块,用于将目标代码文件传输至用户终端,以使用户终端在目标应用程序运行目标代码文件的过程中,获取目标配置参数完成目标应用程序的应用程序编程接口API调用以实现小程序的功能,目标配置参数包括与目标应用程序的当前API版本匹配的配置参数。
第四方面,本申请实施例提供一种用户终端,用户终端安装有目标应用程序,用户终端包括:第一获取模块,用于获取小程序在目标应用程序的目标代码文件,目标代码文件由编译设备基于目标抽象语法树生成,目标抽象语法树由编译设备根据原抽象语法树和目标应用程序的目标转换规则转换得到的,原抽象语法树由编译设备解析原应用程序的小程序的原代码文件生成得到;第二获取模块,在目标应用程序运行目标代码文件的过程中,获取目标配置参数,目标配置参数包括与目标应用程序的当前应用程序编程接口API版本匹配的配置参数;调用模块,用于利用目标配置参数完成目标应用程序的API调用,以实现小程序的功能。
第五方面,本申请实施例提供一种编译设备,包括:处理器以及存储有计算机程序指令的存储器;处理器执行计算机程序指令时实现第一方面的小程序跨应用迁移方法。
第六方面,本申请实施例提供一种用户终端,包括:处理器以及存储有计算机程序指令的存储器;处理器执行计算机程序指令时实现第二方面的小程序跨应用迁移方法。
第七方面,本申请实施例提供一种小程序跨应用迁移系统,包括第五方面的编译设备和第六方面的用户终端。
第八方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器执行时实现第一方面的小程序跨应用迁移方法或第二方面的小程序跨应用迁移方法。
本申请实施例提供一种小程序跨应用迁移方法、设备、终端、系统及存储介质,编译设备通过抽象语法树技术对原应用程序的小程序的原代码文件进行分析,得到原抽象语法树。利用与目标应用程序对应的目标转换规则,将原抽象语法树转换为符合目标应用程序框架的目标抽象语法树,再根据目标抽象语法树生成符合目标应用程序框架的小程序在目标应用程序的目标代码文件。编译设备可将目标代码文件传输至用户终端。编译设备编译得到的目标代码文件符合目标应用程序的框架,小程序可从原应用程序迁移至目标应用程序,可在用户终端的目标应用程序正常运行,且在运行过程中获取与目标应用程序的当前API版本匹配的配置参数完成对目标应用程序的API调用来实现小程序的功能,小程序可与不同API版本的功能适配,从而提高了小程序在不同应用程序的兼容性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的小程序跨应用迁移方法的应用场景的一示例的示意图;
图2为本申请实施例提供的小程序跨应用迁移方法的应用场景的另一示例的示意图;
图3为本申请实施例提供的小程序跨应用迁移方法的应用场景的又一示例的示意图;
图4为本申请第一方面提供的小程序跨应用迁移方法的一实施例的流程图;
图5为本申请实施例提供的与JS文件对应的目标抽象语法树的一示例的示意图;
图6为本申请实施例提供的与页面模版文件对应的目标抽象语法树的一示例的示意图;
图7为本申请第一方面提供的小程序跨应用迁移方法的另一实施例的流程图;
图8为本申请第一方面提供的小程序跨应用迁移方法的又一实施例的流程图;
图9为本申请实施例提供的目标抽象语法树的局部的注释的一示例的示意图;
图10为本申请第二方面提供的小程序跨应用迁移方法的一实施例的流程图;
图11为本申请第二方面提供的小程序跨应用迁移方法的另一实施例的流程图;
图12为本申请实施例提供的API配置参数列表的生成过程的一示例的示意图;
图13为本申请实施例提供的小程序跨应用迁移过程的一示例的示意图;
图14为本申请第三方面提供的编译设备的一实施例的结构示意图;
图15为本申请第三方面提供的编译设备的另一实施例的结构示意图;
图16为本申请第四方面提供的用户终端的一实施例的结构示意图;
图17为本申请第四方面提供的用户终端的另一实施例的结构示意图;
图18为本申请第五方面提供的编译设备的一实施例的结构示意图;
图19为本申请第六方面提供的用户终端的一实施例的结构示意图。
具体实施方式
下面将详细描述本申请的各个方面的特征和示例性实施例,为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本申请进行进一步详细描述。应理解,此处所描述的具体实施例仅意在解释本申请,而不是限定本申请。对于本领域技术人员来说,本申请可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本申请的示例来提供对本申请更好的理解。
随着信息技术的发展和用户的需求,小程序应运而生。小程序是一种不需要下载安装即可使用的应用,依附在宿主应用程序。随着小程序技术的快速发展,各个应用程序平台都推出了自己的小程序框架规范。为了提高小程序的灵活应用,希望小程序能够在不同应用迁移。也就是说,希望依附某一应用程序运行的小程序,可迁移至另一应用程序。但由于小程序架构包括自定义领域特定语言(Domain-specific language,DSL)标准和通用语言标准两类标准,两类标准规范的法结构、解析编译处理、数据更新渲染等底层机制完全不同,且应用程序平台众多,且不同应用程序平台的应用程序的小程序规范也有所不同,导致同一个小程序与除该小程序对应的原应用程序之外的应用程序的兼容性较差,甚至在一些应用程序中无法直接运行。
本申请实施例提供一种小程序跨应用迁移方法、设备、终端、系统及存储介质,能够根据原应用程序的小程序的代码文件,生成抽象语法树(Abstract Syntax Tree,AST),并利用目标应用程序的转换规则,将上面生成的抽象语法树转换为与目标应用程序对应的原代码文件的抽象语法树,根据与目标应用程序对应的原代码文件的抽象语法树,得到小程序在目标应用程序的代码文件。小程序在目标应用程序的代码文件被运行的过程中,调用目标应用程序的应用程序编程接口(Application Programming Interface,API)当前版本匹配的配置参数的值以实现小程序的功能,使得小程序可从原应用程序迁移至目标应用程序,并能在目标应用程序正常运行,提高了小程序在不同应用程序的兼容性。
本申请实施例提供的小程序跨应用迁移方法可涉及编译设备和用户终端。在一些示例中,编译设备可与用户终端直接进行通信交互。在另一些示例中,编译设备与用户终端之间还可设置其他设备,即编译设备并不与用户终端直接进行通信交互。在此并不限定编译设备与用户终端之间设置的其他设备的数量和种类。
图1为本申请实施例提供的小程序跨应用迁移方法的应用场景的一示例的示意图。如图1所示,编译设备11可与用户终端12直接进行通信交互。
编译设备11用于编译代码文件,即编译设备11可编译生成提供给用户终端12的能够在目标应用程序运行的小程序的代码文件。编译设备11可包括服务器,也可包括终端设备,在此并不限定编译设备11的种类。
用户终端12安装有目标应用程序。用户终端12可在目标应用程序运行与目标应用程序对应的该小程序的代码文件。用户终端12也可安装原应用程序,在此并不限定。在用户终端12安装有目标应用程序和原应用程序的情况下,可在原应用程序运行与原应用程序对应的该小程序的代码文件,可在目标应用程序运行与目标应用程序对应的该小程序的代码文件。用户终端12可包括手机、计算机、平板电脑等终端设备,在此并不限定。
图2为本申请实施例提供的小程序跨应用迁移方法的应用场景的另一示例的示意图。图1与图2的不同之处在于,编译设备11与设备13进行通信交互,设备13与用户终端12进行通信交互。具体地,编译设备11可将生成的小程序在目标应用程序的代码文件上传至设备13,设备13将该代码文件下发给用户终端12。设备13可包括服务器等设备,在此并不限定。
在又一些示例中,该小程序跨应用迁移方法还可涉及目标应用程序的后台服务器。图3为本申请实施例提供的小程序跨应用迁移方法的应用场景的又一示例的示意图。图3与图1的不同之处在于,图3还可包括配置平台14。配置平台14可为用户终端12提供目标应用程序的各API版本对应的配置参数的值,以供用户终端12在目标应用程序运行小程序的过程中调用。
下面依次对小程序跨应用迁移方法、编译设备、用户终端、系统及存储介质进行介绍。
本申请第一方面提供一种小程序跨应用迁移方法,可用于编译设备,即该小程序跨应用迁移方法可由编译设备执行。图4为本申请第一方面提供的小程序跨应用迁移方法的一实施例的流程图。如图4所示,该小程序跨应用迁移方法可包括步骤S201至步骤S204。
在步骤S201中,解析原应用程序的小程序的原代码文件,生成原抽象语法树。
原应用程序为小程序迁移前所依附的应用程序。原代码文件是小程序能够在原应用程序运行的代码文件。原抽象语法树为与原应用程序对应的原代码文件的抽象语法树。
通过对原代码文件进行解析可生成与原代码文件对应的抽象语法树即原抽象语法树。原抽象语法树包括多个节点,节点可包括原代码文件中的变量、函数、事件、数据状态等。原代码文件中的逻辑细节可采用原抽象语法树中的分支以及分支中的节点表示。在抽象语法树中,某节点的子节点也是该抽象语法树中的节点。某节点的子节点可表征该节点的内容,也可为表征该节点的属性的子节点。变量可实现小程序中的一些动态内容,事件可用于响应用户操作,在此并不限定。
根据功能的不同,原代码文件可包括不同的文件。对应地,根据原代码文件中的各文件,可得到与各文件分别对应的抽象语法树。
在一些示例中,原代码文件可包括脚本文件、页面模版文件和样式文件。对应地,原抽象语法树可包括与脚本文件对应的第一原抽象语法树、与页面模版文件对应的第二原抽象语法树和与样式文件对应的第三原抽象语法树。
脚本文件具体可为Java脚本文件即JS文件,也可为其他前端语言的脚本文件,在此并不限定。解析原应用程序的小程序的脚本文件,得到与该脚本文件对应的抽象语法树即第一原抽象语法树。
页面模版文件为可应用于特定页面或页面组的特定类型的模板文件。小程序的页面模版文件可保证小程序的网页页面。解析原应用程序的小程序的页面模版文件,得到与该页面模版文件对应的抽象语法树即第二原抽象语法树。在一些示例中,可解析原代码文件中的页面模版文件,生成页面模版文件对应的文档对象模型(Document Object Model,DOM)树。抽取文档对象模型树中的程序逻辑,如if判断、for循环等,根据程序逻辑,将文档对象模型树转换为页面模版文件对应的抽象语法树即第二原抽象语法树。文档对象模型树具体可包括可扩展标记语言文档对象模型(Extensible Markup Language DocumentObject Model,XML DOM)树,在此并不限定。
样式文件可包括小程序的网页中元素的定义信息,例如标题和正文的默认字体、大小、颜色、前页外观、文字排列间隔等相关信息,在此并不限定。解析原应用程序的小程序的样式文件,得到与该样式文件对应的抽象语法树即第三原抽象语法树。
在步骤S202中,根据原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树。
目标应用程序的目标转换规则为通用的将小程序符合原应用程序框架的抽象语法树转换为小程序符合目标应用程序框架的抽象语法树的转换规则。目标转换规则可预先编写设定。不同目标应用程序对应的目标转换规则不同。目标抽象语法树为与目标应用程序对应的原代码文件的抽象语法树,即符合目标应用程序框架的抽象语法树。
在一些示例中,原代码文件可包括脚本文件、页面模版文件和样式文件。原抽象语法树可包括与脚本文件对应的第一原抽象语法树、与页面模版文件对应的第二原抽象语法树和与样式文件对应的第三原抽象语法树。对应地,目标抽象语法树可包括与脚本文件对应的第一目标抽象语法树、与页面模版文件对应的第二目标抽象语法树和与样式文件对应的第三目标抽象语法树。具体地,按照目标转换规则,可第一原抽象语法树转换为第一目标抽象语法树。按照目标转换规则,可第二原抽象语法树转换为第二目标抽象语法树。按照目标转换规则,可第三原抽象语法树转换为第三目标抽象语法树。在一些示例中,可解析原应用程序的小程序的样式文件,先得到中间阶段的抽象语法树,中间阶段的抽象语法树即为第三原抽象语法树,再将中间阶段的抽象语法树转换为第三目标抽象语法树。第三目标抽象语法树具体可包括叠层样式表抽象语法树(Cascading Style Sheets Abstract SyntaxTree,CSS AST),在此并不限定。
例如,图5为本申请实施例提供的与JS文件对应的目标抽象语法树的一示例的示意图。如图5所示,与JS文件对应的目标抽象语法树JS AST包括数据状态、生命周期函数、时间函数等节点。数据状态节点所在的分支还包括三个节点,均为数据状态的节点,分别表征变量a、变量b和变量c,在图5中分别以this.state.a、this.state.b和this.state.c表示。生命周期函数节点所在分支还包括四个节点,均为生命周期函数的节点,分别表征onInit函数、onShow函数、onUpdate函数和onHide函数,在图5中分别以onInit、onShow、onUpdate和onHide表示。事件函数节点所在的分支还包括一个节点,为事件函数的节点,表征dom_func_e函数,图5中该事件函数为点击事件函数,表征点击事件,在图5中以dom_func_e(this.on_btn_e_click)表示。
例如,图6为本申请实施例提供的与页面模版文件对应的目标抽象语法树的一示例的示意图。如图6所示,与页面模版文件对应的目标抽象语法树即页面模版AST包括多个节点。其中,节点Element1所在的分支还包括变量的节点,该节点表征变量a,在图6中以变量a表示。节点Element2所在的分支还包括节点Element4,节点Element4下方的两个分支各包括一个节点,一个节点为文档对象模型事件的节点,另一个节点为变量的节点,文档对象模型事件的节点表征事件e,在图6中以事件e表示;变量的节点表征变量c,在图6中以变量c表示。节点Element3所在的分支还包括变量的节点,该变量的节点表征变量b,在图6中以变量b表示。
在步骤S203中,基于目标抽象语法树,生成小程序在目标应用程序的目标代码文件。
在得到目标抽象语法树后,可将目标抽象语法树转换为代码文件,转换得到的代码文件即为目标代码文件。目标代码文件为小程序在目标应用程序的代码文件。
在一些示例中,原代码文件包括脚本文件、页面模版文件和样式文件。目标抽象语法树包括与脚本文件对应的第一目标抽象语法树、与页面模版文件对应的第二目标抽象语法树和与样式文件对应的第三目标抽象语法树。可对第一目标抽象语法树和第二目标抽象语法树进行逻辑整合,得到目标程序代码文件。根据第三目标抽象语法树,生成目标样式文件。目标程序代码文件即为小程序与目标应用程序对应的程序代码文件,目标样式文件即为小程序与目标应用程序对应的样式文件。目标程序代码文件和目标样式文件可组合得到小程序在目标应用程序的目标代码文件。
在步骤S204中,将目标代码文件传输至用户终端,以使用户终端在目标应用程序运行目标代码文件的过程中,获取目标配置参数完成目标应用程序的API调用以实现小程序的功能。
在一些示例中,编译设备可在用户终端请求在目标应用程序运行小程序的情况下,直接将目标代码文件发送给用户终端,以使用户终端能够在目标应用程序运行该目标代码文件。
在另一些示例中,编译设备可将该目标代码文件先发送至另一中间设备,再由中间设备在用户终端请求在目标应用程序运行小程序的情况下,将目标代码文件发送给用户终端,实现目标代码文件由编译设备传输至用户终端的过程,以使用户终端能够在目标应用程序运行该目标代码文件。
目标配置参数包括与目标应用程序的应用程序编程接口当前API版本匹配的配置参数。用户终端在目标应用程序运行该目标代码文件的过程中,需要获取与目标应用程序的当前API版本匹配的配置参数,不需要针对不同的API版本再对目标代码文件进行修改,就可实现小程序与不同API版本的功能适配。
在本申请实施例中,编译设备通过抽象语法树技术对原应用程序的小程序的原代码文件进行分析,得到原抽象语法树。利用与目标应用程序对应的目标转换规则,将原抽象语法树转换为符合目标应用程序框架的目标抽象语法树,再根据目标抽象语法树生成符合目标应用程序框架的小程序在目标应用程序的目标代码文件。编译设备可将目标代码文件传输至用户终端。编译设备编译得到的目标代码文件符合目标应用程序的框架,小程序可从原应用程序迁移至目标应用程序,可在用户终端的目标应用程序正常运行,且在运行过程中获取与目标应用程序的当前API版本匹配的配置参数完成对目标应用程序的API调用来实现小程序的功能,小程序可与不同API版本的功能适配,从而提高了小程序在不同应用程序的兼容性。
而且,本申请实施例中,编译设备可根据原应用程序的小程序的原代码文件,自动生成符合目标应用程序的框架的目标代码文件,也避免了人工改写程序不同开发人员水平不同所带来的小程序在目标应用程序运行的性能与稳定性的参差不齐,能够保证小程序在目标应用程序运行的性能与稳定性的一致,并提高开发效率。
下面介绍上述实施例中基于目标抽象语法树生成小程序在目标应用程序的目标代码文件的具体内容。在本实施例中,原代码文件包括脚本文件、页面模版文件和样式文件;目标抽象语法树包括与脚本文件对应的第一目标抽象语法树、与页面模版文件对应的第二目标抽象语法树和与样式文件对应的第三目标抽象语法树。图7为本申请第一方面提供的小程序跨应用迁移方法的另一实施例的流程图。图7与图4的不同之处在于,图4中的步骤S203可具体细化为图7中的步骤S2031至步骤S2034。
在步骤S2031中,绑定表征同一对象的第一目标抽象语法树中的节点与第二目标抽象语法树的节点。
绑定的第一目标抽象语法树中的节点与第二目标抽象语法树的节点表征的对象是同一对象。绑定的第一目标抽象语法树中的节点与第二目标抽象语法树的节点具有绑定关系。
在一些示例中,第一目标抽象语法树中的节点可包括数据状态和事件函数,第二目标抽象语法树中的节点可包括变量和文档对象模式事件。具体可绑定表征同一对象的第一目标抽象语法树中数据状态和第二目标抽象语法树中变量,还可绑定表征同一对象的第一目标抽象语法树中事件函数和第二目标抽象语法树中文档对象模型事件。
例如,如图5和图6所示,图5中的数据状态的节点变量a和图6中的变量的节点变量a表征的对象均是变量a,可将图5中数据状态的节点变量a与图6中变量的节点变量a绑定;图5中的数据状态的节点变量b和图6中的变量的节点变量b表征的对象均是变量b,可将图5中数据状态的节点变量b与图6中变量的节点变量b绑定;图5中的数据状态的节点变量c和图6中的变量的节点变量c表征的对象均是变量c,可将图5中数据状态的节点变量c与图6中变量的节点变量c绑定;图5中事件函数的节点dom_func_e(this.on_btn_e_click)表征的是点击事件,图6中文档对象模型事件的节点事件e表征的是点击事件,可将图5中的事件函数的节点dom_func_e(this.on_btn_e_click)与图6中文档对象模型事件的节点事件e绑定。
在步骤S2032中,根据节点的绑定关系、第一目标抽象语法树中的函数和第二目标抽象语法树,得到目标程序代码文件。
根据节点的绑定关系,可确定第一目标抽象语法树与第二目标抽象语法树中表征同一对象的节点,从而可根据节点的绑定关系、第一目标抽象语法树中的函数和第二目标抽象语法树,实现第一目标抽象语法树与第二目标抽象语法树的逻辑整合,以得到目标程序代码文件。
具体地,可将第二目标抽象语法树中变量替换为绑定的数据状态,第二目标抽象语法树中文档对象模型事件替换为绑定的事件函数,得到更新后的第二目标抽象语法树;封装更新后的第二目标抽象语法树,得到渲染函数;封装第一目标抽象语法树中的函数,得到待调用函数;基于绑定的数据状态和变量、绑定的事件函数和文档对象模型事件、渲染函数以及待调用函数,得到目标程序代码文件。
为了便于理解,以第一目标抽象语法树为图5所示的抽象语法树、第二目标抽象语法树为图6所示的抽象语法树为例进行说明。可将第二目标抽象语法树中的变量替换为第一目标抽象语法树中的数据状态统一管理,可采用下方程序语言实现:
变量a=>this.state.a
变量b=>this.state.b
变量c=>this.state.c
再将第一目标抽象语法树中对变量的赋值调整为this.setState()的方式,可采用下方程序语言实现:
a=1=>this.setState({a:1})
b=2=>this.setState({b:2})
c=“hello world”=>this.setState({c:“hello world”})
通过this.setState()的方式来统一管理状态变量,小程序运行过程中会在调用生命周期函数中的onUpdate函数时进行优化渲染。
可将第二目标抽象语法树中的文档对象模型事件替换为第一目标抽象语法树中的点击事件函数,可采用下方程序语言实现:
onClick=”on_btn_e_click”=>onClick={this.on_btn_e_click}
将更新后的第二目标抽象语法树封装作为渲染函数。渲染函数可用于小程序的页面渲染。
在一些示例中,第一目标抽象语法树中的函数可包括业务函数和生命周期函数,但并不限于此。对应地,待调用函数包括封装业务函数得到的第一调用函数和封装生命周期函数得到的第二调用函数,但也并不限于此。在一些示例中,业务函数封装得到的第二调用函数可以以业务逻辑层的形式存在,即将业务函数封装为业务逻辑层。待调用函数可在小程序在目标应用程序运行的过程中被调用。根据绑定的数据状态和变量,可将变量以数据状态的形式管理。根据绑定的事件函数和文档对象模式事件,可将文档对象模式事件以事件函数的形式管理。目标程序代码文件可包括以数据状态的形式管理的变量和数据状态、以事件函数的形式管理的事件函数和文档对象模式事件、渲染函数和待调用函数。
在步骤S2033中,基于第三目标抽象语法树,得到目标样式文件。
目标样式文件为小程序与目标应用程序对应的样式文件。
在步骤S2034中,基于目标程序代码文件和目标样式文件,得到目标代码文件。
目标代码文件包括目标程序代码文件和目标样式文件。即目标程序代码文件和目标样式文件可组合得到小程序在目标应用程序的目标代码文件。
在一些实施例中,开发人员可能会在目标代码文件基础上进行调整,以实现自定义的个性化的二次开发。为了便于开发人员的个性化二次开发,编译设备自动生成的目标代码文件可包括注释,以提示指引开发人员,提高二次开发的效率。图8为本申请第一方面提供的小程序跨应用迁移方法的又一实施例的流程图。图8与图4的不同之处在于,图4中的步骤S202可具体细化为图8中的步骤S2021和步骤S2022。
在步骤S2021中,利用所述目标转换规则,将所述原抽象语法树转换为符合所述目标应用程序的框架的抽象语法树。
目标应用程序的框架与原应用程序的框架不同,对应地,目标应用程序对应的抽象语法树的形式与原应用程序对应的抽象语法树即原抽象语法树的形式不同。利用目标转换规则,可对原抽象语法树进行调整,以得到内容与原抽象语法树相同,但形式与目标应用程序对应的抽象语法树的形式相同的抽象语法树。
在步骤S2022中,在符合所述目标应用程序的抽象语法树中所述目标转换规则指示的位置插入注释,得到所述目标抽象语法树。
注释包括所述注释所在分支的功能开发指引说明。目标转换规则是针对目标应用程序的框架设定的,目标转换规则中记录有符合目标应用程序的框架的抽象语法树中表征各功能的分支、节点的位置。根据目标转换规则记录的符合目标应用程序的框架的抽象语法树中表征各功能的位置,可对应插入包括功能开发指引说明的注释。目标抽象语法树包括插入的注释。
例如,图9为本申请实施例提供的目标抽象语法树的局部的注释的一示例的示意图。如图9所示,在目标抽象语法树的生命周期函数节点所在的分支上,可在节点语句1之前插入注释1。
根据目标抽象语法树生成的目标代码文件中的功能部分对应具有上述注释。开发人员可在目标代码文件中的注释的指引下遵循目标应用程序的最佳实践进行二次开发,尽量减小不同开发人员的开发差异,提高二次开发的效率。
本申请第二方面还提供一种小程序跨应用迁移方法,可应用于用户终端,即该小程序跨应用迁移方法可由用户终端执行。图10为本申请第二方面提供的小程序跨应用迁移方法的一实施例的流程图。如图10所示,该小程序跨应用迁移方法可包括步骤S301至步骤S303。
在步骤S301中,获取小程序在目标应用程序的目标代码文件。
目标代码文件由编译设备基于目标抽象语法树生成。目标抽象语法树由编译设备根据原抽象语法树和目标应用程序的目标转换规则转换得到的。原抽象语法树由编译设备解析原应用程序的小程序的原代码文件生成得到。
上述目标应用程序、目标代码文件等的具体内容可参见上述实施例中的相关说明,在此不再赘述。
在步骤S302中,在目标应用程序运行目标代码文件的过程中,获取目标配置参数。
在步骤S303中,利用目标配置参数完成目标应用程序的API调用,以实现小程序的功能。
目标配置参数包括与目标应用程序的当前API版本匹配的配置参数。原应用程序的API与目标应用程序的API的版本可能相同,也可能不同。目标代码文件在目标应用程序运行,需要调用目标应用程序的当前API版本下的API。可将与目标应用程序的当前API版本匹配的配置参数即目标配置参数传输给用户终端的本地层即native层执行功能代用。利用与目标应用程序的当前API版本匹配的配置参数,能够在不修改小程序的目标代码文件的基础上适配目标应用程序当前API版本的API的插件接口功能。
在本申请实施例中,用户终端可获取编译设备编译得到的目标代码文件。目标代码文件是编译设备通过抽象语法树技术和目标应用程序对应的目标转换规则编译得到的。目标代码文件符合目标应用程序的框架,能够在用户终端的目标应用程序正常运行,小程序可从原应用程序迁移至目标应用程序。在目标代码文件在用户终端的目标应用程序运行的过程中,用户终端获取并利用与目标应用程序的当前API版本匹配的配置参数完成目标应用程序的API调用,实现小程序的功能,能够在不修改小程序的目标代码文件的基础上适配目标应用程序当前API版本的API的插件接口功能,提高小程序在不同应用程序的兼容性。
在一些实施例中,可通过对比原应用程序的API版本与目标应用程序的当前API版本,来确定目标配置参数。图11为本申请第二方面提供的小程序跨应用迁移方法的另一实施例的流程图。图11与图10的不同之处在于,图10中的步骤S302可具体细化为图11中的步骤S3021或步骤S3022。
在步骤S3021中,在原应用程序的API版本与目标应用程序的当前API版本一致的情况下,获取原应用程序的API版本对应的配置参数作为目标配置参数。
原应用程序的API版本与目标应用程序的当前API版本一致,表示原应用程序的API与目标应用程序的API的插件接口功能一致,即原应用程序的API版本对应的配置参数与目标应用程序的当前API版本对应的配置参数一致,原应用程序的API版本对应的配置参数在用户终端本地可获取到。
在步骤S3022中,在原应用程序的API版本与目标应用程序的当前API版本不一致的情况下,获取原应用程序的API版本对应的配置参数,以及从预先加载的API配置参数列表中获取新增配置参数作为目标配置参数。
新增配置参数为目标应用程序的当前API版本对应的配置参数中除原应用程序的API版本对应的配置参数以外的配置参数。API配置参数列表包括目标应用程序的各API版本对应的配置参数。
原应用程序的API版本与目标应用程序的当前API版本不一致,表示原应用程序的API与目标应用程序的API的插件接口功能不一致,即原应用程序的API版本对应的配置参数与目标应用程序的当前API版本对应的配置参数不一致,原应用程序的API版本对应的配置参数在用户终端本地不能全部获取到。API配置参数列表可弥补用户终端本地数据的不足,可从API配置参数列表中获取与目标应用程序的当前API版本对应的配置参数。新增配置参数与原应用程序的API版本对应的配置参数组合即可满足目标应用程序的当前API版本的需求,从而能够在不修改小程序的目标代码文件的基础上适配目标应用程序当前API版本的API的插件接口功能,提高小程序在不同应用程序的兼容性。
例如,小程序在原应用程序调用获取地理定位的API的函数为get_location(),目标应用程序的API版本经过迭代后,目标应用程序的当前API版本增加了一个是否缓存当前地理定位信息供下次使用的配置参数,小程序在目标应用程序调用获取地理定位的API的函数变成了get_location(isCache),导致API的函数不一致。在本申请实施例中,可不修改目标程序代码文件中的代码,预先在用户终端加载API配置参数列表,API配置参数列表中包括各API版本对应的配置参数,当然也包括当前API版本对应的配置参数[isCache=True]。用户终端可获取到该配置参数[isCache=True],即可调用原应用程序的API的get_location()函数获取配置参数[isCache=True],以实现对目标应用程序的API的调用。
在一些示例中,上述实施例中,API配置参数列表根据原应用程序的API版本对应的配置参数和目标应用程序的各API版本对应的配置参数经去重、合并得到。API配置参数列表可由配置平台处理得到,在此并不限定。
具体地,配置平台可从小程序的目标代码文件或小程序的原代码文件可获取小程序在原应用程序的API版本对应的配置参数。配置平台可先将目标应用程序的各API版本对应的配置参数进行去重合并,得到第一配置参数集合。将小程序在原应用程序的API版本对应的配置参数于第一配置参数集合进行合并,得到上述实施例中的API配置参数列表。
例如,图12为本申请实施例提供的API配置参数列表的生成过程的一示例的示意图。如图12所示,原应用程序为应用程序A,目标应用程序为应用程序B,应用程序B的的API具有N个版本,分别为API 1至API N。应用程序A的API版本对应的配置参数包括a’和b’;应用程序B的API 1版本对应的配置参数包括a;应用程序B的API 2版本对应的配置参数包括a和b;……,应用程序B的API N版本对应的配置参数包括a、b、c、……、n;其中,配置参数a’与配置参数a相同,配置参数b’与配置参数b相同。应用程序B的各API版本的配置参数去重合并后,得到的第一配置参数集合包括a、b、c、……、n。应用程序A的API版本对应的配置参数与第一配置参数集合合并后,得到的API配置参数列表包括a’、b’、c、……、n。
通过去重、合并处理得到的API配置参数列表能够减少无用的冗余数据,减少API配置参数列表占用的资源,避免API配置参数列表占用大量资源以影响用户终端的性能。
在一些示例中,在步骤S302在之前,用户终端可在小程序在目标应用程序中初始化时,加载配置平台下发的API配置参数列表。在小程序第二次、第三次等后续次数的运行中,不需要反复向加载配置平台请求该API配置参数列表。
在本申请实施例中,编译设备和用户终端可设置各类引擎以实现小程序跨应用迁移方法。图13为本申请实施例提供的小程序跨应用迁移过程的一示例的示意图。如图13所示,原应用程序为应用程序A,目标应用程序为应用程序B;编译设备设置有Java脚本文件抽象语法树转换引擎(简称为JS AST转换引擎)、页面模版文件转换引擎(简称模版转换引擎)、样式文件转换引擎(简称样式转换引擎)和逻辑整合引擎;用户终端设置有API动态适配引擎。
小程序的原代码文件包括JS文件、页面模版文件和样式文件,JS文件输入JS AST转换引擎,页面模版文件输入模版转换引擎,样式文件输入样式转换引擎。JS AST转换引擎和模版转换引擎的输出通入逻辑整合引擎的输入。逻辑整合引擎输出目标程序代码文件,样式转换引擎输出目标样式文件。目标程序代码文件和目标样式文件组成目标代码文件。目标代码文件可传输至API动态适配引擎,由API动态适配引擎在运行目标代码文件的过程中获取与目标应用程序的当前API版本匹配的配置参数利用目标配置参数完成目标应用程序的API调用,以实现小程序的功能。
本申请第三方面可提供一种编译设备。图14为本申请第三方面提供的编译设备的一实施例的结构示意图。如图14所示,该编译设备400可包括解析模块401、转换模块402、文件生成模块403和通信模块404。
解析模块401可用于解析原应用程序的小程序的原代码文件,生成原抽象语法树。
原抽象语法树为与原应用程序对应的原代码文件的抽象语法树。
转换模块402可用于根据原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树。
目标抽象语法树为与目标应用程序对应的原代码文件的抽象语法树。
文件生成模块403可用于基于目标抽象语法树,生成小程序在目标应用程序的目标代码文件。
通信模块404用于将目标代码文件传输至用户终端,以使用户终端在目标应用程序运行目标代码文件的过程中,获取目标配置参数完成目标应用程序的应用程序编程接口API调用以实现小程序的功能。
目标配置参数包括与目标应用程序的当前API版本匹配的配置参数。
在一些示例中,原代码文件包括脚本文件、页面模版文件和样式文件。
原抽象语法树包括与脚本文件对应的第一原抽象语法树、与页面模版文件对应的第二原抽象语法树和与样式文件对应的第三原抽象语法树。
目标抽象语法树包括与脚本文件对应的第一目标抽象语法树、与页面模版文件对应的第二目标抽象语法树和与样式文件对应的第三目标抽象语法树。
在本申请实施例中,编译设备通过抽象语法树技术对原应用程序的小程序的原代码文件进行分析,得到原抽象语法树。利用与目标应用程序对应的目标转换规则,将原抽象语法树转换为符合目标应用程序框架的目标抽象语法树,再根据目标抽象语法树生成符合目标应用程序框架的小程序在目标应用程序的目标代码文件。编译设备可将目标代码文件传输至用户终端。编译设备编译得到的目标代码文件符合目标应用程序的框架,小程序可从原应用程序迁移至目标应用程序,可在用户终端的目标应用程序正常运行,且在运行过程中获取与目标应用程序的当前API版本匹配的配置参数完成对目标应用程序的API调用来实现小程序的功能,小程序可与不同API版本的功能适配,从而提高了小程序在不同应用程序的兼容性。
而且,本申请实施例中,编译设备可根据原应用程序的小程序的原代码文件,自动生成符合目标应用程序的框架的目标代码文件,也避免了人工改写程序不同开发人员水平不同所带来的小程序在目标应用程序运行的性能与稳定性的参差不齐,能够保证小程序在目标应用程序运行的性能与稳定性的一致,并提高开发效率。
图15为本申请第三方面提供的编译设备的另一实施例的结构示意图。图15与图14的不同之处在于,图15所示的文件生成模块403可包括绑定单元4031和文件生成单元4032。
绑定单元4031可用于绑定表征同一对象的第一目标抽象语法树中的节点与第二目标抽象语法树的节点。
文件生成单元4032可用于:根据节点的绑定关系、第一目标抽象语法树中的函数和第二目标抽象语法树,得到目标程序代码文件;基于第三目标抽象语法树,得到目标样式文件;基于目标程序代码文件和目标样式文件,得到目标代码文件。
目标代码文件包括目标程序代码文件和目标样式文件。
在一些示例中,第一目标抽象语法树中的节点包括数据状态和事件函数。第二目标抽象语法树中的节点包括变量和文档对象模型事件。
绑定单元4031可用于:绑定表征同一对象的第一目标抽象语法树中数据状态和第二目标抽象语法树中变量;绑定表征同一对象的第一目标抽象语法树中事件函数和第二目标抽象语法树中文档对象模型事件。
文件生成单元4032可用于:将第二目标抽象语法树中变量替换为绑定的数据状态,第二目标抽象语法树中文档对象模型事件替换为绑定的事件函数,得到更新后的第二目标抽象语法树;封装更新后的第二目标抽象语法树,得到渲染函数;封装第一目标抽象语法树中的函数,得到待调用函数;基于绑定的数据状态和变量、绑定的事件函数和文档对象模型事件、渲染函数以及待调用函数,得到目标程序代码文件。
在一些示例中,第一目标抽象语法树中的函数包括业务函数和生命周期函数。待调用函数包括封装业务函数得到的第一调用函数和封装生命周期函数得到的第二调用函数。
在一些实施例中,原代码文件包括页面模版文件。
解析模块401可用于解析原代码文件中的页面模版文件,生成页面模版文件对应的文档对象模型树;抽取文档对象模型树的程序逻辑,根据程序逻辑,将文档对象模型树转换为页面模版文件对应的第二原抽象语法树。
在一些示例中,转换模块402可用于:利用目标转换规则,将原抽象语法树转换为符合目标应用程序的框架的抽象语法树;在符合目标应用程序的抽象语法树中目标转换规则指示的位置插入注释,得到目标抽象语法树,注释包括注释所在分支的功能开发指引说明。
本申请第四方面还提供一种用户终端,该用户终端安装有目标应用程序。图16为本申请第四方面提供的用户终端的一实施例的结构示意图。如图16所示,该用户终端500可包括第一获取模块501、第二获取模块502和调用模块503。
第一获取模块501可用于获取小程序在目标应用程序的目标代码文件。
目标代码文件由编译设备基于目标抽象语法树生成。目标抽象语法树由编译设备根据原抽象语法树和目标应用程序的目标转换规则转换得到的。原抽象语法树由编译设备解析原应用程序的小程序的原代码文件生成得到。
第二获取模块502可在目标应用程序运行目标代码文件的过程中,获取目标配置参数。
目标配置参数包括与目标应用程序的当前应用程序编程接口API版本匹配的配置参数。
调用模块503可用于利用目标配置参数完成目标应用程序的API调用,以实现小程序的功能。
在本申请实施例中,用户终端可获取编译设备编译得到的目标代码文件。目标代码文件是编译设备通过抽象语法树技术和目标应用程序对应的目标转换规则编译得到的。目标代码文件符合目标应用程序的框架,能够在用户终端的目标应用程序正常运行,小程序可从原应用程序迁移至目标应用程序。在目标代码文件在用户终端的目标应用程序运行的过程中,用户终端获取并利用与目标应用程序的当前API版本匹配的配置参数完成目标应用程序的API调用,实现小程序的功能,能够在不修改小程序的目标代码文件的基础上适配目标应用程序当前API版本的API的插件接口功能,提高小程序在不同应用程序的兼容性。
在一些实施例中,上述第二获取模块502可用于:在原应用程序的API版本与目标应用程序的当前API版本一致的情况下,获取原应用程序的API版本对应的配置参数作为目标配置参数;在原应用程序的API版本与目标应用程序的当前API版本不一致的情况下,获取原应用程序的API版本对应的配置参数,以及从预先加载的API配置参数列表中获取新增配置参数作为目标配置参数。
新增配置参数为目标应用程序的当前API版本对应的配置参数中除原应用程序的API版本对应的配置参数以外的配置参数。API配置参数列表包括目标应用程序的各API版本对应的配置参数。
在一些示例中,API配置参数列表根据原应用程序的API版本对应的配置参数和目标应用程序的各API版本对应的配置参数经去重、合并得到。
图17为本申请第四方面提供的用户终端的另一实施例的结构示意图。图17与图16的不同之处在于,图17所示的用户终端500还可包括加载模块504。
加载模块504可用于在小程序在目标应用程序中初始化时,加载配置平台下发的API配置参数列表。
本申请第五方面还提供了一种编译设备。图18为本申请第五方面提供的编译设备的一实施例的结构示意图。如图18所示,编译设备600包括存储器601、处理器602及存储在存储器601上并可在处理器602上运行的计算机程序。
在一个示例中,上述处理器602可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器601可包括只读存储器(Read-Only Memory,ROM),随机存取存储器(RandomAccess Memory,RAM),磁盘存储介质设备,光存储介质设备,闪存设备,电气、光学或其他物理/有形的存储器存储设备。因此,通常,存储器包括一个或多个编码有包括计算机可执行指令的软件的有形(非暂态)计算机可读存储介质(例如,存储器设备),并且当该软件被执行(例如,由一个或多个处理器)时,其可操作来执行参考根据本申请实施例中应用于编译设备的小程序跨应用迁移方法所描述的操作。
处理器602通过读取存储器601中存储的可执行程序代码来运行与可执行程序代码对应的计算机程序,以用于实现上述实施例中应用于编译设备的小程序跨应用迁移方法。
在一个示例中,编译设备600还可包括通信接口603和总线604。其中,如图18所示,存储器601、处理器602、通信接口603通过总线604连接并完成相互间的通信。
通信接口603,主要用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。也可通过通信接口603接入输入设备和/或输出设备。
总线604包括硬件、软件或两者,将编译设备600的部件彼此耦接在一起。举例来说而非限制,总线604可包括加速图形端口(Accelerated Graphics Port,AGP)或其他图形总线、增强工业标准架构(Enhanced Industry Standard Architecture,EISA)总线、前端总线(Front Side Bus,FSB)、超传输(Hyper Transport,HT)互连、工业标准架构(IndustrialStandard Architecture,ISA)总线、无限带宽互连、低引脚数(Low pin count,LPC)总线、存储器总线、微信道架构(Micro Channel Architecture,MCA)总线、外围组件互连(Peripheral Component Interconnect,PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial Advanced Technology Attachment,SATA)总线、视频电子标准协会局部(Video Electronics Standards Association Local Bus,VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线604可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
本申请第六方面还提供了一种用户终端。图19为本申请第六方面提供的用户终端的一实施例的结构示意图。如图19所示,用户终端700包括存储器701、处理器702及存储在存储器701上并可在处理器702上运行的计算机程序。
在一个示例中,上述处理器702可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器701可包括只读存储器(Read-Only Memory,ROM),随机存取存储器(RandomAccess Memory,RAM),磁盘存储介质设备,光存储介质设备,闪存设备,电气、光学或其他物理/有形的存储器存储设备。因此,通常,存储器包括一个或多个编码有包括计算机可执行指令的软件的有形(非暂态)计算机可读存储介质(例如,存储器设备),并且当该软件被执行(例如,由一个或多个处理器)时,其可操作来执行参考根据本申请实施例中应用于用户终端的小程序跨应用迁移方法所描述的操作。
处理器702通过读取存储器701中存储的可执行程序代码来运行与可执行程序代码对应的计算机程序,以用于实现上述实施例中应用于用户终端的小程序跨应用迁移方法。
在一个示例中,用户终端700还可包括通信接口703和总线704。其中,如图19所示,存储器701、处理器702、通信接口703通过总线704连接并完成相互间的通信。
通信接口703,主要用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。也可通过通信接口703接入输入设备和/或输出设备。
总线704包括硬件、软件或两者,将用户终端700的部件彼此耦接在一起。举例来说而非限制,总线704可包括加速图形端口(Accelerated Graphics Port,AGP)或其他图形总线、增强工业标准架构(Enhanced Industry Standard Architecture,EISA)总线、前端总线(Front Side Bus,FSB)、超传输(Hyper Transport,HT)互连、工业标准架构(IndustrialStandard Architecture,ISA)总线、无限带宽互连、低引脚数(Low pin count,LPC)总线、存储器总线、微信道架构(Micro Channel Architecture,MCA)总线、外围组件互连(Peripheral Component Interconnect,PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial Advanced Technology Attachment,SATA)总线、视频电子标准协会局部(Video Electronics Standards Association Local Bus,VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线704可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
本申请第七方面还提供一种小程序跨应用迁移系统。该小程序跨应用迁移系统可包括上述实施例中的编译设备和用户终端。编译设备和用户终端所执行的小程序跨应用迁移方法的具体内容以及有益效果可参见上述实施例中的相关描述,在此不再赘述。
本申请第八方面还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,该计算机程序指令被处理器执行时可实现上述实施例中应用于编译设备的小程序跨应用迁移方法或用于用户终端的小程序跨应用迁移方法,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,上述计算机可读存储介质可包括非暂态计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(RandomAccess Memory,简称RAM)、磁碟或者光盘等,在此并不限定。
需要明确的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。对于编译设备实施例、用户终端实施例、系统实施例、计算机可读存储介质实施例而言,相关之处可以参见方法实施例的说明部分。本申请并不局限于上文所描述并在图中示出的特定步骤和结构。本领域的技术人员可以在领会本申请的精神之后,作出各种改变、修改和添加,或者改变步骤之间的顺序。并且,为了简明起见,这里省略对已知方法技术的详细描述。
上面参考根据本申请的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本申请的各方面。应当理解,流程图和/或框图中的每个方框以及流程图和/或框图中各方框的组合可以由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、或其它可编程数据处理装置的处理器,以产生一种机器,使得经由计算机或其它可编程数据处理装置的处理器执行的这些指令使能对流程图和/或框图的一个或多个方框中指定的功能/动作的实现。这种处理器可以是但不限于是通用处理器、专用处理器、特殊应用处理器或者现场可编程逻辑电路。还可理解,框图和/或流程图中的每个方框以及框图和/或流程图中的方框的组合,也可以由执行指定的功能或动作的专用硬件来实现,或可由专用硬件和计算机指令的组合来实现。
本领域技术人员应能理解,上述实施例均是示例性而非限制性的。在不同实施例中出现的不同技术特征可以进行组合,以取得有益效果。本领域技术人员在研究附图、说明书及权利要求书的基础上,应能理解并实现所揭示的实施例的其他变化的实施例。在权利要求书中,术语“包括”并不排除其他装置或步骤;数量词“一个”不排除多个;术语“第一”、“第二”用于标示名称而非用于表示任何特定的顺序。权利要求中的任何附图标记均不应被理解为对保护范围的限制。权利要求中出现的多个部分的功能可以由一个单独的硬件或软件模块来实现。某些技术特征出现在不同的从属权利要求中并不意味着不能将这些技术特征进行组合以取得有益效果。
Claims (17)
1.一种小程序跨应用迁移方法,其特征在于,应用于编译设备,所述方法包括:
解析原应用程序的小程序的原代码文件,生成原抽象语法树,所述原抽象语法树为与所述原应用程序对应的所述原代码文件的抽象语法树;
根据所述原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树,所述目标抽象语法树为与所述目标应用程序对应的所述原代码文件的抽象语法树;
基于所述目标抽象语法树,生成所述小程序在所述目标应用程序的目标代码文件;
将所述目标代码文件传输至用户终端,以使所述用户终端在所述目标应用程序运行所述目标代码文件的过程中,获取目标配置参数完成所述目标应用程序的应用程序编程接口API调用以实现所述小程序的功能,所述目标配置参数包括与所述目标应用程序的当前API版本匹配的配置参数。
2.根据权利要求1所述的方法,其特征在于,
所述原代码文件包括脚本文件、页面模版文件和样式文件;
所述原抽象语法树包括与所述脚本文件对应的第一原抽象语法树、与所述页面模版文件对应的第二原抽象语法树和与所述样式文件对应的第三原抽象语法树;
所述目标抽象语法树包括与所述脚本文件对应的第一目标抽象语法树、与所述页面模版文件对应的第二目标抽象语法树和与所述样式文件对应的第三目标抽象语法树。
3.根据权利要求2所述的方法,其特征在于,所述基于所述目标抽象语法树,生成所述小程序在所述目标应用程序的目标代码文件,包括:
绑定表征同一对象的第一目标抽象语法树中的节点与所述第二目标抽象语法树的节点;
根据节点的绑定关系、所述第一目标抽象语法树中的函数和所述第二目标抽象语法树,得到目标程序代码文件;
基于第三目标抽象语法树,得到目标样式文件;
基于所述目标程序代码文件和所述目标样式文件,得到所述目标代码文件,所述目标代码文件包括所述目标程序代码文件和所述目标样式文件。
4.根据权利要求3所述的方法,其特征在于,所述第一目标抽象语法树中的节点包括数据状态和事件函数,所述第二目标抽象语法树中的节点包括变量和文档对象模型事件;
所述绑定表征同一对象的第一目标抽象语法树中的节点与所述第二目标抽象语法树的节点,包括:
绑定表征同一对象的所述第一目标抽象语法树中所述数据状态和所述第二目标抽象语法树中所述变量;
绑定表征同一对象的所述第一目标抽象语法树中所述事件函数和所述第二目标抽象语法树中所述文档对象模型事件;
所述根据节点的绑定关系、所述第一目标抽象语法树中的函数和所述第二目标抽象语法树,得到目标程序代码文件,包括:
将所述第二目标抽象语法树中所述变量替换为绑定的所述数据状态,所述第二目标抽象语法树中所述文档对象模型事件替换为绑定的所述事件函数,得到更新后的所述第二目标抽象语法树;
封装更新后的所述第二目标抽象语法树,得到渲染函数;
封装所述第一目标抽象语法树中的函数,得到待调用函数;
基于绑定的所述数据状态和所述变量、绑定的所述事件函数和所述文档对象模型事件、所述渲染函数以及所述待调用函数,得到所述目标程序代码文件。
5.根据权利要求4所述的方法,其特征在于,
所述第一目标抽象语法树中的函数包括业务函数和生命周期函数;
所述待调用函数包括封装所述业务函数得到的第一调用函数和封装所述生命周期函数得到的第二调用函数。
6.根据权利要求1所述的方法,其特征在于,所述原代码文件包括页面模版文件,
所述解析原应用程序的小程序的原代码文件,生成原抽象语法树,包括:
解析所述原代码文件中的所述页面模版文件,生成所述页面模版文件对应的文档对象模型树;
抽取所述文档对象模型树的程序逻辑,根据所述程序逻辑,将所述文档对象模型树转换为所述页面模版文件对应的第二原抽象语法树。
7.根据权利要求1所述的方法,其特征在于,所述根据所述原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树,包括:
利用所述目标转换规则,将所述原抽象语法树转换为符合所述目标应用程序的框架的抽象语法树;
在符合所述目标应用程序的抽象语法树中所述目标转换规则指示的位置插入注释,得到所述目标抽象语法树,所述注释包括所述注释所在分支的功能开发指引说明。
8.一种小程序跨应用迁移方法,其特征在于,应用于用户终端,所述用户终端安装有目标应用程序,所述方法包括:
获取小程序在所述目标应用程序的目标代码文件,所述目标代码文件由编译设备基于目标抽象语法树生成,所述目标抽象语法树由所述编译设备根据原抽象语法树和所述目标应用程序的目标转换规则转换得到的,所述原抽象语法树由所述编译设备解析原应用程序的所述小程序的原代码文件生成得到;
在所述目标应用程序运行所述目标代码文件的过程中,获取目标配置参数,所述目标配置参数包括与所述目标应用程序的当前应用程序编程接口API版本匹配的配置参数;
利用所述目标配置参数完成所述目标应用程序的API调用,以实现所述小程序的功能。
9.根据权利要求8所述的方法,其特征在于,所述获取目标配置参数的值,包括:
在所述原应用程序的API版本与所述目标应用程序的当前API版本一致的情况下,获取原应用程序的API版本对应的配置参数作为所述目标配置参数;
在所述原应用程序的API版本与所述目标应用程序的当前API版本不一致的情况下,获取所述原应用程序的API版本对应的配置参数,以及从预先加载的API配置参数列表中获取新增配置参数作为所述目标配置参数,所述新增配置参数为所述目标应用程序的当前API版本对应的配置参数中除所述原应用程序的API版本对应的配置参数以外的配置参数,所述API配置参数列表包括所述目标应用程序的各API版本对应的配置参数。
10.根据权利要求9所述的方法,其特征在于,所述API配置参数列表根据原应用程序的API版本对应的配置参数和所述目标应用程序的各API版本对应的配置参数经去重、合并得到。
11.根据权利要求9所述的方法,其特征在于,在所述获取目标配置参数之前,还包括:
在所述小程序在所述目标应用程序中初始化时,加载配置平台下发的所述API配置参数列表。
12.一种编译设备,其特征在于,包括:
解析模块,用于解析原应用程序的小程序的原代码文件,生成原抽象语法树,所述原抽象语法树为与所述原应用程序对应的所述原代码文件的抽象语法树;
转换模块,用于根据所述原抽象语法树和目标应用程序的目标转换规则,转换得到目标抽象语法树,所述目标抽象语法树为与所述目标应用程序对应的所述原代码文件的抽象语法树;
文件生成模块,用于基于所述目标抽象语法树,生成所述小程序在所述目标应用程序的目标代码文件;
通信模块,用于将所述目标代码文件传输至用户终端,以使所述用户终端在所述目标应用程序运行所述目标代码文件的过程中,获取目标配置参数完成所述目标应用程序的应用程序编程接口API调用以实现所述小程序的功能,所述目标配置参数包括与所述目标应用程序的当前API版本匹配的配置参数。
13.一种用户终端,其特征在于,所述用户终端安装有目标应用程序,所述用户终端包括:
第一获取模块,用于获取小程序在所述目标应用程序的目标代码文件,所述目标代码文件由编译设备基于目标抽象语法树生成,所述目标抽象语法树由所述编译设备根据原抽象语法树和所述目标应用程序的目标转换规则转换得到的,所述原抽象语法树由所述编译设备解析原应用程序的所述小程序的原代码文件生成得到;
第二获取模块,在所述目标应用程序运行所述目标代码文件的过程中,获取目标配置参数,所述目标配置参数包括与所述目标应用程序的当前应用程序编程接口API版本匹配的配置参数;
调用模块,用于利用所述目标配置参数完成所述目标应用程序的API调用,以实现所述小程序的功能。
14.一种编译设备,其特征在于,包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1至7中任意一项所述的小程序跨应用迁移方法。
15.一种用户终端,其特征在于,包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求8至11中任意一项所述的小程序跨应用迁移方法。
16.一种小程序跨应用迁移系统,其特征在于,包括如权利要求14所述的编译设备和如权利要求15所述的用户终端。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1至11中任意一项所述的小程序跨应用迁移方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111064530.9A CN113805890A (zh) | 2021-09-10 | 2021-09-10 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
PCT/CN2022/079174 WO2023035563A1 (zh) | 2021-09-10 | 2022-03-04 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111064530.9A CN113805890A (zh) | 2021-09-10 | 2021-09-10 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113805890A true CN113805890A (zh) | 2021-12-17 |
Family
ID=78895078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111064530.9A Pending CN113805890A (zh) | 2021-09-10 | 2021-09-10 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113805890A (zh) |
WO (1) | WO2023035563A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114185551A (zh) * | 2022-02-17 | 2022-03-15 | 浙江口碑网络技术有限公司 | 小程序的编译方法、小程序的运行方法及装置、存储介质 |
WO2023035563A1 (zh) * | 2021-09-10 | 2023-03-16 | 中国银联股份有限公司 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298537A (zh) * | 2011-06-10 | 2011-12-28 | 宇龙计算机通信科技(深圳)有限公司 | 应用程序的迁移方法及系统 |
CN103257878A (zh) * | 2013-05-16 | 2013-08-21 | 浪潮通信信息系统有限公司 | 一种基于云计算的应用程序的跨平台平滑迁移方法 |
CN109918073A (zh) * | 2019-01-29 | 2019-06-21 | 维沃移动通信有限公司 | 一种源码文件的生成方法、装置以及终端 |
CN111610978A (zh) * | 2020-05-19 | 2020-09-01 | 中国建设银行股份有限公司 | 一种小程序转换方法、装置、设备及存储介质 |
CN111736840A (zh) * | 2019-09-19 | 2020-10-02 | 北京沃东天骏信息技术有限公司 | 小程序应用的编译方法、运行方法、存储介质及电子设备 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273118A (zh) * | 2017-05-31 | 2017-10-20 | 湖南机友科技有限公司 | 一种应用程序多开的实现方法及装置 |
CN107423106B (zh) * | 2017-07-07 | 2021-04-23 | 北京小米移动软件有限公司 | 支持多框架语法的方法和装置 |
CN109947433A (zh) * | 2019-03-28 | 2019-06-28 | 优信拍(北京)信息科技有限公司 | 一种小程序的生成方法、更新方法及装置 |
CN110442344B (zh) * | 2019-08-14 | 2023-08-22 | 中国工商银行股份有限公司 | 用于跨平台转换应用的方法、装置、系统及介质 |
CN110457065B (zh) * | 2019-08-14 | 2023-11-07 | 中国工商银行股份有限公司 | 用于获得可兼容多版本系统的应用的方法及装置 |
CN110968325B (zh) * | 2019-10-28 | 2022-12-13 | 苏宁云计算有限公司 | 一种小程序转换方法及装置 |
CN112416328A (zh) * | 2020-12-11 | 2021-02-26 | 广州伊智信息科技有限公司 | 多平台小程序商城的构建方法、装置、设备及介质 |
CN113805890A (zh) * | 2021-09-10 | 2021-12-17 | 中国银联股份有限公司 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
-
2021
- 2021-09-10 CN CN202111064530.9A patent/CN113805890A/zh active Pending
-
2022
- 2022-03-04 WO PCT/CN2022/079174 patent/WO2023035563A1/zh unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298537A (zh) * | 2011-06-10 | 2011-12-28 | 宇龙计算机通信科技(深圳)有限公司 | 应用程序的迁移方法及系统 |
CN103257878A (zh) * | 2013-05-16 | 2013-08-21 | 浪潮通信信息系统有限公司 | 一种基于云计算的应用程序的跨平台平滑迁移方法 |
CN109918073A (zh) * | 2019-01-29 | 2019-06-21 | 维沃移动通信有限公司 | 一种源码文件的生成方法、装置以及终端 |
CN111736840A (zh) * | 2019-09-19 | 2020-10-02 | 北京沃东天骏信息技术有限公司 | 小程序应用的编译方法、运行方法、存储介质及电子设备 |
CN111610978A (zh) * | 2020-05-19 | 2020-09-01 | 中国建设银行股份有限公司 | 一种小程序转换方法、装置、设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023035563A1 (zh) * | 2021-09-10 | 2023-03-16 | 中国银联股份有限公司 | 小程序跨应用迁移方法、设备、终端、系统及存储介质 |
CN114185551A (zh) * | 2022-02-17 | 2022-03-15 | 浙江口碑网络技术有限公司 | 小程序的编译方法、小程序的运行方法及装置、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023035563A1 (zh) | 2023-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111708539B (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
US10705943B2 (en) | Automating identification of test cases for library suggestion models | |
US11494181B2 (en) | Automating generation of library suggestion engine models | |
CN110806863A (zh) | 接口文档生成方法及装置、电子设备、存储介质 | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
WO2019233293A1 (zh) | 一种应用程序的开发方法和装置 | |
CN106547527B (zh) | 一种JavaScript文件构建方法及装置 | |
WO2023035563A1 (zh) | 小程序跨应用迁移方法、设备、终端、系统及存储介质 | |
CN110262783B (zh) | 一种接口生成方法、装置及终端设备 | |
CN109597618B (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
CN104407863A (zh) | 抽象控件模型编程装置和方法 | |
CN111026368B (zh) | 基于Python插件生成方法、装置、设备及存储介质 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
EP3974964A1 (en) | Automated generation of software patches | |
CN107239265B (zh) | Java函数与C函数的绑定方法及装置 | |
CN117008920A (zh) | 引擎系统、请求处理方法、装置、计算机设备及存储介质 | |
CN113590179B (zh) | 插件检测方法、装置、电子设备及存储介质 | |
CN114611500A (zh) | 表达式处理方法、装置、电子设备及计算机可读存储介质 | |
CN110018816B (zh) | 一种基于c/c++编译系统的虚拟机控制系统及其控制方法 | |
CN113448874A (zh) | 一种单元测试脚本的生成方法及装置 | |
CN114579141A (zh) | require框架转化为VUE框架的方法及装置 | |
CN112905271A (zh) | 一种应用程序接口api的调用方法、装置及电子设备 | |
CN114817124A (zh) | 多核微控制器间映射方法、设备及计算机可读存储介质 | |
CN114706592A (zh) | 面向对象及面向过程语言的Modelica仿真组件生成方法 | |
CN112988260B (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 |