CN116795371A - 条件编译方法、装置、设备及介质 - Google Patents
条件编译方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN116795371A CN116795371A CN202210260919.9A CN202210260919A CN116795371A CN 116795371 A CN116795371 A CN 116795371A CN 202210260919 A CN202210260919 A CN 202210260919A CN 116795371 A CN116795371 A CN 116795371A
- Authority
- CN
- China
- Prior art keywords
- byte
- code
- replaced
- target
- byte code
- 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 111
- 238000002372 labelling Methods 0.000 claims description 90
- 238000004590 computer program Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 abstract description 47
- 238000012216 screening Methods 0.000 abstract description 14
- 230000006870 function Effects 0.000 description 48
- 238000010586 diagram Methods 0.000 description 12
- 238000012360 testing method Methods 0.000 description 11
- 238000013507 mapping Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 241001646055 Belenois java Species 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 229920002521 macromolecule Polymers 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本公开提供了一种条件编译方法、装置、设备及存储介质,在本公开实施例中,能够将源码注解信息作为代码筛选条件,从而选择出符合条件的代码进行编译,生成编译好且未被替换的字节码文件,从而完成代码选择过程和编译过程,然后,利用字节码文件中的字节码标注信息,对字节码文件进行替换,从而实现通过字节码增强方式完成替换过程,这样,根据代码之间的对应关系能够完成代码选择过程、编译过程以及替换过程,从而实现条件编译,并且,这种方式无需在待编译源文件中引入大量的选择条件也不需要复制不同文件的代码,最终降低了代码复杂度并提高了条件编译的可靠性。
Description
技术领域
本公开涉及计算机领域,尤其涉及一种条件编译方法、装置、设备及介质。
背景技术
条件编译是指编译器从待编译的源文件中选择出满足条件的部分代码进行替换和编译,将不满足条件的代码舍弃,从而降低编译过程中的代码长度。
对于获取的待编译源文件,相关技术可以基于待编译源文件中的函数内部逻辑或者从不同文件中选择部分代码来实现条件编译。但是,对于基于源文件中的函数内部逻辑实现条件编译的方式,需要在待编译源文件中添加很多筛选条件,因此,提高了代码的复杂度;对于从不同的文件中选择出满足条件的部分代码来实现条件编译的方式,由于需要复制多份文件,导致引入了不需要进行编译的部分代码。因此,提出一种降低代码复杂度以及提高条件编译可靠性的条件编译方式是目前亟需解决的技术问题。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种条件编译方法,能够将Dart源码编译过程中产生的中间语言输出到文件。
第一方面,本公开提供了一种条件编译方法,该方法包括:
获取待编译源文件;其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;
将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;
根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
在本公开一些实施例中,在根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件之前,该方法还包括:
分别读取待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标;
其中,根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件,包括:
将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
在本公开一些实施例中,分别读取待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标,包括:
调用预设遍历工具,遍历待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标。
在本公开一些实施例中,字节码标注信息为字节码注解信息;
其中,调用预设遍历工具,遍历待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标,包括:
利用预设遍历工具,从待替换字节码携带的字节码注解信息中获取第一注解类型,以及从目标替换字节码携带的字节码注解信息中获取第二注解类型;
将第一注解类型对应的注解目标作为第一标注目标,以及将第二注解类型对应的注解目标作为第二标注目标。
在本公开一些实施例中,在将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码之前,该方法还包括:
分别将第一标注目标及其对应的字节码以及第二标注目标及其对应的字节码进行对应存储;
其中,将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码,包括:
从已对应存储的字节码中获取第一标注目标对应的字节码和第二标注目标对应的字节码,并将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
在本公开一些实施例中,在获取待编译的源文件之后,该方法还包括:
将待编译源文件中不携带源码标注信息的源码删除。
第二方面,本公开提供了一种条件编译装置,该装置包括:
待编译源文件获取模块,用于获取待编译源文件;其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;
编译模块,用于将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;
字节码替换模块,用于根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
第三方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现上述的方法。
第四方面,本公开提供了一种设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的方法。
第五方面,本公开提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述的方法。
本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
本公开实施例提供了一种条件编译方法,首先,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;然后,将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件,其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;最后,根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。通过上述方式,能够将源码注解信息作为代码筛选条件,从而选择出符合条件的代码进行编译,生成编译好且未被替换的字节码文件,从而完成代码选择过程和编译过程,然后,利用字节码文件中的字节码标注信息,对字节码文件进行替换,从而实现通过字节码增强方式完成替换过程,这样,根据代码之间的对应关系能够完成代码选择过程、编译过程以及替换过程,从而实现条件编译,并且,这种方式无需在待编译源文件中引入大量的选择条件也不需要复制不同文件的代码,最终降低了代码复杂度并提高了条件编译的可靠性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种条件编译方法的流程示意图;
图2为本公开实施例提供的另一种条件编译方法的流程示意图;
图3为本公开实施例提供的一种用注解定义筛选条件的逻辑示意图;
图4为本公开实施例提供的一种利用ASM工具遍历字节码文件的逻辑示意图;
图5为本公开实施例提供的一种条件编译装置的结构示意图;
图6为本公开实施例提供的一种条件编译设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
条件编译是一种降低编译过程中的代码长度的编译方法。C和C++可以通过预处理器定义宏(Macros)开关来控制代码是否参与编译,然后预处理器将选择出的源代码输入编译器,利用编译器对宏定义的源代码进行替换,对替换后的源代码进行编译,得到条件编译结果文件,从而完成C条件编译和C++条件编译。与C条件编译和C++条件编译不同,Java不提供编译器的预处理能力,也就是说,Java不能通过预处理器定义宏(Macros)开关来控制代码是否参与编译,只能通过编译器自身选择出需要参与编译的源代码、对选择出来的源代码进行替换以及对替换后的源代码进行编译,从而完成Java条件编译。通过上述描述可知,条件编译过程可以包括代码选择过程、替换过程以及编译过程。
为了实现Java条件编译,目前的Java条件编译方式包括两种,第一种方式是基于待编译源文件中函数内部逻辑,选择部分代码来实现条件编译,第二种方式是从不同文件中选择部分代码来实现条件编译。
针对第一种方式,待编译源文件中需要在待编译源文件中添加很多筛选条件,使得Java编译器根据筛选条件筛选出符合条件的代码,从而实现条件编译。
可选的,筛选条件可以是if{}else{}、case{}形式的条件。
为了便于理解在待编译源文件中添加筛选条件,可以通过表1所示的代码在待编译源文件中添加筛选条件。
表1:在待编译源文件中添加筛选条件的代码
基于表1可知,由于待编译源文件中添加了很多筛选条件,提高了代码的复杂度;并且,Java中的筛选条件只能添加到函数内部,不适用于所有代码行,例如,不能对类或者属性对应的代码行添加筛选条件,导致条件编译的适用范围有限。
针对第二种方式,可以利用Android编译的Product Flavor方案,将不同条件下的源代码和配置信息分散在不同的文件中,当进行条件编译时,需要复制多份文件以选择出满足筛选条件的代码,从而完成条件编译,但是,这种条件编译方式会引入不需要进行编译的部分代码,导致代码选择的可靠性较差,也额外增加了代码维护成本。
其中,上述两种方式所涉及的筛选条件可以是一种条件编译开关。
为了解决上述问题,本公开实施例提供了一种能够降低代码复杂度以及提高条件编译可靠性的条件编译方法、装置、设备及存储介质。
下面,首先结合图1至图6对本公开实施例提供的条件编译方法进行说明。
图1示出了本公开实施例提供的一种条件编译方法的流程示意图。
在本公开一些实施例中,图1所示的条件编译方法可以由安装有编译器的电子设备执行。该电子设备可以包括但不限于诸如台式计算机、笔记本电脑等设备。
如图1所示,该条件编译方法可以包括如下步骤。
S110、获取待编译源文件,其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系。
在本公开实施例中,在待编译文件写好之后,电子设备可以从特定的路径下获取待编译源文件,使得对待编译源文件进行编译。
在本公开实施例中,待编译源文件可以是需要利用编译器编译的源文件。
以编译器是Java编译器为例,待编译源文件可以是一种.Java文件,例如是origin.Java文件。
在本公开实施例中,源码标注信息可以是一种能够使被编译的源码参与编译的条件编译开关,也就是说,若源码携带源码标注信息,则该源码会参与编译,生成字节码,否则,该源码在编译过程中被剔除。
可选的,源码标注信息可以是源码注解信息,也可以是其他形式的标注信息。
在本公开实施例中,待替换源码可以是参与编译的且需要被替换的源代码。
在本公开实施例中,目标替换源码可以是参与编译且替换其他目标的源代码。
在本公开实施例中,待替换源码与目标替换源码之间的对应关系可以是一种源代码替换关系。
可以理解的是,由于待替换源码和目标替换源码均携带源码标注信息,且源码标注信息用于表征待替换源码与目标替换源码之间的对应关系,因此,根据源码标注信息可以确定出待替换源码与目标替换源码之间的替换关系。
需要说明的是,源码标注信息可以用于标注待替换源码和目标替换源码的类、函数或者属性,因此,以源码标注信息作为条件编译开关,提高了条件编译开关的适用范围。
S120、将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件,其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系。
在本公开实施例中,电子设备在获取到待编译源文件之后,可以将待编译源文件输入安装好的编译器中,利用编译器将待编译源文件中携带源码标注信息的待替换源码和目标替换源码分别进行编译,使得将源码标注信息编译成字节码标注信息、将待替换源码编译成待替换字节码,以及将目标替换源码编译成目标替换字节码,得到携带字节码标注信息的待替换字节码和目标替换字节码,即得到编译好的字节码文件,从而实现从待编译源文件中选择出满足条件的源码,并对满足条件的源码进行编译。
在本公开实施例中,待替换字节码与目标替换字节码之间的对应关系可以是一种字节码替换关系。
在本公开实施例中,字节码文件可以是一种未发生字节码替换的条件编译文件。
以编译器是Java编译器为例,字节码文件可以是一种.Class文件,例如是origin.Class文件。
可以理解的是,由于待替换字节码和目标替换字节码均携带字节码标注信息,且字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系,因此,根据字节码标注信息可以确定出待替换字节码与目标替换字节码之间的替换关系。
由此,在本公开实施例中,可以将携带源码标注信息作为条件编译开关,对携带源码标注信息的待替换源码和目标替换源码分别进行编译,从而实现从待编译源文件中选择出需要进行编译的源码,以及对选择出的源码进行编译,从而完成的代码选择过程和编译过程。
S130、根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
在本公开实施例中,电子设备在通过编译器得到字节码文件之后,可以获取字节码文件中的字节码标注信息,根据字节码标注信息所表征的待替换字节码与目标替换字节码之间的对应关系,调用字节码增强工具,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
在本公开实施例中,条件编译结果文件可以是一种已发生字节码替换的且能够被虚拟机直接执行的字节码文件。
以编译器是Java编译器为例,条件编译结果文件可以是一种.Class文件,例如是target.Class文件。
可选的,字节码增强工具可以包括AspectJ、ASM、Javassist、JavaPoet等工具,在此不做限定。
由此,在本公开实施例中,可以根据字节码标注信息所表征的待替换字节码与目标替换字节码之间的对应关系,进行字节码替换,由此可以实现通过字节码增强的方式替换字节码,完成替换过程,最终完成整个条件编译过程。
需要说明的是,在执行S110之后,该方法还可以包括如下步骤:
将待编译源文件中不携带源码标注信息的源码删除。
具体的,电子设备的编译器在获取到待编译源文件之后,通过读取待编译源文件中每行代码的源码标注信息,将不携带源码标注信息的代码自动删除。这样,在编译过程中,可以自动剔除不携带源码标注信息的代码,使得编译得到的字节码文件只保留符合编译条件的部分代码。
在本公开实施例中,首先,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;然后,将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件,其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;最后,根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。通过上述方式,能够将源码注解信息作为代码筛选条件,从而选择出符合条件的代码进行编译,生成编译好且未被替换的字节码文件,从而完成代码选择过程和编译过程,然后,利用字节码文件中的字节码标注信息,对字节码文件进行替换,从而实现通过字节码增强方式完成替换过程,这样,根据代码之间的对应关系能够完成代码选择过程、编译过程以及替换过程,从而实现条件编译,并且,这种方式无需在待编译源文件中引入大量的选择条件也不需要复制不同文件的代码,最终降低了代码复杂度并提高了条件编译的可靠性。
在本公开另一种实施方式中,可以根据字节码标注信息,确定出具有替换关系的标注目标,然后对具有替换关系的标注目标的字节码进行对应替换。
图2示出了本公开实施例提供的另一种条件编译方法的流程示意图。
如图2所示,该条件编译方法可以包括如下步骤。
S210、获取待编译源文件;其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系。
S220、将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系。
其中,S210~S220与S110~S120相似,在此不做赘述。
S230、分别读取待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标。
在本公开实施例中,可选的,S230具体可以包括如下步骤。
S2301、调用预设遍历工具,遍历待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标。
其中,预设遍历工具可以是一种字节码增加工具,用于遍历待替换字节码和目标替换字节码的每一行代码,从而读取每一行代码的字节码标注信息,以获取待替换字节码的第一标注目标和目标替换字节码的第二替换目标。
可选的,预设遍历工具为字节码处理工具(ASM)。
其中,第一标注目标和第二标注目标可以是字节码标注信息所标注的具体目标。
可选的,第一标注目标和第二标注目标可以包括类、函数或者属性。
其中,字节码标注信息可以是字节码注解信息。相应的,S2301可以包括如下步骤:
S23011、利用预设遍历工具,从待替换字节码携带的字节码标注信息中获取第一注解类型,以及从目标替换字节码携带的字节码标注信息中获取第二注解类型;
S23012、将第一注解类型对应的注解目标作为第一标注目标,以及将第二注解类型对应的注解目标作为第二标注目标。
其中,字节码注解信息可以是字节码对应的注解。
其中,第一注解类型和第二注解类型可以是注解作用类型。
可选的,第一注解类型和第二注解类型可以为@external、@patch等注解类型,在此不做赘述。
其中,第一标注目标和第二标注目标可以是具有替换关系的注解目标。
具体的,电子设备可以通过编译器将待编译文件抽象为抽象语法树(AbstractSyntax Tree,AST),并利用ASM提供的类读取(ClassReader)接口,遍历待编译文件对应的抽象语法树,从而获取待编译文件的所有的字节码注解信息,得到待替换字节码的字节码注解信息中的第一注解类型,以及目标替换字节码携带的字节码注解信息中获取第二注解类型,然后,读取第一注解类型对应的标注目标,作为第一标注目标,以及读取第二注解类型对应的标注目标,作为第二标注目标。
示例性的,可以通过表2所示的代码解释确定注解类型的过程,其中,注解类型为@external和@patch:
表2:确定注解类型的代码
进一步的,通过表2确定注解类型之后,读取第一注解类型对应的标注目标,作为第一标注目标,以及读取第二注解类型对应的标注目标,作为第二标注目标。
由此,在本公开实施例中,可以利用字节码注解信息作为字节码标注信息,并利用预设遍历工具读取字节码标注信息,确定出具有替换关系的标注目标,便于后续对具有替换关系的标注目标进行替换。
S240、将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
在本公开实施例中,电子设备在通过编译器得到具有替换关系的第一标注目标和第二标注目标之后,能够将第一标注目标对应的字节码直接替换为第二标注目标对应的字节码,从而完成字节码替换过程。
在本公开实施例中,可选的,在S240之前,该方法还可以包括如下步骤:
S231、分别将第一标注目标及其对应的字节码以及第二标注目标及其对应的字节码进行对应存储;
相应的,S240具体可以包括如下步骤:
S2401、从已对应存储的字节码中获取第一标注目标对应的字节码和第二标注目标对应的字节码,并将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
具体的,第一标注目标对应的第一注解类型和第二标注目标对应的第二注解类型不同,不同注解类型的注解目标对应的字节码可以以不同方式存储,例如,将字节码存储至数组或者映射表。因此,可以根据注解类型,将不同注解类型的注解目标对应的字节码存储至数组或者映射表,然后,从数组或者映射表的已对应存储的字节码中获取第一标注目标对应的字节码和第二标注目标对应的字节码,最后将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码,完成字节码的替换过程。
由此,在本公开实施例中,在进行字节码替换之前,能够对第一标注目标对应的字节码和第二标注目标对应的字节码分别对应存储,然后从已存储的字节码中获取第一标注目标对应的字节码和第二标注目标对应的字节码,并进行对应替换,从而使得条件编译过程有序执行。
在本公开又一种实施例中,对于前述实施例中的条件编译过程,以待替换源码和目标替换源码携带的源码标注信息是源码注解信息为例进行解释。示例性的,待替换源码携带的源码标注信息中的第一注解类型为@external,目标替换源码携带的源码注解信息中的第二注解类型为@patch,然后对利用上述注解类型注解的待替换源码和目标替换源码,进行条件编译。
在本公开实施例中,源码注解信息即为源码的注解。其中,注解(Annotion)是一个接口,使得编译器可以通过反射来获取指定程序元素的注解对象,然后通过注解对象来获取注解里面的元数据,注解不会影响代码的逻辑,可以利用注解来定义条件编译开关。
其中,@external可以作用于函数,表述该函数需要进行条件编译,该函数在编译时选择一个满足条件的函数进行替换。
其中,@patch作用于类、函数或者属性。具体的,当@patch作用于类时,表示该类是参与条件编译的一部分,在满足条件时,该类的成员方法和成员属性将会替换成其指定的目标,否则,该类在编译之后会被剔除,不会出现在最终的编译文件中;当@patch作用于函数时,表示该函数是参与条件编译的一部分,在满足条件时,该函数就是最终生效的函数,即为替换到目标类中的函数;当@patch作用于属性时,表示该属性是参与条件编译的一部分,在满足条件时,该属性就是最终生效的属性,即为替换到目标类中的属性。
为了便于理解,图3示出了本公开实施例提供的一种用注解定义筛选条件的逻辑示意图。
首先,参见图3具体的解释S210,待替换源码为origin.Java,目标替换源码包括A.Java和B.Java。其中,待替换源码定义了由@external注解的待替换类Test.Java中的待替换函数foo{},表示该函数的实现是由外部定义的,在编译时会被选择。目标替换源码中的A.Java定义了由@patch注解的目标替换类TestlmplPatch和目标替换函数foo{},其中,类TestlmplPatch用于替换到待替换类Test.Java,目标替换函数foo{}用于替换到待替换类Test.Java中的待替换函数foo{}。目标替换源码中的B.Java定义了由@patch注解的目标替换类TestlmplPatch、目标替换函数foo{}以及目标替换属性mPatch,其中,类TestlmplPatch是待替换类Test.Java的具体实现,目标替换函数foo{}是待替换类Test.Java中的待替换函数foo{}的具体实现,目标替换属性mPatch是新增的属性,即为要替换的属性。
接着,继续参见图3具体的解释S220,若待替换源码为origin.Java,目标替换源码为A.Java,将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译之后,得到字节码文件为origin A.Class,即为图3中右上角的字节码文件;若待替换源码为origin.Java,目标替换源码为B.Java,将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译之后,得到字节码文件为origin B.Class,即为图3中右下角的字节码文件。
进一步的,为了便于理解S230和S240,图4示出了一种利用ASM工具遍历字节码文件的逻辑示意图。
继续参见图3以及参见图4,首先解释S230,以遍历origin B.Class为例,编译器可以调用ASM工具读取字节码文件的内容,遍历抽象为AST的字节码文件origin B.Class中的每行代码,然后,获取字节码文件中待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,从待替换字节码携带的字节码标注信息中获取第一注解类型为@external,以及从目标替换字节码携带的字节码标注信息中获取第二注解类型为@patch,接着,将第一注解类型对应的注解目标作为第一标注目标,即将待替换类Test.Class中的待替换函数foo{}作为第一标注目标,以及将第二注解类型对应的注解目标作为第二标注目标,即将目标替换类TestlmplPatch、目标替换函数foo{}以及目标替换属性mPatch作为第二标注目标。
继续参见图3和图4具体的解释S240,在进行字节码替换之前,若编译器确定出第一注解类型为@external,可以获取待替换类Test.Class的类名、待替换类Test.Class的字节码,以及待替换函数foo{}的函数签名,将待替换类Test.Class的类名作为键,待替换类Test.Class的字节码作为键值,由该键和该键值构成键值对,然后以键值对的形式将待替换类Test.Class的类名和待替换类Test.Class的字节码保存到映射表,以及将待替换函数foo{}的函数签名到数组;若编译器确定出第二注解类型为@patch,且第二注解类型为@patch作用的是类,则将目标替换类TestlmplPatch的类名保存到数组;若编译器确定出第二注解类型为@patch,且第二注解类型为@patch作用的是函数,将目标替换函数foo{}的函数签名作为键,将目标替换函数foo{}的函数签名的字节码作为键值,由该键和该键值构成键值对,则以键值对的形式将目标替换函数foo{}的函数签名及其字节码保存到映射表;若第二注解类型为@patch,且第二注解类型为@patch作用的是属性,将目标替换属性mPatch的属性名作为键,将目标替换属性mPatch的字节码作为键值,则将目标替换属性mPatch的属性名及其字节码保存到映射表。进一步的,在进行字节码替换时,从数组或者映射表中获取已对应存储的字节码,然后将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
其中,若待编译文件包括ClassA.java、ClassB.java…ClassA.java,以@external注解的待编译文件的已对应存储的字节码的代码为:
/>
表3:以@external注解的已对应存储的字节码
其中,若待编译文件包括ClassA.java、ClassB.java…ClassA.java,以@patch注解的已对应存储的字节码的代码为:
表4:以@patch注解的已对应存储的字节码
由表3和表4可以看出,若以@external注解的待替换函数ClassA:void foo(int)需要被替换,则从上述已对应存储的映射表和数组中获取目标替换函数ClassA:void foo(int)->函数foo()的字节码,则将待替换函数ClassA:void foo(int)的字节码,替换为目标替换函数ClassA:void foo(int)->函数foo()的字节码,得到编译结果文件。
与上述方法实施例基于同一个发明构思,本公开还提供了一种条件编译装置,参考图5,为本公开实施例提供的一种条件编译装置的结构示意图,该条件编译装置500包括:
待编译源文件获取模块510,用于获取待编译源文件;其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;
编译模块520,用于将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;
字节码替换模块530,用于根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
在本公开实施例中,首先,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;然后,将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件,其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;最后,根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。通过上述方式,能够将源码注解信息作为代码筛选条件,从而选择出符合条件的代码进行编译,生成编译好且未被替换的字节码文件,从而完成代码选择过程和编译过程,然后,利用字节码文件中的字节码标注信息,对字节码文件进行替换,从而实现通过字节码增强方式完成替换过程,这样,根据代码之间的对应关系能够完成代码选择过程、编译过程以及替换过程,从而实现条件编译,并且,这种方式无需在待编译源文件中引入大量的选择条件也不需要复制不同文件的代码,最终降低了代码复杂度并提高了条件编译的可靠性。
在本公开一些实施例中,该装置还包括:
读取模块,用于分别读取待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标;
相应的,字节码替换模块530具体用于,将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
在本公开一些实施例中,字节码替换模块530具体用于,调用预设遍历工具,遍历待替换字节码携带的字节码标注信息和目标替换字节码携带的字节码标注信息,得到待替换字节码的第一标注目标和目标替换字节码的第二标注目标。
在本公开一些实施例中,字节码标注信息为字节码注解信息;
相应的,字节码替换模块530,包括:
注解类型获取单元,用于利用预设遍历工具,从待替换字节码携带的字节码注解信息中获取第一注解类型,以及从目标替换字节码携带的字节码注解信息中获取第二注解类型;
标注目标获取单元,将第一注解类型对应的注解目标作为第一标注目标,以及将第二注解类型对应的注解目标作为第二标注目标。
在本公开一些实施例中,该装置还包括:
存储模块,用于分别将第一标注目标及其对应的字节码以及第二标注目标及其对应的字节码进行对应存储;
相应的,字节码替换模块530具体用于,从已对应存储的字节码中获取第一标注目标对应的字节码和第二标注目标对应的字节码,并将第一标注目标对应的字节码对应替换为第二标注目标对应的字节码。
在本公开一些实施例中,该装置还包括:
删除模块,用于将待编译源文件中不携带源码标注信息的源码删除。
需要说明的是,图5所示的条件编译装置500可以执行图1至图4所示的方法实施例中的各个步骤,并且实现图1至图4所示的方法实施例中的各个过程和效果,在此不做赘述。
本公开实施例还提供了一种条件编译设备,该条件编译设备可以包括处理器和存储器,存储器可以用于存储可执行指令。其中,处理器可以用于从存储器中读取可执行指令,并执行可执行指令以实现上述实施例中的条件编译方法。
图6示出了本公开实施例提供的一种条件编译设备的结构示意图。下面具体参考图6,其示出了适于用来实现本公开实施例中的条件编译设备600的结构示意图。
本公开实施例中的条件编译设备600可以为电子设备或服务器。
需要说明的是,图6示出的条件编译设备600仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,该条件编译设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有条件编译设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许条件编译设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的条件编译设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
本公开实施例还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,当计算机程序被处理器执行时,使得处理器实现上述实施例中的条件编译方法。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的条件编译方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述条件编译设备中所包含的;也可以是单独存在,而未装配入该条件编译设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该条件编译设备执行时,使得该条件编译设备执行:
获取待编译源文件;其中,待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,源码标注信息用于表征待替换源码与目标替换源码之间的对应关系;
将待编译源文件中的携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,字节码标注信息由源码标注信息编译得到,待替换字节码由待替换源码编译得到,以及目标替换字节码由目标替换源码编译得到,字节码标注信息用于表征待替换字节码与目标替换字节码之间的对应关系;
根据字节码标注信息,将字节码文件中的待替换字节码替换为与待替换字节码对应的目标替换字节码,得到条件编译结果文件。
在本公开实施例中,可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本公开实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现本公开实施例所述的条件编译方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种条件编译方法,其特征在于,所述方法包括:
获取待编译源文件;其中,所述待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,所述源码标注信息用于表征所述待替换源码与所述目标替换源码之间的对应关系;
将所述待编译源文件中的所述携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,所述字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,所述字节码标注信息由所述源码标注信息编译得到,所述待替换字节码由所述待替换源码编译得到,以及所述目标替换字节码由所述目标替换源码编译得到,所述字节码标注信息用于表征所述待替换字节码与所述目标替换字节码之间的对应关系;
根据所述字节码标注信息,将所述字节码文件中的所述待替换字节码替换为与所述待替换字节码对应的目标替换字节码,得到条件编译结果文件。
2.根据权利要求1所述的方法,其特征在于,在所述根据所述字节码标注信息,将所述字节码文件中的所述待替换字节码替换为与所述待替换字节码对应的目标替换字节码,得到条件编译结果文件之前,所述方法还包括:
分别读取所述待替换字节码携带的字节码标注信息和所述目标替换字节码携带的字节码标注信息,得到所述待替换字节码的第一标注目标和所述目标替换字节码的第二标注目标;
其中,所述根据所述字节码标注信息,将所述字节码文件中的所述待替换字节码替换为与所述待替换字节码对应的目标替换字节码,得到条件编译结果文件,包括:
将所述第一标注目标对应的字节码对应替换为所述第二标注目标对应的字节码。
3.根据权利要求2所述的方法,其特征在于,所述分别读取所述待替换字节码携带的字节码标注信息和所述目标替换字节码携带的字节码标注信息,得到所述待替换字节码的第一标注目标和所述目标替换字节码的第二标注目标,包括:
调用预设遍历工具,遍历所述待替换字节码携带的字节码标注信息和所述目标替换字节码携带的字节码标注信息,得到所述待替换字节码的第一标注目标和所述目标替换字节码的第二标注目标。
4.根据权利要求3所述的方法,其特征在于,所述字节码标注信息为字节码注解信息;
其中,所述调用预设遍历工具,遍历所述待替换字节码携带的字节码标注信息和所述目标替换字节码携带的字节码标注信息,得到所述待替换字节码的第一标注目标和所述目标替换字节码的第二标注目标,包括:
利用所述预设遍历工具,从所述待替换字节码携带的字节码注解信息中获取第一注解类型,以及从所述目标替换字节码携带的字节码注解信息中获取第二注解类型;
将所述第一注解类型对应的注解目标作为所述第一标注目标,以及将所述第二注解类型对应的注解目标作为所述第二标注目标。
5.根据权利要求2所述的方法,其特征在于,在所述将所述第一标注目标对应的字节码对应替换为所述第二标注目标对应的字节码之前,所述方法还包括:
分别将所述第一标注目标及其对应的字节码以及所述第二标注目标及其对应的字节码进行对应存储;
其中,所述将所述第一标注目标对应的字节码对应替换为所述第二标注目标对应的字节码,包括:
从已对应存储的字节码中获取所述第一标注目标对应的字节码和所述第二标注目标对应的字节码,并将所述第一标注目标对应的字节码对应替换为所述第二标注目标对应的字节码。
6.根据权利要求1所述的方法,其特征在于,在所述获取待编译的源文件之后,所述方法还包括:
将所述待编译源文件中不携带所述源码标注信息的源码删除。
7.一种条件编译装置,其特征在于,所述装置包括:
待编译源文件获取模块,用于获取待编译源文件;其中,所述待编译源文件包括携带源码标注信息的待替换源码和目标替换源码,所述源码标注信息用于表征所述待替换源码与所述目标替换源码之间的对应关系;
编译模块,用于将所述待编译源文件中的所述携带源码标注信息的待替换源码和目标替换源码分别进行编译,得到字节码文件;其中,所述字节码文件包括携带字节码标注信息的待替换字节码和目标替换字节码,所述字节码标注信息由所述源码标注信息编译得到,所述待替换字节码由所述待替换源码编译得到,以及所述目标替换字节码由所述目标替换源码编译得到,所述字节码标注信息用于表征所述待替换字节码与所述目标替换字节码之间的对应关系;
字节码替换模块,用于根据所述字节码标注信息,将所述字节码文件中的所述待替换字节码替换为与所述待替换字节码对应的目标替换字节码,得到条件编译结果文件。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现如权利要求1-6任一项所述的方法。
9.一种设备,其特征在于,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-6任一项所述的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210260919.9A CN116795371A (zh) | 2022-03-16 | 2022-03-16 | 条件编译方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210260919.9A CN116795371A (zh) | 2022-03-16 | 2022-03-16 | 条件编译方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116795371A true CN116795371A (zh) | 2023-09-22 |
Family
ID=88044855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210260919.9A Pending CN116795371A (zh) | 2022-03-16 | 2022-03-16 | 条件编译方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116795371A (zh) |
-
2022
- 2022-03-16 CN CN202210260919.9A patent/CN116795371A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10990367B2 (en) | Application development method, tool, and device, and storage medium | |
US9811325B2 (en) | Systems and methods for dynamically replacing code objects for code pushdown | |
CN112104709B (zh) | 智能合约的处理方法、装置、介质及电子设备 | |
US11593342B2 (en) | Systems and methods for database orientation transformation | |
CN110764748B (zh) | 代码调用方法、装置、终端及存储介质 | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN111736840A (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
CN109947431B (zh) | 一种代码生成方法、装置、设备及存储介质 | |
CN110990023A (zh) | aar文件的依赖关系上传方法、装置、存储介质及电子设备 | |
CN112395253B (zh) | 索引文件生成方法、终端设备、电子设备及介质 | |
CN111309335A (zh) | 插件应用的编译方法、装置及计算机可读存储介质 | |
CN110609687A (zh) | 一种编译方法、装置、电子设备和存储介质 | |
CN113407165B (zh) | Sdk的生成和自升级方法、装置、可读介质和设备 | |
CN112416303B (zh) | 软件开发工具包热修复方法、装置及电子设备 | |
CN113391811B (zh) | 函数编译方法、装置、电子设备及计算机可读存储介质 | |
US20180129490A1 (en) | Object ordering preservation during lto link stage | |
CN114840195B (zh) | 一种针对iOS SDK静态库的私有化方法 | |
CN113377342A (zh) | 一种项目构建方法、装置、电子设备及存储介质 | |
CN109815455A (zh) | 项目文件处理方法和装置 | |
CN115167822A (zh) | 分支代码合并方法、装置、设备和存储介质 | |
CN111796865B (zh) | 一种字节码文件修改方法、装置、终端设备及介质 | |
CN113448585B (zh) | 一种线程池的编译方法、装置、电子设备和存储介质 | |
CN116795371A (zh) | 条件编译方法、装置、设备及介质 | |
CN114428615B (zh) | Css编译方法、样式更新方法、装置、介质及设备 |
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 |