首页> 中国专利> 项目开发中模块的独立化实现方法、装置、设备及介质

项目开发中模块的独立化实现方法、装置、设备及介质

摘要

本发明实施例公开了项目开发中模块的独立化实现方法、装置、设备及介质。该方法包括遍历当前所关联的目标项目,获得目标项目中包括的各功能模块;确定各功能模块在所预设各编译需求场景中的归属划分,并对应各编译需求场景生成编译任务项;监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作。利用该方法能够确定不同编译需求场景下想要编译的功能模块,并对应不同的编译需求场景生成了编译任务项,由此可以在任务项被触发时只对该任务项所对应编译需求场景下关联的功能模块进行编译。该种方式实现了所开发项目中功能模块编译的独立化,有效的缩短了项目开发中的编译时间,提高了项目开发效率。

著录项

  • 公开/公告号CN112527306A

    专利类型发明专利

  • 公开/公告日2021-03-19

    原文格式PDF

  • 申请/专利权人 百果园技术(新加坡)有限公司;

    申请/专利号CN202011165177.9

  • 发明设计人 施旺;

    申请日2020-10-27

  • 分类号G06F8/41(20180101);

  • 代理机构11332 北京品源专利代理有限公司;

  • 代理人孟金喆

  • 地址 新加坡巴西班让路枫树商业城30号楼15层31A

  • 入库时间 2023-06-19 10:19:37

说明书

技术领域

本发明实施例涉及应用软件项目开发技术领域,尤其涉及项目开发中模块的独立化实现方法、装置、设备及介质。

背景技术

随着新一代安卓打包/发布技术Android App Bundle,AAB的推广,基于AAB组织架构的应用软件项目开发也越来越普及。而基于该AAB组织架构所开发的功能模块包括动态模块,这类动态模块具备的特点为在用户首次安装所开的的应用软件时,无需一同安装,可以在需要这些功能模块时再动态的下载安装。同时,基于AAB组织架构进行项目开发中,随着动态模块的引入可以让项目的架构更加清晰,又能使得用户可以按需下载动态模块减少应用包体积的大小,可以看出,当前相当于实现了功能模块在用户使用时下载安装的独立化。

一般来说,对于面向安卓系统的应用软件项目开发,需要在开发阶段对所开发的功能模块进行编译以及将编译后的功能模块安装到终端设备上查看运行效果。现有对功能模块的编译及安装实现主要基于项目开发平台中自带的编译功能,然而,通过该种编译方式,当存在编译需求(如开发了某个功能模块,或者某个功能模块被修改)时,每次都需要对所开发应用软件中所有功能模块都进行编译,之后安装时则需要对编译后的所有模块都进行安装。

采用现有编译及安装方式,对于中大型项目开发来说,随着项目的迭代,工程的代码规模越来越大,而日常开发过程中进行编译和安装所占用的时间度就会越来长。如,有的中大型项目全量编译和安装可能需要10分钟甚至更长时间,由此将会严重影响应用软件的项目开发效率。

发明内容

有鉴于此,本发明实施例提供了项目开发中模块的独立化实现方法、装置、设备及介质,以缩短所开发项目中功能模块编译及安装时间,提高项目开发效率。

第一方面,本发明实施例提供了一种项目开发中模块的独立化实现方法,包括:

遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;

确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;

监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

第二方面,本发明实施例提供一种项目开发中模块的独立化实现装置,包括:

信息获取模块,用于遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;

信息生成模块,用于确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;

编译执行模块,用于监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

第三方面,本发明实施例提供了一种计算机设备,包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明第一方面实施例提供的项目开发中模块的独立化实现方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明第一方面实施例提供的项目开发中模块的独立化实现方法。

本发明实施例提供的项目开发中模块的独立化实现方法、装置、设备及介质中,首先遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;然后确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;最终监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。上述技术方案,与常规对所开发项目进行编译的方法相比,能够根据不同的编译需求场景来确定不同编译需求场景下想要编译的功能模块,并对应不同的编译需求场景生成了编译任务项,由此可以在任务项被触发时只对该任务项所对应编译需求场景下关联的功能模块进行编译。该种方式实现了所开发项目中功能模块编译的独立化,有效的缩短了项目开发中的编译时间,提高了项目开发效率。

附图说明

图1给出了本发明实施例一提供的一种项目开发中模块的独立化实现方法的流程示意图;

图1a给出了安卓应用软件项目开发中现有基于AAB动态模块的模块化项目架构图;

图2给出了本发明实施例二提供的一种项目开发中模块的独立化实现方法的流程示意图;

图2a给出了本发明实施例二所提供方法中编译任务项呈现的效果展示图;

图2b给出了本发明实施例二所提供项目开发中模块的独立化实现中进行目标动态模块编译的实现流程图;

图2c给出了本发明实施例中功能模块采用几种不同编译方法进行编译时的效果比对图;

