CN111240689B - 应用程序的构建方法、装置、设备及存储介质 - Google Patents

应用程序的构建方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111240689B
CN111240689B CN202010030857.3A CN202010030857A CN111240689B CN 111240689 B CN111240689 B CN 111240689B CN 202010030857 A CN202010030857 A CN 202010030857A CN 111240689 B CN111240689 B CN 111240689B
Authority
CN
China
Prior art keywords
component
compiling
folder
compiled
cache
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.)
Active
Application number
CN202010030857.3A
Other languages
English (en)
Other versions
CN111240689A (zh
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 Huya Technology Co Ltd
Original Assignee
Guangzhou Huya 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 Huya Technology Co Ltd filed Critical Guangzhou Huya Technology Co Ltd
Priority to CN202010030857.3A priority Critical patent/CN111240689B/zh
Publication of CN111240689A publication Critical patent/CN111240689A/zh
Application granted granted Critical
Publication of CN111240689B publication Critical patent/CN111240689B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • 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

Abstract

本发明实施例公开了一种应用程序的构建方法、装置、设备及存储介质,所述方法包括:获取与待构建的应用程序匹配的组件源码,并根据所述组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;根据所述组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在所述待编译组件中识别已缓存组件和未缓存组件;从所述组件编译缓存中获取与所述已缓存组件对应的缓存编译结果;根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序。本发明实施例的技术方案,通过组件编译缓存,实现了只需增量编译即可完成应用程序的构建,提高了应用程序的构建速度。

Description

应用程序的构建方法、装置、设备及存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种应用程序的构建方法、装置、设备及存储介质。
背景技术
随着源文件数量的增加,应用程序的构建耗时普遍较长。在业界里,由于稳定性等原因,不建议在构建生成安装包的过程使用缓存,即每次构建都是全量的编译,所以编译时间会随着源文件增加而线性增加。
目前,提高应用程序构建速度的方法包括以下两种:一种是直接下载编译后的组件二进制文件,使得应用程序构建时无需再次编译,这种方法虽然提高编译速度,但是存在严重减慢下载速度、开发者无法进行源码调试、组件二进制的维护成本较大等缺点;另一种是在全量编译之前,根据版本号更新先对组件进行预编译,将预编译的产物加入缓存以便下次直接使用,在所有组件预编译完成之后集成到工程进行链接编译。这种方法虽然可以实现增量编译,提高编译速度,但对每个组件进行预编译的总耗时很长,还需要人工维护组件版本号,有一定的维护成本。
发明内容
本发明实施例提供一种应用程序的构建方法、装置、设备及存储介质,通过组件编译缓存,实现了只需增量编译即可完成应用程序的构建,提高了应用程序的构建速度。
第一方面,本发明实施例提供了一种应用程序的构建方法,包括:
获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;
从组件编译缓存中获取与已缓存组件对应的缓存编译结果;
根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
可选的,根据组件源码的源码内容,生成与待编译组件分别对应的组件识别标识,包括:
在组件源码中,获取与目标待编译组件对应的各目标源文件;
根据各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合;
根据组件文件夹集合中各文件的文件内容,生成第一信息摘要,并根据第一信息摘要,生成与目标待编译组件对应的组件识别标识。
可选的,根据与各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合,包括:
分别获取各目标源文件的存储路径的上一级文件夹,加入至组件文件夹集合中;
如果文件夹集合中包括有具有包含关系的至少一个文件夹分组,则在各文件夹分组中,仅保留包含关系中最外层的文件夹;
如果组件文件夹集合中包括有包含目标待编译组件的组件名称的第一文件夹,则根据第一文件夹的存储路径,获取路径终点为组件名称的第二文件夹替换第一文件夹。
可选的,根据第一文件夹的存储路径,获取路径终点为组件名称的第二文件夹替换第一文件夹,包括:
在第一文件夹的存储路径中,判断组件名称的路径位置是否位于路径终点;
若否,则在第一文件夹的存储路径中,将位于组件名称之后的路径内容进行截断,获取与截断后路径对应的第二文件夹。
可选的,在根据组件文件夹集合中各文件的文件内容,生成第一信息摘要之后,还包括:
获取组件文件夹集合中的头文件包括的所引用的关联文件,并根据各关联文件的文件内容,生成第二信息摘要;
获取与目标待编译组件匹配的编译参数,并根据编译参数,生成第三信息摘要;
根据第一信息摘要,生成与标待编译组件对应的组件识别标识,包括:
将第一信息摘要,第二信息摘要以及第三信息摘要组合得到组合信息,并生成与组合信息对应的组合信息摘要作为与目标待编译组件对应的组件识别标识。
可选的,在获取与待构建的应用程序匹配的组件源码之后,还包括:
根据待编译组件,生成工程文件,工程文件中引用有各待编译组件;
在根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序之前,还包括:
在工程文件中,删除对各已缓存组件的引用。
可选的,根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,包括:
将缓存编译结果存储在指定文件目录下,并将与文件目录匹配的存储路径加入工程文件中;
执行工程文件对未缓存组件进行编译,得到实时编译结果,并在编译过程中对缓存编译结果进行引用,以构建应用程序。
可选的,在根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序之后,还包括:
根据实时编译结果,获取与各未缓存组件对应的编译产物,并生成与各未缓存组件分别对应的组件识别标识;
将编译产物作为缓存编译结果,与未缓存组件的组件识别标识对应存储于组件编译缓存中。
可选的,还包括:
采用设定的缓存清理策略,清理组件编译缓存中满足清理条件的清理组件识别标识,以及与清理组件识别标识对应的缓存编译结果。
可选的,方法通过注入脚本的方式实现。
第二方面,本发明实施例还提供了一种应用程序的构建装置,包括:
标识生成模块,用于获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
组件识别模块,用于根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;
缓存获取模块,用于从组件编译缓存中获取与已缓存组件对应的缓存编译结果;
程序构建模块,用于根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
第三方面,本发明实施例还提供了一种计算机设备,计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现本发明任意实施例提供的应用程序的构建方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例提供的应用程序的构建方法。
本发明实施例的技术方案,通过获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;从组件编译缓存中获取与已缓存组件对应的缓存编译结果;根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,解决了现有技术中通过下载编译后的产物或者进行预编译来构建应用程序时,产生的下载速度慢、无法源码调试或者维护成本较高等问题,通过增加组件编译缓存,无需额外占用服务器资源和额外增加人工维护成本,即可实现通过增量编译完成应用程序的构建,提高了应用程序的构建速度。
附图说明
图1是本发明实施例一中的一种应用程序的构建方法的流程图;
图2是本发明实施例二中的一种应用程序的构建方法的流程图;
图3是本发明实施例三中的一种应用程序的构建装置的结构示意图;
图4是本发明实施例四中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一中的一种应用程序的构建方法的流程图,本实施例可适用于构建应用程序的情况,该方法可以由应用程序的构建装置来执行,该装置可以由硬件和/或软件来实现,并一般可以集成在提供应用程序构建服务的设备中。如图1所示,该方法包括:
步骤110、获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识。
本实施例中,待构建的应用程序主要指IOS应用程序,组件为一个工程内的可独立编译的子模块,组件源码包括构建该应用程序所需的各种组件的组件源文件,组件源文件中包括组件的图形和组件的代码,可用于创建对应的组件,组件识别标识由组件名称以及组件对应的信息摘要组成,表示该组件编译所需的所有内容的集合的摘要,当组件识别标识不变时,表示无需对该组件进行重新编译。
可选的,根据组件源码的源码内容,生成与待编译组件分别对应的组件识别标识,可以包括:在组件源码中,获取与目标待编译组件对应的各目标源文件;根据各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合;根据组件文件夹集合中各文件的文件内容,生成第一信息摘要,并根据第一信息摘要,生成与目标待编译组件对应的组件识别标识。
本实施例中,在生成与目标待编译组件对应的组件识别标识时,先从组件源码中找出创建目标待编译组件所需的各目标源文件,然后根据各目标源文件的存储路径,确定符合条件的组件文件夹,并放到与目标待编译组件对应的组件文件夹集合中,根据消息摘要算法第五版(Message Digest Algorithm,MD5)对组件文件夹集合中各文件的文件内容产生第一信息摘要,并根据第一信息摘要和其他编译所需内容的信息摘要,生成与目标待编译组件对应的组件识别标识。其中,根据MD5算法对编译所需内容产生摘要,可以防止信息被篡改,提供信息的完整性保护,使得编译过程更加稳定可靠。
步骤120、根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件。
本实施例中,组件识别标识可以唯一识别一个组件,因此,在确定各个待编译组件的组件识别标识之后,可以根据各待编译组件的组件识别标识,到组件编译缓存的缓存目录中查询是否缓存该待编译组件的编译结果,如果有,则确定该待编译组件为已缓存组件,如果没有,则确定该待编译组件为未缓存组件。
步骤130、从组件编译缓存中获取与已缓存组件对应的缓存编译结果。
本实施例中,对于已缓存组件,无需再进行编译,可以直接从组件编译缓存中获取对应的缓存编译结果,并用该缓存编译结果参与应用程序的构建,从而无需对所有的待编译组件进行编译,达到增量编译的效果,提高应用程序的构建速度。
步骤140、根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
可选的,根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,可以包括:将缓存编译结果存储在指定文件目录下,并将与文件目录匹配的存储路径加入工程文件中;执行工程文件对未缓存组件进行编译,得到实时编译结果,并在编译过程中对缓存编译结果进行引用,以构建应用程序。
本实施例中,通过将缓存编译结果存储在指定文件目录下,并将与文件目录匹配的存储路径加入工程文件中作为静态库搜索路径,使得在执行工程文件进行编译的过程中,能够找到对应的缓存编译产物进行引用,从而仅需对未缓存组件进行编译,就可以完成应用程序的构建。
可选的,在根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序之后,还可以包括:根据实时编译结果,获取与各未缓存组件对应的编译产物,并生成与各未缓存组件分别对应的组件识别标识;将编译产物作为缓存编译结果,与未缓存组件的组件识别标识对应存储于组件编译缓存中。
本实施例中,为了使各未缓存组件在下次构建应用程序时不用重新进行编译,在各未缓存组件编译完成之后,可以将各未缓存组件的编译产物作为缓存编译结果存储于组件编译缓存中,同时,为了便于区分各未缓存组件的缓存编译产物,可以从编译缓存中准确获取与指定组件对应的缓存编译结果,还需要生成与各未缓存组件分别对应的组件识别标识,将未缓存组件的缓存编译产物与组件识别标识对应存储于组件编译缓存中,以待下次构建应用程序时使用。
可选的,还可以包括:采用设定的缓存清理策略,清理组件编译缓存中满足清理条件的清理组件识别标识,以及与清理组件识别标识对应的缓存编译结果。
本实施例中,由于多次缓存组件的编译结果会占用一定的磁盘空间,为了提高磁盘空间的利用率,减少资源的浪费,可以采用最近最少使用(Least Recently Used,LRU)策略,从所有已缓存组件的组件识别标识中选择最近很少被使用的组件识别标识,将该组件识别标识以及与该组件识别标识对应的缓存编译结果进行清理。当然,本实施例并不局限于使用LRU策略进行缓存处理,还可以使用其他的缓存清理策略,例如,最不经常使用(least frequently used,LFU)策略。
可选的,方法通过注入脚本的方式实现。
本实施例中,通过加入脚本的方式,实现自动化和无侵入化的增加组件编译缓存、全自动的查询组件缓存、删除已缓存组件的编译、添加组件缓存等操作,达到增量编译的效果。
本发明实施例的技术方案,通过获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;从组件编译缓存中获取与已缓存组件对应的缓存编译结果;根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,解决了现有技术中通过下载编译后的产物或者进行预编译来构建应用程序时,产生的下载速度慢、无法源码调试或者维护成本较高等问题,通过注入脚本的方式获取组件编译缓存,无需额外占用服务器资源和额外增加人工维护成本,即可实现通过增量编译完成应用程序的构建,提高了应用程序的构建速度。
实施例二
图2是本发明实施例二中的一种应用程序的构建方法的流程图。本实施例可以与上述实施例中各个可选方案结合。具体的,参考图2,该方法可以包括如下步骤:
步骤210、获取与待构建的应用程序匹配的组件源码。
可选的,在获取与待构建的应用程序匹配的组件源码之后,还可以包括:根据待编译组件,生成工程文件,工程文件中引用有各待编译组件。
本实施例中,通过执行工程文件可以对各待编译组件进行编译,得到各待编译组件的实时编译结果,以根据实时编译结果创建对应的待编译组件。
步骤220、在组件源码中,获取与目标待编译组件对应的各目标源文件。
步骤230、根据各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合。
可选的,根据与各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合,可以包括:分别获取各目标源文件的存储路径的上一级文件夹,加入至组件文件夹集合中;如果文件夹集合中包括有具有包含关系的至少一个文件夹分组,则在各文件夹分组中,仅保留包含关系中最外层的文件夹;如果组件文件夹集合中包括有包含目标待编译组件的组件名称的第一文件夹,则根据第一文件夹的存储路径,获取路径终点为组件名称的第二文件夹替换第一文件夹。
示例性的,假设目标待编译组件的存储路径为./Modules/Login/Implement/Login.m,则目标源文件的存储路径的上一级文件夹为./Modules/Login/Implement,将文件夹./Modules/Login/Implement加入组件文件夹集合。
本实施例中,在将各个目标源文件的存储路径的上一级文件夹加入组件文件夹集合之后,根据文件夹之间是否有包含关系,对各文件夹进行分组,例如,文件夹./Modules/Login和./Modules/Login/Implement具有包含关系,对于各组文件夹,将被包含的文件夹删除,仅保留包含关系中最外层的文件夹,例如,文件夹./Modules/Login和./Modules/Login/Implement中,需要删除文件夹./Modules/Login/Implement,保留文件夹./Modules/Login。
可选的,根据第一文件夹的存储路径,获取路径终点为组件名称的第二文件夹替换第一文件夹,可以包括:在第一文件夹的存储路径中,判断组件名称的路径位置是否位于路径终点;若否,则在第一文件夹的存储路径中,将位于组件名称之后的路径内容进行截断,获取与截断后路径对应的第二文件夹。
本实施例中,如果第一文件夹的存储路径中有目标待编译组件的组件名称,则最终需要将第一文件夹的存储路径缩短至目标待编译组件的组件名称,此时,需要先判断组件名称在存储路径中的位置是否位于路径终点,如果是,则保持该存储路径不变,如果不是,则将存储路径中位于组件名称之后的路径内容删除,用与删除后的存储路径对应的第二文件夹替换第一文件夹。
示例性的,假设目标待编译组件的组件名称为Login,包含组件名称的第一文件夹的存储路径为./Modules/Login/Interface,则需要将该存储路径中位于Login之后的路径内容删除,并将文件夹./Modules/Login加入组件文件夹集合中,替换第一文件夹。
步骤240、根据组件文件夹集合中各文件的文件内容,生成第一信息摘要,并根据第一信息摘要,生成与标待编译组件对应的组件识别标识。
可选的,在根据组件文件夹集合中各文件的文件内容,生成第一信息摘要之后,还可以包括:获取组件文件夹集合中的头文件包括的所引用的关联文件,并根据各关联文件的文件内容,生成第二信息摘要;获取与目标待编译组件匹配的编译参数,并根据编译参数,生成第三信息摘要。
本实施例中,组件识别标识中除了与组件文件夹集合中各文件的文件内容对应的第一信息摘要之外,还包括与组件文件夹集合中的头文件包括的所引用的关联文件的文件内容对应的第二信息摘要,以及与目标待编译组件匹配的编译参数对应的第三信息摘要。其中,通过对头文件#import或#include进行递归分析,获取目标待编译组件引用的其他组件的关联文件,根据MD5算法对关联文件的内容产生第二信息摘要。
可选的,根据第一信息摘要,生成与标待编译组件对应的组件识别标识,可以包括:将第一信息摘要,第二信息摘要以及第三信息摘要组合得到组合信息,并生成与组合信息对应的组合信息摘要作为与目标待编译组件对应的组件识别标识。
本实施例中,组合信息摘要由组件名称以及组件对应的组合信息组成。本实施例的组件识别标识自动生成过程,使得整个编译的依赖分析是有序的、可靠的,无需依赖人为设定版本,高效解决了编译过程的稳定性问题。
步骤250、根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件。
步骤260、从组件编译缓存中获取与已缓存组件对应的缓存编译结果。
步骤270、在工程文件中,删除对各已缓存组件的引用。
本实施例中,由于已缓存组件有对应的缓存编译结果,可以不用进行编译,因此,在获取与已缓存组件对应的缓存编译结果之后,需要在工程文件中删除对各已缓存组件的引用,使得在整个编译过程不再编译各已缓存组件的源文件,达到节省编译耗时的目的。
步骤280、根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
本实施例中,在获取与已缓存组件对应的缓存编译结果之后,还需要将缓存编译结果存储在指定文件目录下,并将与文件目录匹配的存储路径加入工程文件中作为静态库搜索路径,使得在执行工程文件进行编译的过程中,能够找到对应的缓存编译产物进行引用,从而仅需对未缓存组件进行编译,就可以完成应用程序的构建。
本发明实施例的技术方案,通过获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;从组件编译缓存中获取与已缓存组件对应的缓存编译结果;根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,解决了现有技术中通过下载编译后的产物或者进行预编译来构建应用程序时,产生的下载速度慢、无法源码调试或者维护成本较高等问题,无需额外占用服务器资源和额外增加人工维护成本,通过增加组件编译缓存,实现了只需增量编译即可完成应用程序的构建,提高了应用程序的构建速度。
实施例三
图3是本发明实施例三中的一种应用程序的构建装置的结构示意图,本实施例可适用于构建应用程序的情况。如图3所示,该应用程序的构建装置包括:
标识生成模块310,用于获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
组件识别模块320,用于根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;
缓存获取模块330,用于从组件编译缓存中获取与已缓存组件对应的缓存编译结果;
程序构建模块340,用于根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
本发明实施例的技术方案,通过获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;从组件编译缓存中获取与已缓存组件对应的缓存编译结果;根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序,解决了现有技术中通过下载编译后的产物或者进行预编译来构建应用程序时,产生的下载速度慢、无法源码调试或者维护成本较高等问题,无需额外占用服务器资源和额外增加人工维护成本,通过增加组件编译缓存,实现了只需增量编译即可完成应用程序的构建,提高了应用程序的构建速度。
可选的,标识生成模块310,具体用于:在组件源码中,获取与目标待编译组件对应的各目标源文件;根据各目标源文件在组件源码中的存储路径,获取与目标待编译组件对应的组件文件夹集合;根据组件文件夹集合中各文件的文件内容,生成第一信息摘要,并根据第一信息摘要,生成与目标待编译组件对应的组件识别标识。
可选的,标识生成模块310,具体用于:分别获取各目标源文件的存储路径的上一级文件夹,加入至组件文件夹集合中;如果文件夹集合中包括有具有包含关系的至少一个文件夹分组,则在各文件夹分组中,仅保留包含关系中最外层的文件夹;如果组件文件夹集合中包括有包含目标待编译组件的组件名称的第一文件夹,则根据第一文件夹的存储路径,获取路径终点为组件名称的第二文件夹替换第一文件夹。
可选的,标识生成模块310,具体用于:在第一文件夹的存储路径中,判断组件名称的路径位置是否位于路径终点;若否,则在第一文件夹的存储路径中,将位于组件名称之后的路径内容进行截断,获取与截断后路径对应的第二文件夹。
可选的,标识生成模块310,还用于:在根据组件文件夹集合中各文件的文件内容,生成第一信息摘要之后,获取组件文件夹集合中的头文件包括的所引用的关联文件,并根据各关联文件的文件内容,生成第二信息摘要;获取与目标待编译组件匹配的编译参数,并根据编译参数,生成第三信息摘要;将第一信息摘要,第二信息摘要以及第三信息摘要组合得到组合信息,并生成与组合信息对应的组合信息摘要作为与目标待编译组件对应的组件识别标识。
可选的,标识生成模块310,还用于:在获取与待构建的应用程序匹配的组件源码之后,根据待编译组件,生成工程文件,工程文件中引用有各待编译组件;
程序构建模块340,还用于:在根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序之前,在工程文件,删除对各已缓存组件的引用。
可选的,程序构建模块340,具体用于:将缓存编译结果存储在指定文件目录下,并将与文件目录匹配的存储路径加入工程文件中;执行工程文件对未缓存组件进行编译,得到实时编译结果,并在编译过程中对缓存编译结果进行引用,以构建应用程序。
可选的,程序构建模块340,还用于:在根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序之后,根据实时编译结果,获取与各未缓存组件对应的编译产物,并生成与各未缓存组件分别对应的组件识别标识;将编译产物作为缓存编译结果,与未缓存组件的组件识别标识对应存储于组件编译缓存中。
可选的,还包括:清理模块,用于采用设定的缓存清理策略,清理组件编译缓存中满足清理条件的清理组件识别标识,以及与清理组件识别标识对应的缓存编译结果。
可选的,方法通过注入脚本的方式实现。
本发明实施例所提供的应用程序的构建装置可执行本发明任意实施例所提供的应用程序的构建方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4是本发明实施例四中的一种计算机设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图4显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的应用程序的构建方法。
也即:实现一种应用程序的构建方法,包括:
获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;
从组件编译缓存中获取与已缓存组件对应的缓存编译结果;
根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
实施例五
本发明实施例五还公开了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现一种应用程序的构建方法,包括:
获取与待构建的应用程序匹配的组件源码,并根据组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
根据组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在待编译组件中识别已缓存组件和未缓存组件;
从组件编译缓存中获取与已缓存组件对应的缓存编译结果;
根据与未缓存组件对应的实时编译结果和缓存编译结果,构建应用程序。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (13)

1.一种应用程序的构建方法,其特征在于,包括:
获取与待构建的应用程序匹配的组件源码,并根据所述组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
根据所述组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在所述待编译组件中识别已缓存组件和未缓存组件;
从所述组件编译缓存中获取与所述已缓存组件对应的缓存编译结果;
根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序。
2.根据权利要求1所述的方法,其特征在于,根据所述组件源码的源码内容,生成与待编译组件分别对应的组件识别标识,包括:
在所述组件源码中,获取与目标待编译组件对应的各目标源文件;
根据各所述目标源文件在所述组件源码中的存储路径,获取与所述目标待编译组件对应的组件文件夹集合;
根据所述组件文件夹集合中各文件的文件内容,生成第一信息摘要,并根据所述第一信息摘要,生成与所述目标待编译组件对应的组件识别标识。
3.根据权利要求2所述的方法,其特征在于,根据与各所述目标源文件在所述组件源码中的存储路径,获取与所述目标待编译组件对应的组件文件夹集合,包括:
分别获取各所述目标源文件的存储路径的上一级文件夹,加入至所述组件文件夹集合中;
如果所述文件夹集合中包括有具有包含关系的至少一个文件夹分组,则在各所述文件夹分组中,仅保留包含关系中最外层的文件夹;
如果所述组件文件夹集合中包括有包含目标待编译组件的组件名称的第一文件夹,则根据所述第一文件夹的存储路径,获取路径终点为所述组件名称的第二文件夹替换所述第一文件夹。
4.根据权利要求3所述的方法,其特征在于,根据所述第一文件夹的存储路径,获取路径终点为所述组件名称的第二文件夹替换所述第一文件夹,包括:
在所述第一文件夹的存储路径中,判断所述组件名称的路径位置是否位于路径终点;
若否,则在所述第一文件夹的存储路径中,将位于所述组件名称之后的路径内容进行截断,获取与截断后路径对应的所述第二文件夹。
5.根据权利要求2所述的方法,其特征在于,在根据所述组件文件夹集合中各文件的文件内容,生成第一信息摘要之后,还包括:
获取所述组件文件夹集合中的头文件包括的所引用的关联文件,并根据各所述关联文件的文件内容,生成第二信息摘要;
获取与所述目标待编译组件匹配的编译参数,并根据所述编译参数,生成第三信息摘要;
根据所述第一信息摘要,生成与所述标待编译组件对应的组件识别标识,包括:
将所述第一信息摘要,所述第二信息摘要以及所述第三信息摘要组合得到组合信息,并生成与所述组合信息对应的组合信息摘要作为与所述目标待编译组件对应的组件识别标识。
6.根据权利要求1所述的方法,其特征在于,在获取与待构建的应用程序匹配的组件源码之后,还包括:
根据所述待编译组件,生成工程文件,所述工程文件中引用有各所述待编译组件;
在根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序之前,还包括:
在所述工程文件中,删除对各所述已缓存组件的引用。
7.根据权利要求6所述的方法,其特征在于,根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序,包括:
将所述缓存编译结果存储在指定文件目录下,并将与所述文件目录匹配的存储路径加入所述工程文件中;
执行所述工程文件对所述未缓存组件进行编译,得到实时编译结果,并在编译过程中对所述缓存编译结果进行引用,以构建所述应用程序。
8.根据权利要求1所述的方法,其特征在于,在根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序之后,还包括:
根据所述实时编译结果,获取与各所述未缓存组件对应的编译产物,并生成与各所述未缓存组件分别对应的组件识别标识;
将所述编译产物作为缓存编译结果,与所述未缓存组件的组件识别标识对应存储于所述组件编译缓存中。
9.根据权利要求1所述的方法,其特征在于,还包括:
采用设定的缓存清理策略,清理所述组件编译缓存中满足清理条件的清理组件识别标识,以及与所述清理组件识别标识对应的缓存编译结果。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述方法通过注入脚本的方式实现。
11.一种应用程序的构建装置,其特征在于,包括:
标识生成模块,用于获取与待构建的应用程序匹配的组件源码,并根据所述组件源码的源码内容,生成与各待编译组件分别对应的组件识别标识;
组件识别模块,用于根据所述组件识别标识,查询组件编译缓存中已缓存组件标识的命中情况,在所述待编译组件中识别已缓存组件和未缓存组件;
缓存获取模块,用于从所述组件编译缓存中获取与所述已缓存组件对应的缓存编译结果;
程序构建模块,用于根据与所述未缓存组件对应的实时编译结果和所述缓存编译结果,构建所述应用程序。
12.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的应用程序的构建方法。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任一所述的应用程序的构建方法。
CN202010030857.3A 2020-01-13 2020-01-13 应用程序的构建方法、装置、设备及存储介质 Active CN111240689B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010030857.3A CN111240689B (zh) 2020-01-13 2020-01-13 应用程序的构建方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010030857.3A CN111240689B (zh) 2020-01-13 2020-01-13 应用程序的构建方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN111240689A CN111240689A (zh) 2020-06-05
CN111240689B true CN111240689B (zh) 2023-08-01

Family

ID=70864061

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010030857.3A Active CN111240689B (zh) 2020-01-13 2020-01-13 应用程序的构建方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111240689B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111949273B (zh) * 2020-07-31 2023-04-07 深圳市艾特云信息技术有限公司 一种基于iOS系统的文件提取方法及装置
CN112114814A (zh) * 2020-09-22 2020-12-22 北京达佳互联信息技术有限公司 编译文件确定方法及装置、应用程序生成方法及装置
CN112732314A (zh) * 2020-12-30 2021-04-30 北京一亩田新农网络科技有限公司 基于android插件化差分打包方法、装置、电子设备及计算机可读介质
CN112748931B (zh) * 2021-01-21 2023-08-04 广州虎牙科技有限公司 编译文件管理方法、调用方法、装置及电子设备
CN113127000A (zh) * 2021-04-23 2021-07-16 北京字节跳动网络技术有限公司 应用程序组件的编译方法、装置、设备及存储介质
CN113031965A (zh) * 2021-04-23 2021-06-25 上海数禾信息科技有限公司 应用程序业务工程编译方法、装置、设备和存储介质
CN113326046B (zh) * 2021-05-26 2023-09-26 网易(杭州)网络有限公司 获取编译时长的方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107678750A (zh) * 2017-10-27 2018-02-09 北京腾云天下科技有限公司 一种sdk打包方法、计算设备及sdk打包系统
US10613843B2 (en) * 2017-12-29 2020-04-07 Microsoft Technology Licensing, Llc Compiler caching based on semantic structure
CN108418717B (zh) * 2018-03-02 2020-04-07 平安科技(深圳)有限公司 安卓应用打包上传方法、装置、计算机设备及存储介质
CN109885311B (zh) * 2019-01-28 2023-09-29 平安科技(深圳)有限公司 一种应用程序的生成方法及设备
CN110457045B (zh) * 2019-08-16 2023-05-16 百度在线网络技术(北京)有限公司 组件化合并编译方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN111240689A (zh) 2020-06-05

Similar Documents

Publication Publication Date Title
CN111240689B (zh) 应用程序的构建方法、装置、设备及存储介质
US11157640B2 (en) Protecting sensitive data in software products and in generating core dumps
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
CN107423048B (zh) 数据收集的方法、装置、介质和计算设备
CN110457277B (zh) 业务处理性能分析方法、装置、设备及存储介质
US8959490B2 (en) Optimizing heap memory usage
CN108132890B (zh) 存储芯片的垃圾回收方法、装置、设备及存储介质
US9229943B2 (en) Addressing cross-allocated blocks in a file system
US20110047531A1 (en) Methods and apparatuses for selective code coverage
US20060123332A1 (en) Method and apparatus for incrementally processing program annotations
CN112559095A (zh) 目标业务的执行方法、系统、服务器及存储介质
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
CN114138281A (zh) 软件工程的编译方法、装置、设备及介质
CN112015467A (zh) 埋点方法、介质、装置和计算设备
CN110727476B (zh) 一种授权配置文件的生成方法、装置、设备及存储介质
CN110990346A (zh) 基于区块链的文件数据处理方法、装置、设备及存储介质
CN110716804A (zh) 无用资源的自动删除方法、装置、存储介质及电子设备
CN110188308B (zh) 客户端自动打点上报方法、存储介质、设备及系统
CN117076457A (zh) 数据处理方法、装置、设备及存储介质
CN111562929A (zh) 补丁文件的生成方法、装置、设备及存储介质
CN113821486B (zh) pod库之间依赖关系的确定方法及其装置、电子设备
CN112162954B (zh) 用户操作日志生成、路径的定位方法、装置、设备及介质
CN115705250A (zh) 监测堆栈使用量以优化程序
CN110716946B (zh) 特征规则匹配库的更新方法、装置、存储介质及电子设备
US9720660B2 (en) Binary interface instrumentation

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
GR01 Patent grant
GR01 Patent grant