CN117992052A - 应用程序编译方法及装置 - Google Patents

应用程序编译方法及装置 Download PDF

Info

Publication number
CN117992052A
CN117992052A CN202211339896.7A CN202211339896A CN117992052A CN 117992052 A CN117992052 A CN 117992052A CN 202211339896 A CN202211339896 A CN 202211339896A CN 117992052 A CN117992052 A CN 117992052A
Authority
CN
China
Prior art keywords
compiling
engineering
application program
cache
file
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
CN202211339896.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.)
Douyin Vision Co Ltd
Original Assignee
Douyin Vision 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 Douyin Vision Co Ltd filed Critical Douyin Vision Co Ltd
Priority to CN202211339896.7A priority Critical patent/CN117992052A/zh
Publication of CN117992052A publication Critical patent/CN117992052A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本公开涉及一种应用程序编译方法及装置,其中,该方法包括:响应依赖安装指令启动目标插件,通过目标插件部署缓存系统以及向待构建的应用程序中注入缓存配置;缓存配置指示缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;通过应用开发工具对应用程序的工程文件进行编译时,调用第一编译工具查询缓存系统是否包含应用程序对应的工程文件的编译结果;若包含,则从缓存系统获取工程文件编译结果;若不包含,则调用应用程序开发工具提供的第二编译工具对工程文件进行编译得到编译结果。通过目标插件自动完成缓存配置用于调用缓存系统中已存在的编译结果,提高了编译效率,且该过程用户无感知,用户体验较好。

Description