图2d给出了本发明实施例二所给定可选实施例内功能模块安装确定的实现流程图;

图2e给出了本可选实施例中功能模块在具备不同安卓系统版本号的终端设备上进行安装时的效果展示图;

图3给出了本发明实施例三提供的一种项目开发中模块的独立化实现装置的结构框图;

图4给出了本发明实施例四提供的一种计算机设备的硬件结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施例方式作进一步地详细描述。应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

在本申请的描述中,需要理解的是,术语“第一”、“第二”、“第三”等仅用于区别类似的对象,而不必用于描述特定的顺序或先后次序,也不能理解为指示或暗示相对重要性。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。

实施例一

图1给出了本发明实施例一提供的一种项目开发中模块的独立化实现方法的流程示意图,该方法适用于对所开发项目中功能模块进行独立化管理的情况,该方法可以由项目开发中模块的独立化实现装置执行,其中,该装置可以由软件和/或硬件实现,并一般可作为插件集成在安装有项目开发平台软件的计算机设备上。

本实施例所提供项目开发中模块的独立化实现方法的应用背景可描述为:安卓操作系统为智能移动终端(如智能手机以及平板等)现有正常工作所依赖的一种常规操作系统。智能移动终端上所安装的各种应用软件都需要在安卓操作系统兼容的前提下进行开发,在安卓应用软件开发平台Android Studio上进行应用软件项目开发时,当应用软件中进行了新的功能代码增加或者已有代码修改后,需要通过Android Studio自带的编译工具对应用软件中的所用功能模块重新进行编译,然后将编译后的文件重新安装(开发阶段的安装)到移动终端上。

为便于更好理解基于Android Studio平台自带编译工具进行编译的过程,图1a给出了安卓应用软件项目开发中现有基于AAB动态模块的模块化项目架构图,并结合该架构图给出了现有官方进行编译操作的实现过程描述:首先,目前基于AAB动态模块的项目架构跟最初传统的Android模块化架构不同之处在于引入了动态模块Dynamic-feature,例如,图1a中的动态模块A和动态模块B,这些动态模块是向下一来APP模块的。之后,在AndroidStudio中执行编译时,如果编译模式默认为自带编译工具编译,且所连接终端设备上安卓操作系统的版本在设定版本号(如Android5.0)之上,现有的编译实现就需要处于App模块中的所有功能模块,以及所有动态模块都参与编译任务的执行,即:执行app:assembleDebug:Dynamicfeature-a:assembleDebug:Dynamicfeature-b:assemble Debug的操作。之后可以得到三个格式为apk的编译文件:base.apk,Dynamicfeature-a.apk以及Dynamicfeature-b.apk;最终,通过运行安装指令来实现所获得各编译文件到终端设备的安装。

对于中大型安卓应用软件开发项目来说,采用上述编译方式进行编译,因编译过程复杂,极大地影响了整个项目开发效率。基于此,本实施例提供了一种项目开发中模块的独立化实现方法,来对所开发项目中功能模块的编译甚至安装进行优化。

需要说明的是,本实施例所提供的项目开发中模块的独立化实现方法可以作为一个插件,在对目标项目中功能模块进行编译甚至安装管理前,需要先将形成的插件引入到选中待进行独立化管理的项目中。具体的,执行本实施例所提供方法的插件可以通过相应的路径配置结合到待独立化管理的项目中。示例性的,所进行的路径配置可以是:xxxx.yyyy.mobile.android.toolkit:plugin:2.0.1,其中,xxxx以及yyyy可以为项目所关联的信息项,如项目名等,可根据不同的项目进行不同的填充。之后,还需要在进行一步展示所引入插件内容的配置操作,如:apply plugin:'xxxx.yyyy.mobile.android.toolkit。

进行了上述配置后的项目相当于具备了采用本发明实施例所提供方法对功能模块进行编译甚至安装的独立化管理的功能,具体的,如图1所示,本发明实施例一提供的一种项目开发中模块的独立化实现方法,具体包括如下操作:

S101、遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块。

在本实施例中,所述目标项目具体可看作进行了上述插件配置操作的项目,可认为是本实施例当前所关联的项目,可以通过本步骤直接对项目进行遍历,以此可以过滤出该目标项目包括的所有App模块以及动态模块,本实施例将这些模块统称为功能模块。

S102、确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项。

需要说明的是,本实施例可以根据项目开发过程中经常遇到的主要使用情况,来预先设定对功能模块进行编程时可能存在的编译需求场景,可以知道的是,不同的编译需求场景下需要进行编译操作的功能模块可能不同,本步骤可以从已获得的各功能模块中进行功能模块到不同编译需求场景的归属划分。然后对应各不同编译需求场景分别生成相关的编译任务项。

