CN111273956B - 一种程序模块加载方法、装置、设备及存储介质 - Google Patents

一种程序模块加载方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111273956B
CN111273956B CN202010054899.0A CN202010054899A CN111273956B CN 111273956 B CN111273956 B CN 111273956B CN 202010054899 A CN202010054899 A CN 202010054899A CN 111273956 B CN111273956 B CN 111273956B
Authority
CN
China
Prior art keywords
program module
module
identification information
target program
loading
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
CN202010054899.0A
Other languages
English (en)
Other versions
CN111273956A (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 CN202010054899.0A priority Critical patent/CN111273956B/zh
Publication of CN111273956A publication Critical patent/CN111273956A/zh
Application granted granted Critical
Publication of CN111273956B publication Critical patent/CN111273956B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • 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

本发明公开了一种程序模块加载方法、装置、设备及存储介质。该方法包括:从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块,通过本发明的技术方案,能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。

Description

一种程序模块加载方法、装置、设备及存储介质
技术领域
本发明实施例涉及计算机技术,尤其涉及一种程序模块加载方法、装置、设备及存储介质。
背景技术
随着公司业务发展,和国内环境变迁,越来越多“大而全”的APP开始出现在市面上,为了带给用户更好的体验,逐渐增加功能,目前很多应用的代码量已经超过100万行。
集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。在Android开发中,IDE一般为JetBrain公司出品的Intellij,或基于Intellij的AndroidStudio,或早期的Eclipse等。
现有技术中,针对代码量巨大的项目,编译起来会十分缓慢,例如全量编译100万行代码更是要20分钟左右。由于IDE加载会加载所有的代码,因此代码巨大的项目IDE加载过慢,严重影响效率。
发明内容
本发明实施例提供一种程序模块加载方法、装置、设备及存储介质,以实现能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。
第一方面,本发明实施例提供了一种程序模块加载方法,包括:
从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;
根据更改后的启动加载配置文件加载所述目标程序模块。
进一步的,所述获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息包括:
获取用户输入的目标程序模块的标识信息;
根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;
查找所述源代码文件中的模块构建配置文件;
读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
进一步的,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
读取更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块。
进一步的,所述根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件包括:
根据所述目标程序模块的标识信息查询数据库,得到与所述目标程序模块对应的源代码文件的标识信息,其中,所述数据库中包括程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系;
根据所述源代码文件的标识信息读取所述目标程序模块对应的源代码文件。
进一步的,所述标识信息包括:名称信息。
进一步的,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
获取更改后的启动加载配置文件中的所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,其中,所述标识信息包括名称信息和关联信息;
根据所述目标程序模块的子程序模块的名称信息加载所述目标程序模块的子程序模块;
根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块。
进一步的,所述根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块包括:
根据所述目标程序模块的底层程序模块的名称信息加载所述目标程序模块的底层程序模块;
根据所述目标程序模块的底层程序模块和所述目标程序模块的底层程序模块的关联关系加载所述目标程序模块的中间程序模块;
根据所述目标程序模块的中间程序模块和所述目标程序模块的中间程序模块的关联关系加载所述目标程序模块。
第二方面,本发明实施例还提供了一种程序模块加载装置,该装置包括:
获取模块,用于从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
去除模块,用于根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;
加载模块,用于根据更改后的启动加载配置文件加载所述目标程序模块。
进一步的,所述获取模块包括:
信息获取子模块,用于获取用户输入的目标程序模块的标识信息;
第一读取子模块,用于根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;
查找子模块,用于查找所述源代码文件中的模块构建配置文件;
第二读取子模块,用于读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
进一步的,所述加载模块具体用于:
读取更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块。
进一步的,所述第一读取子模块具体用于:
根据所述目标程序模块的标识信息查询数据库,得到与所述目标程序模块对应的源代码文件的标识信息,其中,所述数据库中包括程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系;
根据所述源代码文件的标识信息读取所述目标程序模块对应的源代码文件。
进一步的,所述标识信息包括:名称信息。
进一步的,所述加载模块具体用于:
获取更改后的启动加载配置文件中的所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,其中,所述标识信息包括名称信息和关联信息;
根据所述目标程序模块的子程序模块的名称信息加载所述目标程序模块的子程序模块;
根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块。
进一步的,所述加载模块还用于:
根据所述目标程序模块的底层程序模块的名称信息加载所述目标程序模块的底层程序模块;
根据所述目标程序模块的底层程序模块和所述目标程序模块的底层程序模块的关联关系加载所述目标程序模块的中间程序模块;
根据所述目标程序模块的中间程序模块和所述目标程序模块的中间程序模块的关联关系加载所述目标程序模块。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明实施例中任一所述的程序模块加载方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的程序模块加载方法。
本发明实施例通过从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块,能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1A是本发明实施例一中的一种程序模块加载方法的流程图;
图1B是本发明实施例一中的树状结构示意图;
图1C是本发明实施例一中的编译流程示意图;
图2是本发明实施例二中的一种程序模块加载方法的流程图;
图3是本发明实施例三中的一种程序模块加载装置的结构示意图;
图4是本发明实施例四中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
实施例一
图1A为本发明实施例一提供的一种程序模块加载方法的流程图,本实施例可适用于程序模块加载的情况,该方法可以由本发明实施例中的程序模块加载装置来执行,该装置可采用软件和/或硬件的方式实现,如图1A所示,该方法具体包括如下步骤:
S110,从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和目标程序模块的子程序模块的标识信息。
其中,所述当前待开发程序包括至少一个程序模块,每个程序模块之间的依赖关系可能会很复杂,任意两个程序模块之间可能会有很多依赖,例如可以是,如图1B所示,当前待开发程序中的程序模块包括:程序模块A、程序模块B、程序模块C、程序模块D、程序模块E和程序模块F。
其中,所述目标程序模块的标识信息可以为目标程序模块的名称信息,也可以为其他用于标识目标程序模块的信息,例如可以是,数字和字母的组合,本发明实施例对此不进行限制。
其中,所述目标程序模块的子程序模块可以为一个程序模块,也可以为多个程序模块,例如可以是,如图1B所示,若目标程序模块为程序模块B,则目标程序模块的子程序模块为程序模块A,若目标程序模块为程序模块D,则目标程序模块的子程序模块为程序模块A、程序模块B和程序模块C。
具体的,从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和目标程序模块的子程序模块的标识信息,例如可以是,若当前待开发程序包括程序模块A、程序模块B、程序模块C、程序模块D、程序模块E和程序模块F,目标程序模块的标识信息为D,目标程序模块的子程序模块的标识信息为A、B和C。
S120,根据目标程序模块的标识信息和目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息。
其中,所述启动加载配置文件为setting.gradle文件,如图1C所示,集成开发环境(IDE,Integrated Development Environment)加载程序模块的时候,需要根据配置文件确定要加载的程序模块。也就是说,是通过setting.gradle文件决定gradle需要加载哪些程序模块。
其中,所述非关联程序模块为不参与目标程序模块编译的程序模块,例如可以是,如图1B所示,加载程序模块D时,程序模块E和程序模块F都不参与编译,因此,程序模块E和程序模块F为程序模块D的非关联程序模块。
具体的,根据目标程序模块的标识信息和目标程序模块的子程序模块的标识信息从启动加载配置文件中去除与目标程序模块非关联的程序模块的标识信息,例如可以是,原启动加载配置文件中包括程序模块A的标识信息A、程序模块B的标识信息B、程序模块C的标识信息C、程序模块D的标识信息D、程序模块E的标识信息E和程序模块F的标识信息F,若目标程序模块为程序模块D,则去除启动加载配置文件中的E和F。
S130,根据更改后的启动加载配置文件加载目标程序模块。
其中,所述更改后的启动加载配置文件中存储有目标程序模块的标识信息和与目标程序相关的程序模块的标识信息,例如可以是,如图1B所示,若目标程序模块为程序模块D,则更改后的启动加载配置文件中存储有A、B、C、D。
具体的,根据更改后的启动加载配置文件加载目标程序模块的方式可以为,直接根据更改后的启动加载配置文件加载目标程序模块,也可以为根据更改后的启动加载配置文件加载子程序模块,再根据子程序模块加载目标程序模块,本发明实施例对此不进行限制,例如可以是,若目标程序模块为程序模块B,则可以直接加载程序模块A和程序模块B,也可以加载程序模块A之后,根据程序模块A加载程序模块B。
本实施例的技术方案,通过从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块,能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。
实施例二
图2为本发明实施例二中的一种程序模块加载方法的流程图,本实施例以上述实施例为基础进行优化,在本实施例中,所述获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息包括:获取用户输入的目标程序模块的标识信息;根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;查找所述源代码文件中的模块构建配置文件;读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
如图2所示,本实施例的方法具体包括如下步骤:
S210,从当前待开发程序的至少一个程序模块中,获取用户输入的目标程序模块的标识信息。
其中,所述标识信息包括:名称信息。
其中,所述用户输入的目标程序的标识信息可以为用户手动输入的目标程序的标识信息,也可以为用户通过语音输入的标识信息,本发明实施例对用户输入目标程序的标识信息的方式不进行限制。
具体的,从当前待开发程序的至少一个程序模块中,获取用户输入的目标程序模块的标识信息,例如可以是,若当前待开发程序包括程序模块A、程序模块B、程序模块C、程序模块D、程序模块E和程序模块F,用户输入程序模块D的标识信息D。
S220,根据目标程序模块的标识信息读取目标程序模块对应的源代码文件。
其中,所述目标程序模块对应的源代码文件为用于存储目标程序模块的源代码的文件。
具体的,根据目标程序模块的标识信息读取目标程序模块对应的源代码文件的方式可以为根据目标程序模块的标识信息查找目标程序模块对应的源代码文件的标识信息,然后根据源代码文件的标识信息读取源代码文件,还可以为直接根据目标程序模块的标识信息和源代码文件的对应关系,获取目标程序模块对应的源代码文件。
S230,查找源代码文件中的模块构建配置文件。
其中,所述模块构建配置文件为build.gradle文件,每一个程序模块下面都存在一个build.gradle文件,build.gradle文件用于存储当前程序模块的依赖项,也就是当前程序模块的子程序模块。
具体的,查找源代码文件中的模块构建配置文件,例如可以是,若当前程序模块为程序模块D,则build.gradle文件中存储有B、C。再查找程序模块B的build.gradle文件,build.gradle文件中存储有A,查找程序模块C的build.gradle文件,build.gradle文件中存储有A。
S240,读取模块构建配置文件中的目标程序模块的子程序模块的标识信息。
其中,所述模块构建配置文件包括目标程序模块的模块构建配置文件和目标程序模块的子模块的模块构建配置文件,例如可以是,若目标程序模块为程序模块D,则模块构建配置文件包括程序模块D的模块构建配置文件、程序模块B的模块构建配置文件、程序模块C的模块构建配置文件。
具体的,读取模块构建配置文件中的目标程序模块的子程序模块的标识信息,例如可以是,读取程序模块D的模块构建配置文件中程序模块B的标识信息和程序模块C的标识信息,读取程序模块B的模块构建配置文件中程序模块A的标识信息,程序模块C的模块构建配置文件中程序模块A的标识信息。
S250,根据目标程序模块的标识信息和目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息。
S260,根据更改后的启动加载配置文件加载目标程序模块。
可选的,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
读取更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息。
具体的,读取所述更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,例如可以是,若目标程序模块为程序模块D,则所述更改后的启动加载配置文件中的标识信息为A、B、C、D。
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块。
具体的,根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块的方式可以为,直接加载目标程序模块和目标程序模块的子程序模块;也可以为加载目标程序模块的子程序模块,再根据目标程序模块的子程序模块加载目标程序模块。
通过预先从启动加载配置文件中去除非关联程序模块的标识信息,使得启动加载配置文件中的标识信息为目标程序模块的标识信息和目标程序模块的子程序模块的标识信息,根据目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块,可以直接加载与目标程序相关的程序模块,避免加载与目标程序模块无关的模块,进而提升IDE加载速度。
可选的,所述根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件包括:
根据所述目标程序模块的标识信息查询数据库,得到与所述目标程序模块对应的源代码文件的标识信息,其中,所述数据库中包括程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系。
其中,预先建立关于程序模块的标识信息和程序模块对应的源代码文件的标识信息之间的对应关系的数据库,例如可以是,程序模块A的标识信息为A,程序模块B的标识信息为B,程序模块C的标识信息为C,程序模块A对应的源代码文件的标识信息为X,程序模块B对应的源代码文件的标识信息为Y,程序模块C对应的源代码文件的标识信息为Z,建立数据库:A对应X,B对应Y,C对应Z。
具体的,根据目标程序模块的标识信息查询数据库,例如可以是,目标程序模块的标识信息为A,则查询数据库A对应X,获取到目标程序模块对应的源代码文件的标识信息为X。
根据所述源代码文件的标识信息读取所述目标程序模块对应的源代码文件。
具体的,通过预先建立程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系的数据库能够减少通过目标程序模块的标识信息查找源代码文件的速度,直接根据目标程序模块的标识信息查找与标识信息对应的源代码文件的标识信息,再根据源代码文件的标识信息读取源代码文件。
可选的,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
获取更改后的启动加载配置文件中的所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,其中,所述标识信息包括名称信息和关联信息。
其中,所述关联信息为目标程序模块和子程序模块的关联信息,根据目标程序模块和子程序模块的关联信息和子程序模块可以加载目标程序模块。
具体的,获取更改后的启动配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,例如可以是,改动后的启动配置文件包括:A、B和程序模块A与程序模块B的关联关系,其中,A为子程序模块的名称信息,B为目标程序模块的名称信息。
根据所述目标程序模块的子程序模块的名称信息加载所述目标程序模块的子程序模块;
根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块。
具体的,根据子程序模块的名称信息加载子程序模块,根据目标程序模块和子程序模块的关联关系,通过子程序模块加载目标程序模块,例如可以是,若子程序模块的名称信息为A,则根据A加载子程序模块A,根据程序模块A与程序模块B的关联关系,加载程序模块B。
通过目标程序模块的名称信息获取目标程序模块的子程序模块的名称信息以及目标程序模块和子程序模块的关联关系,根据目标程序模块的名称信息加载目标程序模块的子程序模块,根据目标程序模块的子程序模块的关联信息和目标程序模块的子程序模块加载目标程序模块,也就是说,只需要存储子程序模块以及子程序模块和目标程序模块的关联关系就可以加载出目标程序模块,现有技术中需要将所有程序模块均进行存储,本方案能够减少存储的程序模块。
可选的,所述根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块包括:
根据所述目标程序模块的底层程序模块的名称信息加载所述目标程序模块的底层程序模块。
其中,所述底层程序模块为几乎所有程序模块都依赖的程序模块,例如可以是,如图1B所示,程序模块A为底层程序模块。
具体的,根据目标程序模块的底层程序模块的名称信息加载底层程序模块,例如可以是,根据目标程序模块的底层程序模块的名称信息为A,加载底层程序模块A。
根据所述目标程序模块的底层程序模块和所述目标程序模块的底层程序模块的关联关系加载所述目标程序模块的中间程序模块。
其中,所述中间程序模块为既具有依赖的程序模块,也为被依赖的程序模块,例如可以是,如图1B所示,程序模块B为中间程序模块。
其中,所述中间模块可以为一个也可以为多个,例如可以是,如图1B所示,若程序模块D为目标程序模块,则程序模块C也为中间程序模块。
具体的,根据底层程序模块和底层程序模块和中间程序模块的关联关系加载中间程序模块,例如可以是,根据底层程序模块A,和程序模块A和程序模块B的关联关系,加载程序模块B和C。
根据所述目标程序模块的中间程序模块和所述目标程序模块的中间程序模块的关联关系加载所述目标程序模块。
具体的,根据目标程序模块的中间程序模块和中间程序模块和目标程序模块的关联关系加载目标程序模块,例如可以是,根据中间程序模块B、中间程序模块C以及中间程序模块B和中间程序模块C与目标程序模块的关联关系,加载目标程序模块D。
通过将目标程序模块的子程序模块根据设定规则拆分为底层程序模块和中层程序模块,只需要存储底层程序模块,就可以根据底层程序模块和中层程序模块的关联关系加载中层程序模块,再根据中层程序模块和中层程序模块和目标程序模块的关联关系加载目标程序模块,将子模块拆分为底层模块和中间模块,仅需存储底层模块,就可以加载目标程序模块,本方案能够减少程序模块的存储。
在一个具体的例子中,正常情况下,一个项目会有多个程序模块,每个程序模块之间的依赖关系可能会很复杂,任意两个程序模块之间可能会有很多依赖,大部分依赖会是一个树状结构,如图1B所示,几乎所有的程序模块都会依赖程序模块A,此时程序模块A即为一个底层程序模块。程序模块F不被任何程序模块依赖,则其为一个顶层程序模块。依赖树为gradle编译的组成部分,正常一个APP,会像图1B一样有很多程序模块组成,而最终产物就是一个apk文件,即程序模块F的产物。而当编译程序模块D时,由于程序模块E、程序模块F都不会参与编译,因此会加快编译速度。每次声明需要开发的程序模块,IDE仅加载需要的程序模块即可。与编译不同的是,IDE默认都会加载所有的程序模块,在现有的Android开发模式中,由于编译工具为Gradle,gradle编译分为如图1C所示的三个阶段,而IDE加载文件的判断,在第一阶段之前,通过配置文件setting.gradle文件,决定gradle需要编译哪些程序模块,即Initialization根据setting.gradle文件来决定要编译哪些程序模块,如果一个项目的多个程序模块,如图1B所示的程序模块A-F,只有部分在setting.gradle文件中声明的话,那么IDE的速度就会快很多。本发明方案的原理即是如此,在规定文件名称和程序模块名称的前提下,通过自定义IDE插件,在IDE索引项目之前,改动setting.gradle文件,以此来剔除不需要的模块,加快IDE响应速度。
在另一个具体的例子中,步骤一、打开IDE,加载自定义IDE插件;步骤二、插件询问需要开发哪个程序模块,开发者填入具体程序模块名称D;步骤三、插件根据字符串匹配到具体的文件名称,此时的文件夹名称和程序模块名称对应;步骤四、找到此程序模块下的build.gradle文件,此文件记录了当前程序模块的依赖项,此时程序模块D的build.gradle文件记录的应该是B和C;步骤五、拿到程序模块B和程序模块C的名称,通过字符串匹配,找到对应文件夹;步骤六、重复步骤4,知道找到所有程序模块的名称;步骤七、改动setting.gradle文件,仅声明A、B、C、D程序模块。其中一个难点是根据模块名称找到文件名称,真实的项目比较复杂,模块名称和文件夹名称没有必然联系,我们上述步骤的根据模块名称寻找文件地址基本很难实现。因此我们规定了模块名和文件夹名称的一些规则,进而可以直接找到模块名。由于IDE的特性是仅编译参与最终构建的模块,因此声明的模块少了,自然会快一点。在程序模块编译时,正常的程序模块编译出来的产物只是普通.aar文件,而不是.apk文件,因此还需要编写驱动apk。本方案中,每次开发时,开发者仅关注自己开发的程序模块,进而加快IDE编译速度。
本实施例的技术方案,通过从当前待开发程序的至少一个程序模块中,获取用户输入的目标程序模块的标识信息,根据用户输入的目标程序模块的标识信息读取源代码文件,进而查找到模块构建配置文件,读取模块构建配置文件中的目标程序模块的子程序模块的标识信息,根据目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块,能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。
实施例三
图3为本发明实施例三提供的一种程序模块加载装置的结构示意图。本实施例可适用于程序模块加载的情况,该装置可采用软件和/或硬件的方式实现,该装置可集成在任何提供程序模块加载功能的设备中,如图3所示,所述程序模块加载装置具体包括:获取模块310、去除模块320和加载模块330。
其中,获取模块310,用于从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
去除模块320,用于根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;
加载模块330,用于根据更改后的启动加载配置文件加载所述目标程序模块。
可选的,所述获取模块包括:
信息获取子模块,用于获取用户输入的目标程序模块的标识信息;
第一读取子模块,用于根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;
查找子模块,用于查找所述源代码文件中的模块构建配置文件;
第二读取子模块,用于读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
可选的,所述加载模块具体用于:
读取更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块。
可选的,所述第一读取子模块具体用于:
根据所述目标程序模块的标识信息查询数据库,得到与所述目标程序模块对应的源代码文件的标识信息,其中,所述数据库中包括程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系;
根据所述源代码文件的标识信息读取所述目标程序模块对应的源代码文件。
可选的,所述标识信息包括:名称信息。
可选的,所述加载模块具体用于:
获取更改后的启动加载配置文件中的所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,其中,所述标识信息包括名称信息和关联信息;
根据所述目标程序模块的子程序模块的名称信息加载所述目标程序模块的子程序模块;
根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块。
可选的,所述加载模块还用于:
根据所述目标程序模块的底层程序模块的名称信息加载所述目标程序模块的底层程序模块;
根据所述目标程序模块的底层程序模块和所述目标程序模块的底层程序模块的关联关系加载所述目标程序模块的中间程序模块;
根据所述目标程序模块的中间程序模块和所述目标程序模块的中间程序模块的关联关系加载所述目标程序模块。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
本实施例的技术方案,通过从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块,能够通过去除对非关联程序模块的加载来解决IDE加载过慢的问题。
实施例四
图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,显示器24不是作为独立个体存在,而是嵌入镜面中,在显示器24的显示面不予显示时,显示器24的显示面与镜面从视觉上融为一体。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的程序模块加载方法:从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块。
实施例五
本发明实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有发明实施例提供的程序模块加载方法:从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;根据更改后的启动加载配置文件加载所述目标程序模块。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (9)

1.一种程序模块加载方法,其特征在于,包括:
从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;
根据更改后的启动加载配置文件加载所述目标程序模块;
所述获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息包括:
获取用户输入的目标程序模块的标识信息;
根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;
查找所述源代码文件中的模块构建配置文件;
读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
2.根据权利要求1所述的方法,其特征在于,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
读取更改后的启动加载配置文件中的目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息加载所述目标程序模块。
3.根据权利要求1所述的方法,其特征在于,所述根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件包括:
根据所述目标程序模块的标识信息查询数据库,得到与所述目标程序模块对应的源代码文件的标识信息,其中,所述数据库中包括程序模块的标识信息与程序模块对应的源代码文件的标识信息之间的对应关系;
根据所述源代码文件的标识信息读取所述目标程序模块对应的源代码文件。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述标识信息包括:名称信息。
5.根据权利要求1所述的方法,其特征在于,所述根据更改后的启动加载配置文件加载所述目标程序模块包括:
获取更改后的启动加载配置文件中的所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,其中,所述标识信息包括名称信息和关联信息;
根据所述目标程序模块的子程序模块的名称信息加载所述目标程序模块的子程序模块;
根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标程序模块的子程序模块的关联信息和所述目标程序模块的子程序模块加载所述目标程序模块包括:
根据所述目标程序模块的底层程序模块的名称信息加载所述目标程序模块的底层程序模块;
根据所述目标程序模块的底层程序模块和所述目标程序模块的底层程序模块的关联关系加载所述目标程序模块的中间程序模块;
根据所述目标程序模块的中间程序模块和所述目标程序模块的中间程序模块的关联关系加载所述目标程序模块。
7.一种程序模块加载装置,其特征在于,包括:
获取模块,用于从当前待开发程序的至少一个程序模块中,获取目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息;
去除模块,用于根据所述目标程序模块的标识信息和所述目标程序模块的子程序模块的标识信息,从启动加载配置文件中去除非关联程序模块的标识信息;
加载模块,用于根据更改后的启动加载配置文件加载所述目标程序模块;
所述获取模块包括:
信息获取子模块,用于获取用户输入的目标程序模块的标识信息;
第一读取子模块,用于根据所述目标程序模块的标识信息读取所述目标程序模块对应的源代码文件;
查找子模块,用于查找所述源代码文件中的模块构建配置文件;
第二读取子模块,用于读取所述模块构建配置文件中的所述目标程序模块的子程序模块的标识信息。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6中任一所述的方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的方法。
CN202010054899.0A 2020-01-17 2020-01-17 一种程序模块加载方法、装置、设备及存储介质 Active CN111273956B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010054899.0A CN111273956B (zh) 2020-01-17 2020-01-17 一种程序模块加载方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010054899.0A CN111273956B (zh) 2020-01-17 2020-01-17 一种程序模块加载方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN111273956A CN111273956A (zh) 2020-06-12
CN111273956B true CN111273956B (zh) 2024-03-01

Family

ID=70997327

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010054899.0A Active CN111273956B (zh) 2020-01-17 2020-01-17 一种程序模块加载方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111273956B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107656738A (zh) * 2017-10-16 2018-02-02 武汉斗鱼网络科技有限公司 一种Android中模块结构设计方法及装置
CN108170493A (zh) * 2017-12-27 2018-06-15 广州安食通信息科技有限公司 一种系统模块的加载方法、系统及装置
CN108446144A (zh) * 2018-03-12 2018-08-24 武汉斗鱼网络科技有限公司 一种应用程序启动方法、装置、终端及存储介质
CN109165055A (zh) * 2018-08-30 2019-01-08 百度在线网络技术(北京)有限公司 一种组件加载方法、装置、计算机设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107656738A (zh) * 2017-10-16 2018-02-02 武汉斗鱼网络科技有限公司 一种Android中模块结构设计方法及装置
CN108170493A (zh) * 2017-12-27 2018-06-15 广州安食通信息科技有限公司 一种系统模块的加载方法、系统及装置
CN108446144A (zh) * 2018-03-12 2018-08-24 武汉斗鱼网络科技有限公司 一种应用程序启动方法、装置、终端及存储介质
CN109165055A (zh) * 2018-08-30 2019-01-08 百度在线网络技术(北京)有限公司 一种组件加载方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN111273956A (zh) 2020-06-12

Similar Documents

Publication Publication Date Title
US9934005B2 (en) Dynamically building locale objects or subsections of locale objects based on historical data
US9619211B2 (en) Code suggestion in a software development tool
EP0938050A2 (en) Modular storage method and apparatus for use with software applications
US20240045850A1 (en) Systems and methods for database orientation transformation
US20200249925A1 (en) On-demand loading of dynamic scripting language code for reduced memory usage
US20100325612A1 (en) Selecting a Set of Candidate Code Expressions from a Section of Program Code for Copying
CN108920566B (zh) 一种对SQLite数据库的操作方法、装置及设备
CN113971037A (zh) 应用处理方法、装置、电子设备及存储介质
CN111913694A (zh) 一种自动识别平台编译的方法和系统
CN113760306A (zh) 安装软件的方法、装置、电子设备及存储介质
US6592628B1 (en) Modular storage method and apparatus for use with software applications
CN114706533A (zh) 一种基于gpt分区表的多文件多级启动加载方法及装置
CN114003269A (zh) 组件处理方法、装置、电子设备及存储介质
CN113377342B (zh) 一种项目构建方法、装置、电子设备及存储介质
KR20140068943A (ko) 유연성을 갖춘 메타데이터 구성 기법
CN111273956B (zh) 一种程序模块加载方法、装置、设备及存储介质
US9201937B2 (en) Rapid provisioning of information for business analytics
CN110955632A (zh) 一种文件索引生成方法及装置
CN113590221B (zh) 着色器变体数量的检测方法、装置、电子设备及存储介质
CN111460137B (zh) 一种基于主题模型的微服务关注点识别方法、设备及介质
CN113672465A (zh) 进程名生成进程日志系统的方法、系统、介质、终端、无人机
CN112114811A (zh) 一种编译方法、装置和设备
CN112364580A (zh) 自动在寄存器传输级设计文件中插入特定代码的方法及装置
US8135943B1 (en) Method, apparatus, and computer-readable medium for generating a dispatching function
CN113590225B (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
GR01 Patent grant
GR01 Patent grant