应用程序编译方法及装置
技术领域
本公开涉及计算机技术领域,尤其涉及一种应用程序编译方法及装置。
背景技术
在构建应用程序时需要执行应用程序编译,编译的目的是将高级语言编写的源程序代码转换成机器可识别并执行的二进制代码。为了能够提高编译效率,应用程序开发工具支持复用编译结果,编译结果通常存储在缓存系统中,在进行编译时调用缓存系统获得已存在的编译结果。然而,目前调用缓存系统需要应用程序开发者在构建应用程序时手动修改应用程序的工程配置文件,由于工程配置文件数量较多,手动修改容易出错,且效率极低。
发明内容
为了解决上述技术问题,本公开提供了一种应用程序编译方法及装置。
第一方面,本公开提供了一种应用程序编译方法,包括:
响应依赖安装指令启动目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,以将所述缓存系统嵌入应用程序开发工具;所述缓存配置指示所述缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;
通过所述应用程序开发工具对所述应用程序的工程文件进行编译时,调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果;
若包含,则从所述缓存系统获取所述工程文件的编译结果;
若不包含,则调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
在一些实施例中,所述响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,包括:
在第一配置文件所在目录下获取所述依赖安装指令;所述第一配置文件用于描述所述应用程序的依赖项;
响应所述依赖安装指令,安装所述第一配置文件描述的依赖项进行工程集成,并在工程集成阶段启动所述目标插件,通过所述目标插件部署所述缓存系统以及向所述应用程序对应的工程配置文件中注入缓存配置。
在一些实施例中,所述响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置之前,还包括:
在第二配置文件所在目录下获取插件安装指令;所述第二配置文件用于描述构建所述应用程序所需的插件;
响应所述插件安装指令,安装所述第二配置文件描述的各插件,所述第二配置文件描述的插件包括所述目标插件。
在一些实施例中,所述调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果,包括:
获取所述工程文件的编译结果的标识;
调用所述第一编译工具基于所述编译结果的标识与所述缓存系统中存储的各编译结果的标识进行匹配得到匹配结果,基于所述匹配结果确定所述缓存系统是否包含所述工程文件的编译结果。
在一些实施例中,所述获取所述工程文件的编译结果的标识,包括:
根据所述工程文件、所述工程文件关联的工程配置文件中的一项或多项,确定输入参数;
对所述输入参数进行哈希计算得到哈希值,所述哈希值为所述编译结果的标识。
在一些实施例中,所述缓存系统包括:在执行应用程序开发的电子设备上管理的缓存和云端缓存;所述调用所述第一编译工具查询缓存系统是否包含所述应用程序对应的工程文件的编译结果,包括:
调用所述第一编译工具在所述电子设备的缓存中查询是否包含所述工程文件的编译结果;若包含,则从所述电子设备的缓存中读出所述编译结果;
若不包含,则调用所述第一编译工具查询所述云端缓存是否包含所述工程文件的编译结果。
在一些实施例中,所述调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果之后,还包括:将所述工程文件的编译结果上传至所述缓存系统的云端缓存中进行存储。
第二方面,本公开提供了一种应用程序编译装置,包括:
第一处理模块,用于响应依赖安装指令启动目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,以将所述缓存系统嵌入应用程序开发工具;所述缓存配置指示所述缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;
第二处理模块,用于通过所述应用程序开发工具对所述应用程序的工程文件进行编译时,调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果;以及,在所述缓存系统包含编译结果时,从所述缓存系统获取所述工程文件的编译结果;
本地编译模块,用于在所述缓存系统不包含编译结果时,调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
第三方面,本公开提供了一种电子设备,包括:存储器和处理器;
存储器被配置为存储计算机程序指令;处理器被配置为执行所述计算机程序指令,使得所述电子设备实现如第一方面以及第一方面任一项所述的应用程序编译方法。
第四方面,本公开提供一种可读存储介质,包括:计算机程序指令,电子设备的至少一个处理器执行所述计算机程序指令,使得所述电子设备实现如第一方面以及第一方面任一项所述的应用程序编译方法。
第五方面,本公开提供一种计算机程序产品,电子设备运行所述计算机程序产品,使得所述电子设备实现如第一方面以及第一方面任一项所述的应用程序编译方法。
本公开实施例提供一种应用程序编译方法及装置,其中,该方法包括:响应依赖安装指令启动目标插件,通过目标插件部署缓存系统以及向待构建的应用程序中注入缓存配置,以将缓存系统嵌入应用程序开发工具中;缓存配置指示缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;响应于对应用程序的编译命令,调用第一编译工具查询缓存系统是否包含应用程序对应的工程文件的编译结果;若包含,则从缓存系统获取工程文件编译结果;若不包含,则调用应用程序开发工具提供的第二编译工具对工程文件进行编译得到相应的编译结果。本公开通过目标插件自动完成缓存配置,以在编译阶段复用缓存系统中已存在的编译结果,提高了编译效率以及应用程序开发效率,且自动修改保证缓存配置注入不会出现错误;此外,该过程可以在用户无感知的情况下自动执行,无需用户输入任何操作,用户体验较好。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有的构建应用程序的流程示意图;
图2为本公开一实施例提供的应用程序编译方法的流程示意图;
图3为本公开示例性示出的应用程序编译方法的架构示意图;
图4为本公开一实施例提供的应用程序编译方法的流程示意图;
图5为本公开的应用程序编译方法应用于构建应用程序时的整体流程示意图;
图6为本公开一实施例提供的应用程序编译装置的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
图1为现有的构建应用程序的流程示意图,参与图1所示,主要过程如下:首先下载应用程序的源代码,源代码包括工程文件以及配置文件,然后通过安装相关插件搭建运行环境,再进行工程集成,其中,搭建运行环境以及进行工程集成依赖前述下载的配置文件完成。之后,开发者可以在应用程序开发工具中完成程序开发,例如,增加功能、删除功能、优化功能等等,并使用应用程序开发工具进行构建。在构建过程中,应用程序开发工具会自动生成编译命令,并响应编译命令调用应用程序开发工具提供的原生编译器生成编译结果。
在构建应用程序时,一些应用程序开发工具可以通过访问应用程序开发工具自带的缓存系统实现编译结果复用,例如,Xcode自带缓存系统,但是这类缓存系统中存储的编译结果被限制在同一个工程中复用;还有一些应用程序开发工具可以通过访问独立部署的本地缓存系统(如Ccache)、分布式缓存系统或者其他类型的缓存系统实现编译结果复用,这解决了编译结果跨工程以及跨机器复用的问题,然而,这需要较高的人力成本,开发者每次更新代码,重新生成工程文件后都需要手动修改大量的工程配置文件才能接入缓存系统,编译效率极其低。
为了提高编译效率以及构建应用程序效率,本公开提供一种应用程序编译方法及装置,通过提供插件,利用插件自动向应用程序中注入缓存配置,使得应用程序开发工具在编译应用程序的工程文件时由缓存系统接管编译任务查询缓存系统是否有可用的编译结果,如有可用的编译结果,则可以复用现有编译结果跳过编译过程。本公开中,注入缓存配置的过程由插件完成无需用户手动修改工程配置文件,且可以最大限度实现编译结果复用,适用于跨工程、跨机器复用,提升编译效率。
示例性地,本公开提供的应用程序编译方法可以由本公开提供的应用程序编译装置实现,应用程序编译装置可以通过任意的软件和/或硬件的方式实现。示例性地,应用程序编译装置可以但不限于为:平板电脑、台式电脑、手机(如折叠屏手机、大屏手机等)、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等,本公开对电子设备的具体类型不作任何限制。
图2为本公开一实施例提供的应用程序编译方法的流程图。下述实施例中以电子设备实现本公开的方法为例进行举例说明。请参阅图2所示,本实施例的方法包括:
S201、响应依赖安装指令启动目标插件,通过所述目标插件部署缓存系统以及向应用程序中注入缓存配置,以将缓存系统嵌入应用程序开发工具;其中,缓存配置指示缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具。
可以从远程代码仓库中下载需要开发的应用程序的源代码或者从电子设备的磁盘中获取需要开发的应用程序的源代码,其中,源代码可以包括主工程文件、应用程序包括的各组件对应的工程文件、工程文件对应的工程配置文件、描述应用程序的依赖项的第一配置文件、用于描述构建应用程序所需的插件的第二配置文件等等。
其中,通过应用程序开发工具进行开发的应用程序可以为任意类型的应用程序,例如,图像处理类应用程序、浏览器、文件类应用程序、视频类应用程序等等,本公开对于待开发的应用程序不做限定。
结合图1所示的开发流程可知,获取源代码之后,需要搭建运行环境,若在电子设备中针对应用程序进行过构建,则运行环境在上一次构建时便已搭建完成,若本次构建与上一次构建所需的运行环境是一致的,则可以跳过运行环境搭建这一步;若运行环境发生了变化或者未搭建过运行环境,则需要基于源代码中的配置文件搭建运行环境。其中,所需运行环境是否发生变化可以根据配置文件中描述的构建应用程序所需的插件的信息是否发生变化确定,例如,插件的版本不同、有新增的插件等等情况均可以认为是所需运行环境发生了变化。
其中,搭建运行环境可以通过在第二配置文件所在目录下启动电子设备的操作系统提供的终端,向该终端输入插件安装指令,使得该终端响应插件安装指令安装第二配置文件声明的各插件,其中包括安装本公开提供的目标插件。
在运行环境搭建完成之后,通过在第一配置文件所在目录下启动电子设备的操作系统提供的终端,向该终端输入插件安装指令,该终端响应依赖安装指令,安装第一配置文件声明的依赖项进行工程集成,并在工程集成阶段,通过运行目标插件部署缓存系统,之后,读取工程信息获取应用程序包括的一个或多个组件对应的工程配置文件,向各所述一个或多个组件对应的工程配置文件中分别注入缓存配置,通过注入缓存配置指示应用程序开发工具在编译应用程序对应的工程文件时首先由缓存系统接管编译任务,调用缓存系统提供的第一编译工具得到相应的编译结果。
S202、通过应用程序开发工具对应用程序的工程文件进行编译时,调用第一编译工具查询缓存系统是否包含应用程序对应的工程文件的编译结果。
完成工程集成之后,开发者可以通过电子设备中的应用程序开发工具完成程序代码开发,之后可以通过操作应用程序开发工具提供的构建按钮启动构建流程,构建通常包括预处理、编译、汇编、链接以及加载这几个阶段,在编译阶段,应用程序开发工具会自动生成每个工程文件对应的编译任务,并自动执行编译任务。
需要说明的是,应用程序通常会包括多个工程文件,在编译阶段,应用程序开发工具会针对每个工程文件启动一个编译任务,生成相应的编译命令,电子设备可根据数据处理能力以及应用程序开发工具的配置依次执行多个编译任务或者并行执行多个编译任务。如图3所示,应用程序包括:主工程文件和N个不同组件的工程文件,每个工程文件有相应的工程配置文件,应用程序开发工具可基于文件的格式识别工程文件,例如识别“.m”格式的文件为工程文件,触发编译任务生成针对每个工程文件的编译命令。
由于预先在各工程文件对应的工程配置文件中注入了缓存配置,因此,电子设备会响应编译命令基于工程配置文件调用第一编译工具判断是否有可用的编译结果复用。
作为一种可能的实施方式,电子设备可以基于当前的编译任务计算出指向编译结果的标识,通过编译结果的标识在缓存系统中查询确定是否有匹配成功的编译结果,若包含,则执行步骤S203,若不包含,则执行步骤S204。
示例性地,可以根据当前编译任务的输入物料,如工程文件、工程文件依赖的工程配置文件、以及一些其他依赖等等,确定输入参数,输入参数可以且不限于包括工程文件中涉及的编译参数的相关信息、编译方式的信息等等,利用哈希算法对输入参数进行计算得到哈希值,将哈希值与缓存系统中存储的各编译结果的标识进行匹配。采用哈希算法实现时,在编译参数以及编译方式不变的情况下,相同的编译任务能够得到相同的哈希值,在缓存系统中采用哈希值作为编译结果的标识以及利用哈希值进行匹配,相当于是对编译结果和工程文件进行了一次一致性校验,避免出现错误。作为一种可能的实施方式,在缓存系统中可将各编译结果的标识维护在数据表中,当需要查询时,将接收到的哈希值与数据表中的数据项逐个进行匹配。
应理解,指向编译产物的标识并不限于通过哈希算法实现,也可以是通过对输入参数采用其他算法实现,例如,将多个输入参数分别映射为固定长度的字段,之后再将多个固定长度的字段进行拼接作为指向编译结果的标识以及缓存系统中存储的编译结果的标识。
缓存系统可以是分布式系统,包括多个缓存节点,例如,缓存系统包括部署在执行应用程序构建的电子设备的缓存以及云端缓存,可以先缓存系统管理的电子设备的缓存中查询,如不存在,再在云端缓存中进行查询。
缓存系统可以采用非分布式系统实现,也可以无需在电子设备中查询,直接访问部署在服务器中的缓存系统进行查询。
S203、从缓存系统获取所述工程文件的编译结果。
当编译结果的标识命中电子设备的缓存,则从电子设备的缓存中读取编译结果使用。当编译结果的标识命中云端缓存,则可通过电子设备的网络接口访问云端缓存,从云端缓存中下载工程文件的编译结果进行复用。
S204、调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
第二编译工具为应用程序开发工具提供的原生编译器,在缓存系统中无编译结果可复用时,在电子设备本地执行编译任务得到编译结果。
本实施例的方法中,部署缓存系统以及注入缓存配置的过程由插件自动完成无需用户手动修改工程配置文件,且可以最大限度实现编译结果复用,适用于跨工程、跨机器复用,提升编译效率。
此外,在团队开发应用程序过程中,由开发人员在应用程序的第二配置文件中添加关于目标插件的声明代码,在第一配置文件中添加关于执行目标插件的代码,即可实现接入本公开提供的应用程序编译方法,开发人员可将配置文件添加在源代码中提交至远程代码仓库,则任一开发者从远程代码仓库中的下载应用程序的源代码进行程序开发,则可以无感知地采用本公开的方法进行应用程序编译,最大限度地实现跨工程、跨机器复用已有的编译结果。相比而言,在第一和第二配置文件中添加的代码量与采用传统方式手动修改工程配置文件接入缓存系统的工作相比,前者工作量更小,效率更高。
图4为本公开另一实施例提供的应用程序编译方法的流程图。请参阅图4所示,本实施例的方法在图2所示实施例的基础上,步骤S204之后,还包括:
S205、将所述工程文件的编译结果上传至缓存系统管理的云端缓存进行存储。
电子设备可以通过网络接口向缓存系统管理的云端缓存上传工程文件的编译结果以及相应的标识,或者,电子设备也可以上传编译结果以及计算编译结果的参数,由云端缓存采用与电子设备中所采用的相同算法计算编译结果的标识;之后,云端缓存将存储编译结果以及相应的标识,供后续进行应用程序开发可以复用编译结果,提升编译效率。需要说明的是,各编译任务的编译结果在缓存系统在电子设备上管理的缓存中也会进行存储。
在一个具体实施例中,假设开发者使用Xcode进行iOS应用程序(以下称为应用1)构建,整体流程可以如图5所示。其中,Xcode是应用程序的集成开发环境,用于开发macOS、iPadOS、WatchOS和tvOS的应用程序。
请参阅图5,可以包括下述步骤:
步骤a、源代码下载。其中,开发者可以从远程代码仓库中下载应用1对应的源代码使用或者使用本地已有的源代码,源代码中包括Gemfile文件和Podfile文件。Gemfile文件中声明了构建应用程序1所需的插件,Podfile文件中声明了应用1的依赖项。
步骤b、运行环境准备。其中,电子设备可以通过执行bundle install命令,安装Gemfile文件中声明的插件,安装的插件中包含本公开提供目标插件,Cocoapods插件。其中,Cocoapods插件是Xcode工程的依赖管理和项目集成工具。
步骤c、工程集成。其中,电子设备可以通过在Podfile文件所在目录下调用电子设备的操作系统提供的终端,并输入bundle exe pod install命令,以在Podfile文件所在目录执行bundle exe pod install命令,按照Podfile文件的声明,进行工程集成。工程集成阶段,自动运行Cocoapods插件,部署缓存系统,并读取需要进行程序开发的应用程序的工程信息,向其中的工程配置文件中注入缓存配置,使得缓存系统提供的编译工具C-clang替代Xcode提供的原生编译工具clang,作为Xcode执行编译任务时优先调用的编译工具。
步骤d、程序开发以及应用程序构建。开发者在Xcode中进行程序开发(即编码)以及通过点击Xcode提供的构建按钮触发构建,其中,在构建时,Xcode会自动生成编译命令并调用编译工具C-clang查询是否有可复用的编译结果。其中,Xcode会先根据待编译的工程文件、相关的工程配置文件中提取特征参数,作为哈希算法的输入参数,计算指向编译结果的哈希值;基于哈希值可以先查询缓存系统在电子设备上管理的缓存中是否有匹配的编译结果;如有,则直接读取使用;如没有,则查询缓存系统管理的云端缓存中是否包含相匹配的编译结果,如有,则从云端缓存直接下载使用,如没有,则调用clang进行编译。
步骤e、编译结果上传。其中,在一次工程构建结束之后,Xcode可以通过电子设备将编译结果以及编译结果的哈希值上传至缓存系统的云端缓存中进行存储,以便下次构建或者其他开发者构建可以直接复用本次的编译结果。
通过上述方法能够有效提高应用程序编译效率以及构建效率,在应用程序版本迭代更新过程中,能够大大减小开发者的工作量。
图6为本公开一实施例提供的应用程序编译装置的结构示意图。
请参阅图6所示,本实施例提供的装置600包括:
第一处理模块601,用于响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,以将所述缓存系统嵌入应用程序开发工具;所述缓存配置指示所述缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具。
第二处理模块602,用于通过所述应用程序开发工具对所述应用程序的工程文件进行编译时,调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果;以及,在所述缓存系统包含编译结果时,从所述缓存系统获取所述工程文件的编译结果。
本地编译模块603,用于在所述缓存系统不包含编译结果时,调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
在一些实施例中,第一处理模块601,具体用于在第一配置文件所在目录下获取所述依赖安装指令;所述第一配置文件用于描述所述应用程序的依赖项;响应所述依赖安装指令,安装所述第一配置文件描述的依赖项进行工程集成,并在工程集成阶段启动所述目标插件,通过所述目标插件部署所述缓存系统以及向所述应用程序对应的工程配置文件中注入缓存配置。
在一些实施例中,响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置之前,第一处理模块601,还用于在第二配置文件所在目录下获取插件安装指令;所述第二配置文件用于描述构建所述应用程序所需的插件;响应所述插件安装指令,安装所述第二配置文件描述的各插件,所述第二配置文件描述的插件包括所述目标插件。
在一些实施例中,第二处理模块602,具体用于获取所述工程文件的编译结果的标识;调用第一编译工具基于所述编译结果的标识与所述缓存系统中存储的各编译结果的标识进行匹配得到匹配结果,基于所述匹配结果确定所述缓存系统是否包含所述工程文件的编译结果。
在一些实施例中,第二处理模块602,具体用于根据所述工程文件、所述工程文件关联的工程配置文件中的一项或多项,确定输入参数;对所述输入参数进行哈希计算得到哈希值,所述哈希值为所述编译结果的标识。
在一些实施例中,装置600还包括:上传模块604,用于在应用程序构建完成之后,将工程文件的编译结果上传至缓存系统管理的云端缓存中进行存储。
本实施例提供的装置可以用于执行前述任一方法实施例的技术方案,其实现原理以及技术效果类似,可参照前述方法实施例的详细描述,简明起见,此处不再赘述。
示例性地,本公开提供一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中一个或多个计算机程序被存储在存储器中;一个或多个处理器在执行一个或多个计算机程序时,使得电子设备实现前文实施例的应用程序编译方法。
示例性地,本公开提供一种芯片系统,芯片系统应用于包括存储器和传感器的电子设备;芯片系统包括:处理器;当处理器执行前文实施例的应用程序编译方法。
示例性地,本公开提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器使得电子设备执行时实现前文实施例的应用程序编译方法。
示例性地,本公开提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行前文实施例的应用程序编译方法。
在上述实施例中,全部或部分功能可以通过软件、硬件、或者软件加硬件的组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本公开实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (11)