具体的,本步骤可以通过不同编译需求场景对应的相关场景描述信息来确定哪些功能模块适合在其编译需求场景下进行编译,之后在生成触发编译所关联功能模块的编译任务项。其中,所述编译任务项可以呈现在项目开发工具的视图区域中,以供开发人员在需要时点击触发。

本实施例进一步对功能模块进行了优化,如,可以优化各所述功能模块分别具备相应的模块属性,所述模块属性为基础型或动态型。

需要说明的是,上述S101执行功能模块遍历的过程中在获得各功能模块的同时还可以根据功能模块的一些前缀信息确定其具备的模块属性,如前缀信息为"com.android.application"的App模块可看作模块属性基础型的功能模块,前缀信息为com.android.dynamic-feature的则可看作模块属性为动态型的功能模块。

同时,本实施例进一步优化所述编译需求场景可以包括:只编译和安装模块属性为基础型的所有功能模块、只重新编译属性为基础型的所有功能模块并安装全部功能模块、只重新编译模块属性为动态型的任一功能模块并安装全部功能模块、以及只重新编译模块属性为动态型的所有功能模块并安装全部功能模块;其中,在只重新编译模块属性为动态型的任一功能模块并安装全部功能模块的需求场景中,模块属性为动态性的每个功能模块,均对应存在一个编译任务项。

在本实施例中,上述给出了5种具备不同需求情况的编译需求场景,通过本步骤的操作,可以为各编译需求场景分别确定出归属划分到其下的功能模块,示例性的,对于只编译和安装模块属性为基础型所有功能模块的编译需求场景,本步骤可以将模块属性为基础型的所有功能模块归属划分到该场景下。

又如,对于只重新编译模块属性为动态型的任一功能模块并安装全部功能模块的编译需求场景,可以将模块属性为动态性的功能模块分别看作一个独立个体归属划分到场景下,同时,对于该类需求场景,可以对应每个功能模块分别生成一个编译任务项,即,该类需求场景下相当于存在与动态性功能模块数量相同个的编译任务项。

可以看出的是,各编译需求场景中还附带了编译后的安装要求,本实施例后续还给出了功能模块的安装实现,该安装实现可以在所提供方法的安装阶段根据编译需求场景中的安装要求实现功能模块到终端设备的安装。

进一步地,各所述编译任务项包含在第一编译任务列表中呈现在所述目标项目所依赖开发平台的视图区域中;所述编译任务项的命名信息至少包括:所述目标项目的参数名flavor和构建类型buildType以及需求场景描述信息。

此外,本实施例可以进一步对编译任务项进行了优化限定。具体的,本步骤生成的编译任务项可以作为子任务包含在一个第一编译任务列表中,该第一编译任务列表可以展示在目标项目所依赖的开发平台中,并主要展示在该开发平台的视图区域中。

示例性的,以开发平台Android Studio为例,包含本实施例所提供方法的插件通过配置引入至该目标项目后,对该目标项目进行整体刷新后,可以在Android Studio右侧的Gradle视图中呈现出第一编译任务列表,且第一编译任务列表下可以呈现出本步骤按照编译需求场景生成的各编译任务项。

同时,本实施例还对编译任务项的命名信息进行了限定,对于每个编译任务项而言,其任务项的命名中首先包含了目标项目的参数名flavor和构建类型buildType,之后包含了该编译任务项所对应编译需求场景的描述信息,如一个命名为GpEngDebug_runOnlyBase的编译任务项,GpEngDebug为目标项目中的flavor+buildType,runOnlyBase为只对基础型的功能模块进行编译的描述信息。

S103、监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

本步骤具体实现了编译任务项的监听以及编译任务项所关联目标功能模块的编译执行。

具体的,上述生成的每个编译任务项都可以通过开发人员的操作(如双击编译任务项)而被触发,本步骤可以监测到开发人员对各编译任务项是否进行了触发操作,并将监测到进行了触发操作的编译任务项看作目标编译任务项。该目标编译任务项与其中一个编译需求场景对应,所对应的编译需求场景存在所关联的功能模块,本实施例记为目标功能模块,本步骤可以在确定出目标功能模块后,启动对该目标功能模块的编译操作。

本发明实施例一提供的一种项目开发中模块的独立化实现方法,与常规对所开发项目进行编译的方法相比,能够根据不同的编译需求场景来确定不同编译需求场景下想要编译的功能模块,并对应不同的编译需求场景生成了编译任务项,由此可以在任务项被触发时只对该任务项所对应编译需求场景下关联的功能模块进行编译。该种方式实现了所开发项目中功能模块编译的独立化,有效的缩短了项目开发中的编译时间,提高了项目开发效率。

实施例二

图2给出了本发明实施例二提供的一种项目开发中模块的独立化实现方法的流程示意图,本实施例以上述实施例为基础进行优化,在本实施例中,进一步将确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项具体化为:解析并确定各所述功能模块的模块属性;针对每个编译需求场景,根据各所述模块属性及所述编译需求场景的场景描述信息,确定所述编译需求场景下归属的功能模块;按照所述编译需求场景对应的编译生成规则,生成编译所关联各功能模块所需的编译任务项。

