CN117950672A - 项目编译处理方法、装置、设备、存储介质及程序产品 - Google Patents

项目编译处理方法、装置、设备、存储介质及程序产品 Download PDF

Info

Publication number
CN117950672A
CN117950672A CN202311803664.7A CN202311803664A CN117950672A CN 117950672 A CN117950672 A CN 117950672A CN 202311803664 A CN202311803664 A CN 202311803664A CN 117950672 A CN117950672 A CN 117950672A
Authority
CN
China
Prior art keywords
compiling
resource
file
type file
project
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
CN202311803664.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.)
Guangzhou Anschuang Information Technology Co ltd
Original Assignee
Guangzhou Anschuang Information 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 Guangzhou Anschuang Information Technology Co ltd filed Critical Guangzhou Anschuang Information Technology Co ltd
Priority to CN202311803664.7A priority Critical patent/CN117950672A/zh
Publication of CN117950672A publication Critical patent/CN117950672A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请实施例提供了一种项目编译处理方法、装置、设备、存储介质及程序产品,该方法包括:在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,该第一类型文件为编译流程中无法识别增量变更的中间文件;通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,该第二类型文件为可识别增量变更的中间文件;基于第二类型文件进行资源变动的增量编译。上述方案中,对资源配置文件的资源标识采用增量变更,通过第一中间任务进行解析得到第二类型文件,确保有效的进行增量编译处理,提高了项目开发的编译效率。

Description