1.一种应用程序编译方法,其特征在于,包括:
响应依赖安装指令启动目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,以将所述缓存系统嵌入应用程序开发工具;所述缓存配置指示所述缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;
通过所述应用程序开发工具对所述应用程序的工程文件进行编译时,调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果;
若包含,则从所述缓存系统获取所述工程文件的编译结果;
若不包含,则调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
2.根据权利要求1所述的方法,其特征在于,所述响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,包括:
在第一配置文件所在目录下获取所述依赖安装指令;所述第一配置文件用于描述所述应用程序的依赖项;
响应所述依赖安装指令,安装所述第一配置文件描述的依赖项进行工程集成,并在工程集成阶段启动所述目标插件,通过所述目标插件部署所述缓存系统以及向所述应用程序对应的工程配置文件中注入缓存配置。
3.根据权利要求1所述的方法,其特征在于,所述响应依赖安装指令启动所述目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置之前,还包括:
在第二配置文件所在目录下获取插件安装指令;所述第二配置文件用于描述构建所述应用程序所需的插件;
响应所述插件安装指令,安装所述第二配置文件描述的各插件,所述第二配置文件描述的插件包括所述目标插件。
4.根据权利要求1所述的方法,其特征在于,所述调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果,包括:
获取所述工程文件的编译结果的标识;
调用所述第一编译工具基于所述编译结果的标识与所述缓存系统中存储的各编译结果的标识进行匹配得到匹配结果,基于所述匹配结果确定所述缓存系统是否包含所述工程文件的编译结果。
5.根据权利要求4所述的方法,其特征在于,所述获取所述工程文件的编译结果的标识,包括:
根据所述工程文件、所述工程文件关联的工程配置文件中的一项或多项,确定输入参数;
对所述输入参数进行哈希计算得到哈希值,所述哈希值为所述编译结果的标识。
6.根据权利要求1所述的方法,其特征在于,所述缓存系统包括:执行应用程序开发的电子设备上管理的缓存和云端缓存;所述调用所述第一编译工具查询缓存系统是否包含所述应用程序对应的工程文件的编译结果,包括:
调用所述第一编译工具在所述电子设备的缓存中查询是否包含所述工程文件的编译结果;若包含,则从所述电子设备的缓存中读出所述编译结果;
若不包含,则调用所述第一编译工具查询所述云端缓存是否包含所述工程文件的编译结果。
7.根据权利要求1所述的方法,其特征在于,所述调用应用程序构建系统提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果之后,还包括:
将所述工程文件的编译结果上传至所述缓存系统的云端缓存中进行存储。
8.一种应用程序编译装置,其特征在于,包括:
第一处理模块,用于响应依赖安装指令启动目标插件,通过所述目标插件部署缓存系统以及向应用程序对应的工程配置文件中注入缓存配置,以将所述缓存系统嵌入应用程序开发工具;所述缓存配置指示所述缓存系统提供的第一编译工具为编译应用程序的工程文件时调用的编译工具;
第二处理模块,用于通过所述应用程序开发工具对所述应用程序的工程文件进行编译时,调用所述第一编译工具查询所述缓存系统是否包含所述应用程序对应的工程文件的编译结果;以及,在所述缓存系统包含编译结果时,从所述缓存系统获取所述工程文件的编译结果;
本地编译模块,用于在所述缓存系统不包含编译结果时,调用应用程序开发工具提供的第二编译工具对所述工程文件进行编译得到所述工程文件的编译结果。
9.一种电子设备,其特征在于,包括:存储器和处理器;
存储器被配置为存储计算机程序指令;
所述处理器被配置为执行所述计算机程序指令,使得所述电子设备实现如权利要求1至7任一项所述的应用程序编译方法。
10.一种可读存储介质,其特征在于,包括:计算机程序指令;
电子设备的至少一个处理器执行所述计算机程序指令,使得所述电子设备实现如权利要求1至7任一项所述的应用程序编译方法。
11.一种计算机程序产品,其特征在于,电子设备运行所述计算机程序产品,使得所述电子设备实现如权利要求1至7任一项所述的应用程序编译方法。
CN202211339896.7A 2022-10-27 2022-10-27 应用程序编译方法及装置 Pending CN117992052A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211339896.7A CN117992052A (zh) 2022-10-27 2022-10-27 应用程序编译方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211339896.7A CN117992052A (zh) 2022-10-27 2022-10-27 应用程序编译方法及装置