此外,本实施例在获得所述目标项目中包括的各功能模块之后还优化包括了从各所述功能模块中提取模块属性为动态型的各动态模块;按照预设的升级编译生成规则,对应各所述动态模块分别生成升级编译任务项。

同时,在上述优化的基础上,本实施例还包括了确定当前满足目标升级编译任务项的运行条件后,执行对所述目标升级编译任务项所对应目标动态模块的编译操作,其中,所述目标升级编译任务项为任一升级编译任务项。

如图2所示,本发明实施例二提供的一种项目开发中模块的独立化实现方法,具体包括如下操作:

S201、遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块。

示例性的,将包含本实施例所提供方法的插件引入所开发的项目,该项目相当于当前所关联的目标项目,之后可以通过本步骤获得具备不同模块属性的功能模块。

本实施例下述S202至S204,给出了生成编译任务项的具体实现。

S202、解析并确定各所述功能模块的模块属性。

在本实施例中,可以对上述获得的各功能模块进行解析,由此获得各功能模块的模块属性。

S203、针对每个编译需求场景,根据各所述模块属性及所述编译需求场景的场景描述信息,确定所述编译需求场景下归属的功能模块。

在本实施例中,根据开发过程中可能出现的主要使用场景预先所设置的编译需求场景主要通过相应的场景描述信息来表达,本步骤及下述S204可相当于对每个编译需求场景所执行的操作。

具体的,对于每个编译需求场景,其所对应的场景描述信息中包含了该编译需求场景下期望进行编译的功能模块的相关描述,由此,在已知各功能模块的模块属性后,可以通过对场景描述信息的解析,确定其所对应编译需求场景下与哪些功能模块所关联。

示例性的,假设一个编译需求场景为只重新编译模块属性为动态型的所有功能模块并安装全部功能模块,则从其对应的场景描述信息中可以分析出该编译需求场景期望进行编译的功能模块是模块属性为动态型的全部功能模块,因此,可以将模块属性为动态型的全部功能模块确定为该编译需求场景下归属的功能模块。

S204、按照所述编译需求场景对应的编译生成规则,生成编译所关联各功能模块所需的编译任务项。

可以理解的是,在编译需求场景不同时,其对应的编译生成规则也存在不同,所述编译生成规则的设定具体可认为与该编译需求场景下关联的功能模块有关,如,编译生成规则中可能包含了将要编译的各功能模块的代码信息的提取控制,不同的编译需求场景所对应编译生成规则中进行代码信息提取的控制信息就可以存在不同。

通过本步骤的操作,可以为各不同的编译需求场景分别生成相应的编译任务项,而所生成的编译任务项则主要可用于展示给开发人员,以通过开发人员的操作来触发该编译需求场景所关联功能模块的编译。

本实施例下述S205及S206则主要给出了另一种形成编译任务项的生成实现,其中,本实施例将要生成的另一种形式的编译任务项可相当于上述所生成编译任务项在编译实现上的一种升级,但该种形式的编译任务项在触发执行时又依赖于上述所生成编译任务项的执行。

S205、从各所述功能模块中提取模块属性为动态型的各动态模块。

本步骤可看作上述S202的并列步骤,同样需要在S201后执行,因此,可以知道的是,本实施例提供的方法流程步骤,各步骤不序号并不限定相关步骤的具体执行顺序,各步骤的具体执行顺序主要与本实施例所提供方法的具体执行逻辑有关。

本步骤可以在上述S201获得各功能模块之后,进一步从各功能模块中提取出模块属性为动态型的所有功能模块,并将这些功能模块记为动态模块。可以看出通过本步骤及下述S206生成的另一种形式的编译任务项只针对模块属性为动态型的功能模块,且该种形式的生成的每个编译任务项分别对应一个动态模块。

S206、按照预设的升级编译生成规则,对应各所述动态模块分别生成升级编译任务项。

需要知道的是,本实施例通过本步骤所生成的各编译任务项实际上相当于每个动态模块在上述所对应编译任务项基础上的再一次升级,本实施例将生成这些编译任务项所采用的生成规则记为升级编译生成规则,相应的将最终生成的编译任务项记为升级编译任务项。同时,本实施例通过本步骤进行升级编译任务项生成时,因该种升级编译任务项只针对每个动态模块,并不存在编译需求场景的限定。

具体的,本步骤中的升级编译生成规则主要可用于限定不同升级编译任务项生成时所对应动态模块的代码信息提取,通过提取不同动态模块的代码信息,相应生成关联不同动态模块升级编译任务项。

此外,本实施例进一步对该升级编译任务项进行了限定,如,本实施例优化上述生成的各所述升级编译任务项包含在第二编译任务列表中,然后同样呈现在所述目标项目所依赖开发平台的视图区域内。示例性的,该第二编译任务列表与上述第一编译任务项可以相当于两个并列的任务列表,二者可同时呈现在目标项目所依赖开发平台的视图区域中。

本实施例可以采用与上述编译任务项类似的命名信息来进行任务项的相关命名。因为升级编译任务项只针对动态模块,可默认其对应的编译需求场景为只重新编译模块属性为动态型的任一功能模块并安装全部功能模块。由此,升级编译任务项命名中除了可以包括flavor+buildType的相关信息外,还包括了该任务项所对应功能性描述信息相关表达,如该功能行描述信息为对动态模块1的重新快速编译,其在升级编译任务项的命名中所具备的相关表达可以为runAll_updateLite_dunamicfeature1。

示例性的,图2a给出了本发明实施例二所提供方法中编译任务项呈现的效果展示图。如图2a所示,主要给出了开发平台Android Studio下的Gradle视图区域,该视图区域中包含了名称为rundynamic的第一编译任务列表21以及名称为rundynamiclite的第二编译任务列表22。可以看出,rundynamic列表中包括了对应5类编译需求场景的编译任务项211,其中,只重新编译模块属性为动态型的任一功能模块并安装全部功能模块的需求场景中对应每个模块属性为动态性的功能模块分别呈现一个编译任务项;rundynamiclite列表中则主要包含了分别对应各动态模块的升级编译任务项221。

S207、监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

在本实施例中,本步骤在执行逻辑上处于上述S204之后,具体可以实现对第一编译任务列表下各编译任务项的触发监测,并在监测到任一个编译任务项被触发时,就可以对所触发该目标编译任务项关联的各目标功能模块进行编译。

S208、确定当前满足目标升级编译任务项的运行条件后,执行对所述目标升级编译任务项所对应目标动态模块的编译操作,其中,所述目标升级编译任务项为任一升级编译任务项。

在本实施例中,本步骤在执行逻辑上处于上述S206之后,具体可以实现对第二编译任务列表下各升级编译任务项的运行条件监测,以及执行满足运行条件的目标升级编译任务项所对应目标动态模块的编译操作,其中,所述目标升级编译任务项为任一升级编译任务项。

本实施例中触发目标动态模块编译操作执行的运行条件具体可根据升级编译任务项与编译任务项之间的关联关系来设置,考虑到升级编译任务项是编译任务项在编译操作过程中的升级,因此,在进行运行条件设置时,需要考虑编译任务项的执行与否对升级编译任务项的影响。

本实施例进一步将所述目标升级编译任务项的运行条件优化为:监测到所述目标升级编译任务项被触发启动,且所述目标编译任务项关联的目标动态模块已基于相应的编译任务项进行过编译操作。

具体的,上述运行条件包括两个阶段的判定,一个阶段是监测到呈现在视图区域中的目标升级编译任务项被开发人员通过触发操作所触发,第二个阶段是判定上述被触发的目标升级编译任务项所对应的动态模块已经基于其所对应的编译任务项进行过编译操作。

可以理解的是,本步骤对目标动态模块执行的编译操作可认为是在基于其所对应编译任务项进行编译操作时的优化升级,通过本步骤实现的目标动态模块的编译操作,所花费的编译时间比基于编译任务项进行编译时所花费的时间还要短。此外,当监测到开发人员触发了目标升级编译任务项,但该目标升级任务项所关联的目标动态模块还未基于所关联编译任务项实现编译操作时,可以在目标项目所依赖开发平台的当前界面上进行不能通过该任务项实现动态模块编译的消息提示。

需要说明的是,本实施例相对动态模块的编译任务项进一步提出升级编译任务项的核心思想可描述为:对于模块属性为动态性的功能模块a而言,采用上述与其关联的编译任务项实现功能模块的独立编译时,需要执行的编译指令可表述为Dynamicfeature-a:assembleDebug,分析这个编译任务项的编译过程,可以发现其还会依赖模块属性为基础型的各功能模块以及图1a所示项目架构中library模块里的很多子任务,对这些子任务进行编译时会执行一些耗时任务(如javac和kotlinc等),特别是目标项目里还会有一些变量并需要实时更新,但每次进行编译时还会再次被执行,这样的编译依赖使得即使仅对每个动态模块进行独立编译,仍会存在不必要的编译耗时。本实施例考虑设计一种编译方式当只有动态模块本身代码发生变化时,在编译阶段能够只实现对动态模块所涉及子任务的编译,而其他内部不变的关联模块可以直接复用之前已经编译好的信息,本实施例上述给出的升级编译任务项以及通过升级编译任务项对目标动态模块的编译执行,就可看作本实施例所考虑编译方式的一种具体实现。

具体的,图2b给出了本发明实施例二所提供项目开发中模块的独立化实现中进行目标动态模块编译的实现流程图。如图2b所示,本实施例进一步将执行对所述目标升级编译任务项所对应目标动态模块的编译操作具体化为:

S2081、确定所述目标动态模块编译操作所依赖的关联模块。

基于上述设计升级编译任务项的核心思想的相关描述,可知在通过该目标升级编译任务项实现目标动态模块的编译操作时,可以先通过本步骤确定出对目标动态模块进行编译操作所依赖的各关联模块。

S2082、启动执行对所述目标动态模块的编译时,跳过对各所述关联模块的编译,获得所述目标动态模块的当前编译信息。

本步骤启动对目标动态模块的编译操作后,可以直接将上述确定出的关联模块对应的执行参数置为false或者直接生成跳过执行关联模块的命令行,以此来跳过关联模块的编译执行,由此可以仅对目标动态模块自身的一些子任务进行编译,并生成与该目标动态模块相关的当前编译信息。

S2083、复用各所述关联模块的历史编译信息结合所述当前编译信息,形成所述编译操作的编译文件。

本步骤可以从预先的缓存目录中获取到上述给关联模块的历史编译信息并且复用这些历史编译信息,将这些历史编译信息与上述步骤确定的当前编译信息相结合形成对该目标动态模块进行编译操作所对应的编译文件。

本发明实施例二提供的一种项目开发中模块的独立化实现方法,具体化了编译任务项的生成操作,通过优化增加了功能模块编译所需的另一种形式的升级编译任务项的生成操作。本实施例提供的方法,在将目标项目中功能模块的编译操作按照编译需求场景进行独立化,节省了功能模块编译所花费时间的基础上,还进一步对该种独立化的针对动态模块的编译操作再次进行升级编译。从而最大化节省了动态模块独立编译所花费的时间,进而有效提高了项目的开发效率,缩短了项目开发周期。

示例性的,图2c给出了本发明实施例中功能模块采用几种不同编译方法进行编译时的效果比对图。如图2c所示,图中主要给出了以目标项目中对某个动态模块采用不同编译方式进行编译所花费编译时间的效果展示,其中,图2c内给出的模块23这一项主要包括了4个不同的动态模块,AS的run按钮24这一项相当于采用现有的编译方式所花费的编译时间,runDynamic 25这一项相当于本实施例所提供编译方法内基于第一编译任务列表中编译任务项实现编译所花费的编译时间,runDynamicLite 26这一项相当于本实施例所提供编译方法内基于第二编译任务列表中升级编译任务项实现编译所花费的编译时间。

可以看出,采用AS的run按钮24对各动态模块编译所花费的编译时间最长,采用runDynamic 25对各动态模块编译所花费的编译时间相对现有方式有较明显的缩短,而采用runDynamicLite 26对各动态模块编译所花费的编译时间最短。本实施例图2c所提供的效果比对图也进一步说明了采用本实施例所提供的方法实现模块独立化编译时,有效的提升了项目开发效率。

同时,作为本发明实施例二的一个可选实施例,本可选实施例在上述实施例所提供项目开发中模块的独立化实现方法基础上,还优化增加了功能模块在安装上独立化实现的相关操作,如本实施例二中提供的图2所示,针对功能模块在安装操作上独立化的具体实现,本可选实施例还包括了下述操作:

可以理解的是,本可选实施例下述步骤具体可以在执行上述实施例一中的S103之后执行,也可以在执行本实施例上述S207或者S208之后执行,具体用于实现功能模块编译后所形成编译文件到终端设备上的安装运行,并可在完成安装后实现目标项目在终端设备上的自启动。

S209、在完成对待编译的功能模块的编译操作后,将对应形成的编译文件缓存至设定的文件目录中。

在本实施例中,本步骤中待编译的功能模块具体可以指目标编译任务项被触发后所对应的目标功能模块,也可以指目标升级编译任务项满足运行条件后所对应的目标动态模块,本步骤监测到待编译的功能模块完成编译操作后,可以直接将编译所形成的编译文件缓存至文件目录中。

其中,所述文件目录处于所述目标项目的根目录下。该文件目录可以预先设定,初始设定时该文件目录可以为空。示例性的,对待编译的功能模块完成编译操作后生成的apk格式的编译文件可以放在根目录的build/rundynamic/这个文件目录下,其中rundynamic可以看作缓存编译文件的文件目录的文件名,该文件名可以根据包含编译任务项的任务列表的命名来相应设定。

在本实施例中,所述文件目录中除缓存当前编译的各功能模块的编译文件外,还缓存有其他当前未进行编译的功能模块的apk编译文件,这些编译文件可以是之前已经存储在该文件目录下的历史编译文件,可以在安装操作时直接复用,假设文件目录中尚未存储某些功能模块的编译文件,则自动触发进行这些功能模块的编译操作,以此来生成相关的编译文件并存储至该文件目录。

S210、根据确定的安装形式从所述文件目录中选定待安装文件,并执行所述待安装文件到目标终端的安装操作及对所述目标项目的启动运行。

本实施例对上述待编译的功能模块完成编译后,可以自动执行功能模块到终端设备的安装操作。需要理解的是,根据本实施例上述对编译需求场景的描述可知,不同的编译需求场景下均包含了对功能模块进行安装的相关限定,且各编译需求场景下均需要实现目标项目中全部功能模块的安装。

由此,本实施例原则上相当于要实现的是目标项目中全部功能模块的自动安装,但在通过本实施例上述方法对功能模块进行独立编译的基础上,本实施例还可以灵活的来确定安装操作所对应的安装形式,通过安装形式的不同,实现全部功能模块到终端设备的安装时,实质待安装的编译文件可能存在不同,且相比于现在常规的安装方式,本实施例提供的模块的独立化安装在一定程度上缩短了项目的安装时间。

在本实施例中,所述目标终端具体可指将要进行目标项目安装的终端设备,所述目标终端上安装安卓操作系统。

具体的,本步骤可以在实现上述S209后自动执行,且为实现目标项目中功能模块到该目标终端的全部安装,本步骤首先可以根据目标终端上所安装安卓系统的版本来确定安装形式,然后根据安装形式从文件目录的编译文件中选定待安装文件,最终可以通过调用安装指令(如,void installPackages(Listapks,boolean reinstall,ListinstallOptions)形式将待安装文件安装至目标终端,然后可以执行Shell命令monkey-p packageName 1来打开目标项目所形成应用软件在目标终端上的首页,以此来实现目标项目在目标终端上的启动运行。

进一步地,图2d给出了本发明实施例二所给定可选实施例内功能模块安装确定的实现流程图,如图2d所示,本可选实施例将根据确定的安装形式从所述文件目录中选定待安装文件,并执行所述待安装文件到目标终端的安装操作及对所述目标项目的启动运行具体化为:

S2101、确定待安装的目标终端。

具体的,本实施例可以选择多个终端设备作为目标项目的安装设备,这些安装设备均可看作待安装的目标终端。可以知道的是,在项目开发中往往可以通过通用串行总线数据线将待进行安装的终端设备与开发目标项目所采用的计算机设备进行连接,本步骤可以自动识别出有哪些设备与开发目标项目所采用的计算机设备连接,如,可以通过AndroidDebugBridge建立一个Bridge,以此来识别出存在adb链接的设备列表,最终可以将识别出的终端设备作为本步骤中的目标终端。

S2102、确定所述目标项目是否为到所述目标终端的首次安装,若是,则执行S2103;若否,则执行S2104。

上述步骤确定出目标终端后,可以通过本步骤来检测目标终端上是否已经安装过目标项目,以此来确定当前是否为目标项目到目标终端的首次安装。并在不同的判定结果下执行不同的操作,如,可以在确定为首次安装时,执行S2103,以及在确定非首次安装时,执行S2104。

S2103、确定安装形式为全量安装,并将所述文件目录中全部功能模块对应的编译文件作为待安装文件。

本步骤考虑到目标项目到目标终端的首次安装,若要保证目标项目各功能模块的编译文件都能全部安装到目标终端上,需要将安装形式确定为全量安装,在全量安装的限定下,相当于将文件目录中全部功能模块对应的编译文件组均作为待安装文件。

S2104、根据所述目标终端上所安装操作系统的系统版本号,确定所述安装形式以相应的待安装文件。

在本可选实施例确定该目标项目不是到目标终端的首次安装时,可以执行S2104的操作,本步骤需要根据目标终端上所安装操作系统的系统版本号,来判定目标项目到目标终端上的具体安装形式,并可根据不同的安装形式确定不同的待安装文件。

其中,本步骤可进一步具体化为:获取所述目标终端上所安装操作系统的系统版本号;如果所述系统版本号低于设定版本阈值,则确定所述安装形式为全量安装,并将所述文件目录中全部功能模块对应的编译文件作为待安装文件;否则,确定所述安装形式为指定安装,并将触发目标编译任务项或目标升级编译任务项执行编译操作所形成的编译文件作为待安装文件。

具体的,当系统版本号低于设定版本阈值(如Android 10)时,认为目标终端只具备全量安装的权限,此时可认为安装形式为全量安装,而相应的需要将文件目录中全部功能模块对应的编译文件作为待安装文件。当系统版本号高于或等于设定版本阈值时,可以任务目标终端具备独立安装的能力,此时可将安装形式确定为指定安装,而指定安装下所对应的待安装文件可以是触发目标编译任务项或目标升级编译任务项执行编译操作所形成的编译文件。

示例性的,该待安装文件的获取可以通过对installPackages方法调用时所传入的apks列表中包含的apk路径来确定,该apk路径相当于对目标编译任务项或目标升级编译任务项所对应功能模块进行编译操作后生成的编译文件的缓存路径。

S2105、执行所述待安装文件到目标终端的安装操作及对所述目标项目的启动运行。

在本实施例中,本步骤还可以通过在installOptions参数下配置的指定包名参数:listOf("-t","-p",packageName),来实现待安装文件到目标终端的安装。之后,可以通过相应的指令操作来实现目标项目所关联应用软件的首页在目标终端上的显示。需要说明的是,本实施例通过上述方式实现模块独立化安装时,如果监测到独立安装失败,则可通过制定的兜底策略,采用全量安装的安装模式来实现目标项目到目标终端的安装。

本实施例上述可选实施例,具体给出了本实施例对功能模块进行的独立化安装的实现过程,本可选实施例可以通过所连接终端设备系统版本号的识别,在系统版本号高于设定版本阈值的终端设备上实现动态模块的独立化安装,有效的节省了项目开发测试过程中的项目安装时间,进而也实现了项目开发效率的提高。

示例性的,图2e给出了本可选实施例中功能模块在具备不同安卓系统版本号的终端设备上进行安装时的效果展示图。如图2e所示,图中主要给出了将一个目标项目采用不同的安装形式安装到具备不同Android系统版本号的各终端设备上时所花费安装时间的效果展示。

其中,图2e内给出的手机型号27这一项主要包括了5种不同型号的手机设备,Android版本28这一项主要给出了5种不同型号的手机设备上所安装Android系统的系统版本号;全量安装时间29这一项主要给出了5种不同型号的手机设备采用全量形式进行目标项目安装所花费的时间;单独安装动态模块时间20这一项主要给出了5种不同型号的手机设备采用指定形式实现动态模块独立安装所花费的时间。

可以看出,系统版本号低于Android10的手机设备不支持动态模块的独立安装,而具备动态模块的独立安装的手机设备上,采用独立安装所花费的时间明显小于全量安装所花费的时间。本实施例图2e所提供的效果比对图也进一步说明了采用本实施例所提供的方法实现模块独立化安装时,有效的提升了项目开发效率。

实施例三

图3为本发明实施例三提供的一种项目开发中模块的独立化实现装置的结构框图,该装置适用于对用户录制的语音进行说唱音乐转换的情况,其中,该装置可以由软件或硬件实现,并一般可集成在计算机设备上。如图3所示,该装置包括:信息获取模块31、信息生成模块32以及编译执行模块33。

信息获取模块31,用于遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;

信息生成模块32,用于确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;

编译执行模块33,用于监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

本发明实施例三提供的一种项目开发中模块的独立化实现装置,与常规对所开发项目进行编译的方法相比,能够根据不同的编译需求场景来确定不同编译需求场景下想要编译的功能模块,并对应不同的编译需求场景生成了编译任务项,由此可以在任务项被触发时只对该任务项所对应编译需求场景下关联的功能模块进行编译。该种方式实现了所开发项目中功能模块编译的独立化,有效的缩短了项目开发中的编译时间,提高了项目开发效率。

实施例四

图4给出了本发明实施例四提供的一种计算机设备的硬件结构示意图,具体地,该计算机设备包括:处理器和存储装置。存储装置中存储有至少一条指令,且指令由所述处理器执行,使得所述计算机设备执行如上述方法实施例所述的项目开发中模块的独立化实现方法。

参照图4,该计算机设备具体可以包括:处理器40、存储装置41、显示屏42、输入装置43、输出装置44以及通信装置45。该计算机设备中处理器40的数量可以是一个或者多个,图4中以一个处理器40为例。该计算机设备中存储装置41的数量可以是一个或者多个,图4中以一个存储装置41为例。该计算机设备的处理器40、存储装置41、显示屏42、输入装置43、输出装置44以及通信装置45可以通过总线或者其他方式连接,图4中以通过总线连接为例。

具体的,实施例中,处理器40执行存储装置41中存储的一个或多个程序时,具体实现如下操作:遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

本发明实施例还提供一种计算机可读存储介质,所述存储介质中的程序由计算机设备的处理器执行时,使得计算机设备能够执行如上述实施例所述的项目开发中模块的独立化实现方法。示例性的,上述实施例所述的项目开发中模块的独立化实现方法包括:遍历当前所关联的目标项目,获得所述目标项目中包括的各功能模块;确定各所述功能模块在所预设各编译需求场景中的归属划分,并对应各所述编译需求场景生成编译任务项;监测到目标编译任务项被触发后,对相应编译需求场景下关联的目标功能模块进行编译操作,其中,所述目标编译任务项为任一编译任务项。

需要说明的是,对于装置、计算机设备、存储介质实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是机器人,个人计算机,服务器,或者网络设备等)执行本发明任意实施例所述的项目开发中模块的独立化实现方法。

值得注意的是,上述项目开发中模块的独立化实现装置中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号