项目编译处理方法、装置、设备、存储介质及程序产品
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种项目编译处理方法、装置、设备、存储介质及程序产品。
背景技术
目前,在项目开发过程中,语法简洁的开发语言逐渐成为国内外项目开发的主流语言。例如,在Android项目开发中,对于同样基于JVM的静态类型的Kotlin语言和Java语言,Kotlin语言的语法更为简洁,但是在面对大型的Android项目的情况下,相比于Java语言,Kotlin语言的编译效率相对较低。由此各类项目开发语言的官方提供可增量编译的解决方案,可以在资源变动不涉及关联代码引用的场景下实现仅重新编译发生更改的代码部分,一定程度上解决大型的开发项目出现编译耗时较长的问题。
然而,当涉及到资源变动需要关联代码引用时,前述解决方案无法支持增量编译,程序项目中任意功能模块的资源变动,会引起代码引用部分的相应修改,会触发全量编译,导致项目编译耗时过长,影响程序项目开发的编译效率。
发明内容
本申请实施例提供了一种项目编译处理方法、装置、设备、存储介质及程序产品,解决了涉及到资源相关需要关联代码引用时无法支持增量编译,造成项目编译耗时过长,影响项目开发的编译效率的问题,该方案通过将资源配置文件中的当前的资源标识进行固定,可以对已经编译引用过且未发生变化的资源标识进行提前锁定,便于针对该资源变动进行资源标识的增量生成,减少该资源配置文件的资源标识改动,避免因已有资源标识关联的代码引用引起全量编译,有利于针对该资源变动进行增量编译,通过向当前编译流程注入第一中间任务,可以将原有流程生成的第一类型文件进行解析得到增量变更可被识别的第二类型文件,因而针对该资源变动的增量变更可以被后续的编译任务识别,确保有效进行增量编译处理,提高项目开发的编译效率。
第一方面,本申请实施例提供了一种项目编译处理方法,该方法包括:
在项目的功能模块发生资源变动的情况下,将所述功能模块当前对应的资源配置文件中的资源标识进行固定,基于所述资源变动进行资源标识的增量变更得到第一类型文件,所述第一类型文件为编译流程中无法识别增量变更的中间文件;
通过预先注入编译流程的第一中间任务,对所述第一类型文件进行解析得到第二类型文件,所述第二类型文件为可识别增量变更的中间文件;
基于所述第二类型文件进行所述资源变动的增量编译。
第二方面,本申请实施例还提供了一种项目编译处理装置,该装置包括:
标识增量变更模块,配置为在项目的功能模块发生资源变动的情况下,将所述功能模块当前对应的资源配置文件中的资源标识进行固定,基于所述资源变动进行资源标识的增量变更得到第一类型文件,所述第一类型文件为编译流程中无法识别增量变更的中间文件;
文件类型转换模块,配置为通过预先注入编译流程的第一中间任务,对所述第一类型文件进行解析得到第二类型文件,所述第二类型文件为可识别增量变更的中间文件;
增量编译模块,配置为基于所述第二类型文件进行所述资源变动的增量编译。
第三方面,本申请实施例还提供了一种项目编译处理设备,该设备包括:
一个或多个处理器;
存储装置,配置为存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本申请实施例所述的项目编译处理方法。
第四方面,本申请实施例还提供了一种存储计算机可执行指令的非易失性存储介质,所述计算机可执行指令在由计算机处理器执行时配置为执行本申请实施例所述的项目编译处理方法。
第五方面,本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,设备的至少一个处理器从计算机可读存储介质读取并执行计算机程序,使得设备执行本申请实施例所述的项目编译处理方法。
本申请实施例中,通过在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,第一类型文件为编译流程中无法识别增量变更的中间文件;通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,第二类型文件为可识别增量变更的中间文件;基于第二类型文件进行资源变动的增量编译。上述方案中,通过将资源配置文件中的当前的资源标识进行固定,可以对已经编译引用过且未发生变化的资源标识进行提前锁定,便于针对该资源变动进行资源标识的增量生成,减少该资源配置文件的资源标识改动,避免因已有资源标识关联的代码引用引起全量编译,有利于针对该资源变动进行增量编译,通过向当前编译流程注入第一中间任务,可以将原有流程生成的第一类型文件进行解析得到增量变更可被识别的第二类型文件,因而针对该资源变动的增量变更可以被后续的编译任务识别,确保有效进行增量编译处理,提高项目开发的编译效率。
附图说明
图1为一种示例的AAB架构下的Android项目模块组成的示意图;
图2为一种示例的Android项目的编译过程的示意图;
图3为一种示例的相关编译流程的资源标识变更的示意图;
图4为本申请实施例提供的一种项目编译处理方法的流程图;
图5为本申请实施例提供的一种通过固定资源标识进行增量变更的过程的示意图;
图6为本申请实施例提供的一种包含第一类型文件进行解析得到第二类型文件的编译过程的示意图;
图7为本申请实施例提供的一种包含第一中间任务注入过程的项目编译处理方法的流程图;
图8为本申请实施例提供的一种包含第二类型文件中间存储过程的项目编译处理方法的流程图;
图9为本申请实施例提供的一种包含基于全局开关变量确定是否优化编译的过程的项目编译处理方法的流程图;
图10为本申请实施例提供的一种包含生成功能模块对应资源配置文件的过程的项目编译处理方法的流程图;
图11为本申请实施例提供的一种包含资源标识增量变更过程的项目编译处理方法的流程图;
图12为本申请实施例提供的一种项目编译处理装置的结构框图;
图13为本申请实施例提供的一种项目编译处理设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请实施例,而非对本申请实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请实施例相关的部分而非全部结构。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请实施例提供的项目编译处理方法,可以用于开发人员基于不同程序语言进行不同系统的程序项目开发的场景,其应用的系统可以是Android系统、Symbian系统、IOS系统等,以Android系统为例,在应用Kotlin语言进行Android项目的开发场景下,Android项目的资源发生变动时,可以有效触发增量编译。前述罗列的几种应用场景仅是示例性和解释性的,在实际应用中,还可以在其他场景下的项目开发中用到该项目编译处理方法,本申请实施例对此不作限定。
其中,以Android项目开发为示例,对于Kotlin语言而言,虽然JetBrains官方提供可增量编译的解决方案,但是面对涉及到资源变动需要关联代码引用的相关场景下,该解决方案无法支持增量编译,会触发全量编译,导致项目编译耗时过长。示例的,在Android开发中,XML文件通常用于定义应用程序的布局、界面和资源,该相关场景可以是与XML布局文件相关的资源变动,例如,向XML布局文件中添加新的视图,会涉及标识符、图像、字符串、颜色、等资源变动。当然,还有其他相关场景的资源变动无法支持增量编译,对于项目快速更新迭代的需求而言,会影响项目开发效率造成较大的影响。
相关技术中,以AAB架构模块化的Android项目为示例,图1为一种示例的AAB架构下的Android项目模块组成的示意图,如图1所示,在AAB架构下,Android项目可以由多个功能模块组成,每个功能模块包含应用程序的部分功能,该Android项目可以包括Base模块、业务A、B、C、D模块、Common模块以及Util模块等,该Base模块可以应用程序的基本功能和必要的资源,该业务模块可以包含应用程序的可选功能,该Common模块可以包含应用程序中多个其他模块共享的代码和资源,该Util模块可以包含提供特定功能的工具类或函数,不同模块之间存在一定的依赖关系。图2为一种示例的Android项目的编译过程的示意图,基于图1所示的Android项目,如图2所示,以Kotlin是编程语言为例,在Common模块发生资源变动的情况下,在现有的与资源相关的编译流程中,主要涉及到以下几个流程模块,包括:GenerateLibraryRFileTask、KotlinCompile、JavaCompile、BundleAllClasses以及DexArchiveBuilderTask,其中,GenerateLibraryRFileTask中与Common模块相关的行为是generateDebugRFile,KotlinCompile中与Common模块相关的行为是compileDebugKotlin,JavaCompile中与Common模块相关的行为是compileDebugJavaWithJavac,DexArchiveBuilderTask中与Common模块相关的行为是dexBuilderTask,BundleAllClasses中与Common模块相关的行为是bundleDebugClassesToCompileJar。首先GenerateLibraryRFileTask会对应进行资源标识的变更生成R.jar文件,以便在代码中引用该模块资源,其中,图3为一种示例的相关编译流程的资源标识变更的示意图,如图3所示,原始R.jar文件中资源引用标识的排列为aaa=1、bbb=2、cca=3、ccb=4以及ccc=5,可以新增资源aac,由于该R.jar文件的生成是默认按照字典序进行生成的,因而新增资源也会按照字典序插入的,其插入会引起后续资源标识的顺位后移,由此,资源引用标识的排列会变更为aaa=1、aac=2、bbb=3、cca=4、ccb=5以及ccc=6,从而引起大量的资源标识发生变化,导致相关的代码引用发生较大变化,而且目前版本的Kotlin编译器也无法识别R.jar文件的变化,从而整个Common模块的Kotlin代码都会全部编译,引发后续Java代码的整体编译,后面的流程随之为全量编译。此外,结合图1的Android项目模块组成,基于模块间的依赖关系可知Common处于最底层,该Common模块的整体编译,会触发Base模块的整体编译,继而触发业务模块A、B、C的编译,最后触发业务模块D的编译,导致项目编译耗时过长。由此,对于需要快速迭代的大型Android项目而言,对于资源相关的增删改动是十分频繁的,本申请旨在提供一种项目编译处理方法、装置、设备、存储介质及程序产品,解决涉及到资源相关需要关联代码引用时无法支持增量编译,造成项目编译耗时过长,影响项目开发的编译效率的问题。
本申请实施例提供的项目编译处理方法,各步骤的执行主体可以是计算机设备,该计算机设备是指任何具备数据计算、处理和存储能力的电子设备,如手机、PC(PersonalComputer,个人计算机)、平板电脑等终端设备,也可以是服务器等设备,本申请实施例对此不作限定。
图4为本申请实施例提供的一种项目编译处理方法的流程图。如图4所示,包括如下步骤:
步骤S101、在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
其中,项目可以是特定操作系统下基于特定程序语言开发的应用程序,该特定操作系统可以是Android系统、Symbian系统、IOS系统等,该特定程序语言可以是Kotlin语言、Java语言、Scala语言等,在此本申请不作限定。该功能模块可以是应用程序的模块化组成部分,不同功能模块对应于不同的程序功能,每个功能模块包含各自的资源,开发人员在进行项目迭代更新时,可以对功能模块进行相关的资源变动,该资源变动可以是资源的添加、修改或删除,具体由开发人员根据项目变更需求进行适应性选择。该资源变动会触发该项目的编译流程,其中,该编译流程可以是相关项目编译的标准流程,例如,对应于Android项目开发的AGP(Android Gradle Plugin)流程等,本申请提供的方法基于该编译流程进行优化改进,保障编译过程的可靠性与稳定性的同时,提高该编译流程的编译效率。
在一个实施例中,功能模块可以对应设置有资源配置文件,该资源配置文件可以是记录该功能模块当前所有资源对应的资源标识,该资源标识可以是在代码中引用应用程序资源的唯一标识符,包含资源的类型、名称和包名等信息。以AAB架构下的Android项目为例,该Android项目可以包括Common模块、Util模块等多个模块,该Common模块对应的资源配置文件可以是其根目录下的moduleCommonR.txt文件,该Util模块对应的资源配置文件可以是其根目录下的moduleUtilR.txt文件,可选的,该资源配置文件的文件命名以及文件格式的不同由开发人员进行适应性设置,在此本申请不作限定。
在一个实施例中,对资源标识进行固定可以借助不同操作系统支持的应用程序的资源管理工具,以Android系统为例,可以选用AAPT1、AAPT2等工具,该工具可以根据项目中的资源文件的内容和结构动态生成资源标识,对于在应用程序中添加、修改或删除资源的行为,对应的资源标识也可以相应地更新,其中,资源标识的结构可以根据不同的工具有不同的定义。以选用AAPT2工具进行Common模块对应的资源标识固定为例,可以获取Common模块根目录下的moduleCommonR.txt文件对应的引用对象moduleCommonRFile,通过使用“--stable-ids”参数对已经编译过且未发生变化部分的资源标识进行固定,对应的操作如下:
aaptOptions.additionalParameters("--stable-ids","${moduleCommonRFile}")。
在完成资源标识的固定后,可以基于资源变动进行资源标识的增量变更,例如,对于添加资源的行为,可以增加对应的资源标识,对于删除资源的行为,可以删减对应的资源标识等。可选的,相对比图3的资源标识变更过程,图5为本申请实施例提供的一种通过固定资源标识进行增量变更的过程的示意图,如图5所示,原始资源配置文件中资源引用标识的排列为aaa=1、bbb=2、cca=3、ccb=4以及ccc=5,可以新增资源aac,在将资源aac更新到该资源配置文件之前,可以先将原有的部分进行固定,再将aac=6添加到该资源配置文件中,从而得到aaa=1、bbb=2、cca=3、ccb=4、ccc=5以及aac=6,新增资源不会按照字典序插入,也不会引起后续资源标识的顺位后移,而是直接添加到原有资源序列的尾部,有效减少因资源变动引起的资源标识引用变化,从而减少不必要的编译。当然,上述通过AAPT2工具进行资源标识的固定为示例性的说明,针对适应于不同操作系统的其它资源管理工具的适应性选择均在本申请的保护范围内。
步骤S102、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
其中,由于该编译流程中对应资源变动进行资源标识的更新得到的第一类型文件是无法识别增量变更的中间文件,因而,对于步骤S101中进行资源标识的固定后的增量变更部分也无法单独识别出来,需要额外向编译流程注入第一中间任务进行相应的文件解析,对于该第一中间任务的注入时机以及内容设置可以由开发人员进行适应性设置,本申请在此不作限定。以Android项目开发为示例,该编译流程可以是AGP(Android GradlePlugin)流程,通过Gradle工具可以实现第一中间任务向AGP流程的弹性注入,当然,还有其他系统项目对应的编译流程以及任务注入工具,在此本申请不作限定。
在一个实施例中,第一类型文件进行解析得到第二类型文件的解析方式,可以由开发人员根据不同项目的编译需求进行适应性选择。例如,可以将第一类型文件进行格式转换得到第二类型文件,该第二类型文件为可识别增量变更的中间文件。以图2所示的编译流程为示例,该编译流程应用于Kotlin语言进行Android项目开发,GenerateLibraryRFileTask对于Common模块对应的资源配置文件中的资源标识进行固定,并完成资源标识的增量变更会输出第一类型文件,即R.jar文件。Kotlin编译器无法增量识别该R.jar文件的变动。由此,图6为本申请实施例提供的一种包含第一类型文件进行解析得到第二类型文件的编译过程的示意图,在图2的基础上,如图6所示,在该编译流程中预先注入第一中间任务DecodeRJarTask,通过该DecodeRJarTask将GenerateLibraryRFileTask输出的R.jar文件转换为.class文件,Kotlin编译器可以可以通过该.class文件识别资源标识的增量变更。此外,该实施例仅将Kotlin编译器的输入改变为.class文件,其他利用R.jar文件作为输入的任务并没有变动,可以降低对于该编译流程的侵入,保持编译的稳定性和可靠性。
在一个实施例中,第一类型文件进行解析得到第二类型文件的解析方式,还可以是将第一类型文件的增量变更内容进行提取转换得到第二类型文件,该第二类型文件可以是仅记录资源标识的增量变更内容,该第二类型文件为可识别增量变更的中间文件。
当然,上述第一类型文件进行解析得到第二类型文件的解析方式为示例性的说明,针对适应于不同项目的其它解析方式的适应性调整均在本申请的保护范围内。
步骤S103、基于第二类型文件进行资源变动的增量编译。
其中,对应功能模块的资源变动进行资源标识的固定以及增量变更,以及对应解析得到可识别增量变更的第二类型文件,可以有效将该编译流程原本对应于该资源变动的全量编译转换为增量编译,而且对于该编译流程的侵入性低,达到优化该编译流程的有效作用。对于不同操作系统以及不同程序语言的编译流程可以由开发人员根据项目进行适应性选择,本申请在此不作限定。
由上述可知,通过在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,第一类型文件为编译流程中无法识别增量变更的中间文件;通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,第二类型文件为可识别增量变更的中间文件;基于第二类型文件进行资源变动的增量编译。上述方案中,通过将资源配置文件中的当前的资源标识进行固定,可以对已经编译引用过且未发生变化的资源标识进行提前锁定,便于针对该资源变动进行资源标识的增量生成,减少该资源配置文件的资源标识改动,避免因已有资源标识关联的代码引用引起全量编译,有利于针对该资源变动进行增量编译,通过向当前编译流程注入第一中间任务,可以将原有流程生成的第一类型文件进行解析得到增量变更可被识别的第二类型文件,因而针对该资源变动的增量变更可以被后续的编译任务识别,确保有效进行增量编译处理,提高项目开发的编译效率。
图7为本申请实施例提供的一种包含第一中间任务注入过程的项目编译处理方法的流程图,如图7所示,包括以下步骤:
步骤S201、在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
步骤S202、在监听到编译流程中生成第一类型文件的第二中间任务到达生命周期的完成状态的情况下,将第一中间任务注入编译流程。
其中,第二中间任务的生命周期可以是该第二中间任务在每次编译过程中从创建到完成所经历的各个阶段和状态,在监听到该第二中间任务到达生命周期的完成状态的情况下,可以指示该第二中间任务完成对应资源标识变更的第一类型文件的输出,因而可以作为将第一中间任务注入该编译流程的有效参考时机。当然,对于第一中间任务还可以设置其他注入时机能够保证在进行对应资源变动的增量编译之前完成即可,以图6所示的编译流程为例,第一中间任务DecodeRJarTask的注入时机的选择,需要保证在Kotlin编译器执行编译之前完成即可。对于该注入时机的适应性调整均在本申请的保护范围内。
步骤S203、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
步骤S204、基于第二类型文件进行资源变动的增量编译。
上述,通过监听第二中间任务的生命周期,可以确保在第二中间任务执行完成后注入第一中间任务,合理选择第一中间任务的注入时机,为编译流程新增用于解析文件的中间转换层,有效进行第一类型文件的解析处理。
图8为本申请实施例提供的一种包含第二类型文件中间存储过程的项目编译处理方法的流程图,如图8所示,包括以下步骤:
步骤S301、在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
步骤S302、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
步骤S303、将第二类型文件添加至功能模块的可识别编译路径中。
步骤S304、从可识别编译路径中读取第二类型文件。
其中,该可识别编译路径可以是编译过程中生成的中间文件的存储位置。第一类型文件生成后可以对应添加到功能模块的可识别编译路径中,第一中间任务可以接收该第一类型文件生成后的直接输入,也可以从该可识别编译路径中读取该第一类型文件,在此本申请不作限定。第一中间任务通过解析第一类型文件得到的第二类型文件可以直接输出进行编译处理,也可以对应添加到功能模块的可识别编译路径中,以供编译处理进行读取。
步骤S305、基于读取到的第二类型文件进行资源变动的增量编译。
上述,通过将第二类型文件添加至功能模块的可识别编译路径中,有效对于该第二类型文件进行缓存,便于编译处理进行读取调用,避免第二类型文件直接中转造成丢失,降低增量编译失败的风险,也有利于编译发生异常时进行中间过程分析。
图9为本申请实施例提供的一种包含基于全局开关变量确定是否优化编译的过程的项目编译处理方法的流程图,该编译流程设置有全局开关变量,如图9所示,包括以下步骤:
步骤S401、在项目的功能模块发生资源变动的情况下,在基于全局开关变量确定编译流程进行优化编译的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
其中,全局开关变量可以是用于确定该编译流程是否进行本申请提供的优化编译,可以通过对全局开关变量进行值变更决定编译流程当前是否进行优化编译,该优化编译可以是针对资源变动的增量编译,例如,可以对应设置全局开关变量的值为0和1,0对应于该编译流程进行非优化编译,1对应于该编译流程进行优化编译,当然还可以有其他值设置方式,在此本申请不作限定。在通过全局开关变量确定该编译流程进行优化编译的情况下,可以进行资源标识的固定和增量变更,以及启用预先注入编译流程的第一中间任务,达到增量编译的目的。在通过全局开关变量确定该编译流程进行非优化编译的情况下,可以执行该编译流程的原有编译处理。
可选的,在基于全局开关变量确定编译流程进行非优化编译的情况下,基于资源变动进行资源标识的非增量变更,基于非增量变更得到的文件进行全量编译。通过全局开关变量可以恢复为原有的编译流程,规避不可控因素引起的编译异常风险。
步骤S402、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
步骤S403、基于第二类型文件进行资源变动的增量编译。
上述,由于本申请提供的项目编译处理方法为基于编译流程的侵入改进,可能存在影响该编译流程的风险,可以通过设置全局开关变量,控制是否执行本申请提供的优化编译,有效避免外发构建编译的包受到不可控因素的影响,在该增量编译异常的情况下恢复为原有的编译流程,也可以对于优化编译带来的差异进行监控,提供比对优化编译以及非优化编译的控制选项,有利于对预期的增量编译进行效果检验。
图10为本申请实施例提供的一种包含生成功能模块对应资源配置文件的过程的项目编译处理方法的流程图,如图10所示,包括以下步骤:
步骤S501、在确定功能模块不存在资源配置文件的情况下,生成功能模块对应的资源配置文件,用于项目的增量编译。
其中,确定功能模块不存在资源配置文件,说明该功能模块未进行编译,需要对应生成资源配置文件,以用于项目的增量编译。以Android项目开发为示例,选用AAPT2工具进行资源标识管理,在确定Common模块根目录下不存在moduleCommonR.txt文件的情况下,需要在Common模块根目录下创建moduleCommonR.txt文件,并获取该文件的引用对象moduleCommonRFile,在首次编译过程中可以利用--emit-ids参数导出Common模块对应的所有资源标识,对应的操作如下:
aaptOptions.additionalParameters("--emit-ids","${moduleCommonRFile}")
此外,还可以记录下Common模块所有资源ID的引用,存储到项目的根目录下名为moduleNameR.txt中,以完成首次编译。
步骤S502、在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
步骤S503、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
步骤S504、基于第二类型文件进行资源变动的增量编译。
上述,通过判断功能模块是否存在资源配置文件,可以区分功能模式是否已完成首次编译,在不存在资源配置文件的情况下,可以对应生成资源配置文件以完成全量编译,记录对应的资源标识的引用,为功能模块发生资源变动提供增量编译的文件基础。
图11为本申请实施例提供的一种包含资源标识增量变更过程的项目编译处理方法的流程图,如图11所示,包括以下步骤:
步骤S601、在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,根据预先设置的资源编号规则对资源变动中的新增资源进行编号,和/或将资源变动中减少的资源进行删除,以得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
其中,预先设置的资源编号规则可以是对资源变更部分进行编号的参考规则。该资源编号规则可以是将新增资源在原有资源标识的基础上进行顺序编号,比如,原有资源标识的最后一个序号为6,那么新增资源的序号可以从7开始。该资源编号规则还可以是将以当前的新增资源为编号的起始序号,比如,将新增资源的序号设置为1。当然,前述资源编号规则为示例性说明,对于资源编号规则应用于不同应用场景的适应性调整均在本申请的保护范围内。
步骤S602、通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
步骤S603、基于第二类型文件进行资源变动的增量编译。
上述,通过对于新增资源的资源标识生成进行有效优化,可以减少第一类型文件的资源标识变动,进而减少资源标识的引用变更,避免引起该功能模块的全量编译,为保障增量编译提供可靠的文件基础。
图12为本申请实施例提供的一种项目编译处理装置的结构框图,该装置配置为执行上述实施例提供的项目编译处理方法,具备执行方法相应的功能模块和有益效果。如图12所示,该装置包括:
标识增量变更模块101,配置为在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件。
文件类型转换模块102,配置为通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件。
增量编译模块103,配置为基于第二类型文件进行资源变动的增量编译。
上述,通过在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,第一类型文件为编译流程中无法识别增量变更的中间文件;通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,第二类型文件为可识别增量变更的中间文件;基于第二类型文件进行资源变动的增量编译。上述方案中,通过将资源配置文件中的当前的资源标识进行固定,可以对已经编译引用过且未发生变化的资源标识进行提前锁定,便于针对该资源变动进行资源标识的增量生成,减少该资源配置文件的资源标识改动,避免因已有资源标识关联的代码引用引起全量编译,有利于针对该资源变动进行增量编译,通过向当前编译流程注入第一中间任务,可以将原有流程生成的第一类型文件进行解析得到增量变更可被识别的第二类型文件,因而针对该资源变动的增量变更可以被后续的编译任务识别,确保有效进行增量编译处理,提高项目开发的编译效率。
在一个可能的实施例中,还包括任务注入模块,配置为:
在监听到编译流程中生成第一类型文件的第二中间任务到达生命周期的完成状态的情况下,将第一中间任务注入编译流程。
在一个可能的实施例中,还包括文件添加模块,配置为:
在对第一类型文件进行解析得到第二类型文件之后,还包括:
将第二类型文件添加至功能模块的可识别编译路径中;
相应的,增量编译模块103,还配置为:
从可识别编译路径中读取第二类型文件;
基于读取到的第二类型文件进行资源变动的增量编译。
在一个可能的实施例中,编译流程设置有全局开关变量,标识增量变更模块101,还配置为:
在基于全局开关变量确定编译流程进行优化编译的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定。
在一个可能的实施例中,还包括全量编译模块,配置为:
在基于全局开关变量确定编译流程进行非优化编译的情况下,基于资源变动进行资源标识的非增量变更,基于非增量变更得到的文件进行全量编译。
在一个可能的实施例中,还包括配置文件生成模块,配置为:
在确定功能模块不存在资源配置文件的情况下,生成功能模块对应的资源配置文件,用于项目的增量编译。
在一个可能的实施例中,文件类型转换模块102,还配置为:
根据预先设置的资源编号规则对资源变动中的新增资源进行编号;和/或,将资源变动中减少的资源进行删除。
图13为本申请实施例提供的一种项目编译处理设备的结构示意图,如图13所示,该设备包括处理器201、存储器202、输入装置203和输出装置204;设备中处理器201的数量可以是一个或多个,图13中以一个处理器201为例;设备中的处理器201、存储器202、输入装置203和输出装置204可以通过总线或其他方式连接,图13中以通过总线连接为例。存储器202作为一种计算机可读存储介质,可配置为存储软件程序、计算机可执行程序以及模块,如本申请实施例中的项目编译处理方法对应的程序指令/模块。处理器201通过运行存储在存储器202中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的项目编译处理方法。输入装置203可配置为接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置204可包括显示屏等显示设备。
本申请实施例还提供一种包含计算机可执行指令的非易失性存储介质,计算机可执行指令在由计算机处理器执行时配置为执行一种上述实施例描述的项目编译处理方法,其中,包括:在项目的功能模块发生资源变动的情况下,将功能模块当前对应的资源配置文件中的资源标识进行固定,基于资源变动进行资源标识的增量变更得到第一类型文件,其中,第一类型文件为编译流程中无法识别增量变更的中间文件;通过预先注入编译流程的第一中间任务,对第一类型文件进行解析得到第二类型文件,其中,第二类型文件为可识别增量变更的中间文件;基于第二类型文件进行资源变动的增量编译。
值得注意的是,上述项目编译处理装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不配置为限制本申请实施例的保护范围。
在一些可能的实施方式中,本申请提供的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码配置为使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的方法中的步骤,例如,计算机设备可以执行本申请实施例所记载的项目编译处理方法。程序产品可以采用一个或多个可读介质的任意组合实现。

Claims (11)

1.一种项目编译处理方法,其特征在于,包括:
在项目的功能模块发生资源变动的情况下,将所述功能模块当前对应的资源配置文件中的资源标识进行固定,基于所述资源变动进行资源标识的增量变更得到第一类型文件,所述第一类型文件为编译流程中无法识别增量变更的中间文件;
通过预先注入编译流程的第一中间任务,对所述第一类型文件进行解析得到第二类型文件,所述第二类型文件为可识别增量变更的中间文件;
基于所述第二类型文件进行所述资源变动的增量编译。
2.根据权利要求1所述的项目编译处理方法,其特征在于,在所述通过预先注入所述当前编译流程的第一中间任务,对所述第一类型文件进行解析得到第二类型文件之前,还包括:
在监听到编译流程中生成所述第一类型文件的第二中间任务到达生命周期的完成状态的情况下,将第一中间任务注入所述编译流程。
3.根据权利要求1所述的项目编译处理方法,其特征在于,在所述对所述第一类型文件进行解析得到第二类型文件之后,还包括:
将所述第二类型文件添加至所述功能模块的可识别编译路径中;
相应的,所述基于所述第二类型文件进行所述资源变动的增量编译,包括:
从所述可识别编译路径中读取所述第二类型文件;
基于读取到的所述第二类型文件进行所述资源变动的增量编译。
4.根据权利要求1所述的项目编译处理方法,其特征在于,所述编译流程设置有全局开关变量,所述将所述功能模块当前对应的资源配置文件中的资源标识进行固定,包括:
在基于所述全局开关变量确定所述编译流程进行优化编译的情况下,将所述功能模块当前对应的资源配置文件中的资源标识进行固定。
5.根据权利要求4所述的项目编译处理方法,其特征在于,还包括:在基于所述全局开关变量确定所述编译流程进行非优化编译的情况下,基于所述资源变动进行资源标识的非增量变更,基于所述非增量变更得到的文件进行全量编译。
6.根据权利要求1-5中任一项所述的项目编译处理方法,其特征在于,在所述将所述功能模块当前对应的资源配置文件中的资源标识进行固定之前,还包括:
在确定所述功能模块不存在资源配置文件的情况下,生成所述功能模块对应的资源配置文件,用于所述项目的增量编译。
7.根据权利要求1-5中任一项所述的项目编译处理方法,其特征在于,所述基于所述资源变动进行资源标识的增量变更,包括:
根据预先设置的资源编号规则对所述资源变动中的新增资源进行编号;和/或,
将所述资源变动中减少的资源进行删除。
8.一种项目编译处理装置,其特征在于,包括:
标识增量变更模块,配置为在项目的功能模块发生资源变动的情况下,将所述功能模块当前对应的资源配置文件中的资源标识进行固定,基于所述资源变动进行资源标识的增量变更得到第一类型文件,所述第一类型文件为编译流程中无法识别增量变更的中间文件;
文件类型转换模块,配置为通过预先注入编译流程的第一中间任务,对所述第一类型文件进行解析得到第二类型文件,所述第二类型文件为可识别增量变更的中间文件;
增量编译模块,配置为基于所述第二类型文件进行所述资源变动的增量编译。
9.一种项目编译处理设备,所述设备包括:一个或多个处理器;存储装置,配置为存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现权利要求1-7中任一项所述的项目编译处理方法。
10.一种存储计算机可执行指令的非易失性存储介质,所述计算机可执行指令在由计算机处理器执行时配置为执行权利要求1-7中任一项所述的项目编译处理方法。
11.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7中任一项所述的项目编译处理方法。
CN202311803664.7A 2023-12-25 2023-12-25 项目编译处理方法、装置、设备、存储介质及程序产品 Pending CN117950672A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311803664.7A CN117950672A (zh) 2023-12-25 2023-12-25 项目编译处理方法、装置、设备、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311803664.7A CN117950672A (zh) 2023-12-25 2023-12-25 项目编译处理方法、装置、设备、存储介质及程序产品

Publications (1)

Publication Number Publication Date
CN117950672A true CN117950672A (zh) 2024-04-30

Family

ID=90797420

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311803664.7A Pending CN117950672A (zh) 2023-12-25 2023-12-25 项目编译处理方法、装置、设备、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN117950672A (zh)

Similar Documents

Publication Publication Date Title
US10303490B2 (en) Apparatus and method for optimizing startup of embedded system
CN107451474B (zh) 用于终端的软件漏洞修复方法和装置
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
CN109388403B (zh) 依赖注入方法、装置、设备和存储介质
CN110990019B (zh) 一种Java类分析方法、装置、存储介质及电子设备
US20080082967A1 (en) Method and system for parameter profile compiling
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
JP5213671B2 (ja) テストケースの選択方法及び選択システム
CN111158741B (zh) 监控业务模块对第三方类库依赖关系变化的方法及装置
US10579513B2 (en) Test run control method and apparatus
CN115686631B (zh) 一种基于知识基的随机指令生成方法、装置及存储介质
CN109933410B (zh) 一种基于虚拟化技术的虚拟指令下发方法及系统
US20110029953A1 (en) System and Method for Scalable Handling of Debug Information
CN115640037A (zh) 程序更新方法和装置
CN111679852A (zh) 一种冲突依赖库的检测方法及装置
CN111880804A (zh) 应用程序代码的处理方法及装置
CN117950672A (zh) 项目编译处理方法、装置、设备、存储介质及程序产品
CN111625225A (zh) 一种程序指定数据输出方法和装置
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
CN115168175A (zh) 程序错误解决方法、装置、电子设备和存储介质
CN116501596A (zh) 应用程序的测试方法及装置
CN113568834A (zh) Sdk代码的兼容性检测方法、装置、计算机设备和介质
CN112527265A (zh) 一种日志自动注入的方法和计算机设备
CN112953721A (zh) 一种ipa文件的解析方法、装置、设备及存储介质

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