Publications (1)

Publication Number Publication Date
CN117992052A true CN117992052A (zh) 2024-05-07

Family

ID=90892132

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211339896.7A Pending CN117992052A (zh) 2022-10-27 2022-10-27 应用程序编译方法及装置

Country Status (1)

Country Link
CN (1) CN117992052A (zh)

Similar Documents

Publication Publication Date Title
US10795660B1 (en) Live code updates
CN108027722B (zh) 在编译和部署中动态更新应用
US8738589B2 (en) Classloading technique for an application server that provides dependency enforcement
JP5518085B2 (ja) ランタイムにおいて生成したコードのキャッシュへの格納
EP4095677A1 (en) Extensible data transformation authoring and validation system
CN110187910B (zh) 一种热更新方法、装置、设备及计算机可读存储介质
US20140109106A1 (en) Code dependency calculation
JP2005509194A (ja) プレインターナライズ済プログラムファイルの作成及び使用のための方法並びに装置
CN113064595B (zh) 一种基于Docker镜像的QT应用程序编译方法和装置
US9841953B2 (en) Pluggable components for runtime-image generation
US20190114165A1 (en) Using semantic annotations to control compatibility behaviors
US9009667B2 (en) Application server that supports multiple component models
CN111857765B (zh) 用于药物设计系统的插件系统及其生成方法和更新方法
CN111061638A (zh) 一种iOS系统调试的方法、装置及服务器
US20040083467A1 (en) System and method for executing intermediate code
CN111857801A (zh) 一种移动应用的构建方法
CN114588638A (zh) 基于Lua语言进行游戏开发的方法及程序开发装置
CN108694049B (zh) 一种更新软件的方法和设备
CN102364433A (zh) 在ARM处理器上实现Wine构建工具移植的方法
CN112748905B (zh) 基础库的初始化调用方法、装置、电子设备及存储介质
CN108536444B (zh) 插件编译方法、装置、计算机设备和存储介质
CN114490103A (zh) 一种操作系统接口调用方法、装置以及电子设备
CN113360156B (zh) 一种ios编译方法及相关设备
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
US10552135B1 (en) Reducing a size of an application package

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication