多模块构建的结构

通常情况下,一个工程包含多模块,这些模块会在一个父目录文件夹下。为了告诉gradle,该项目的结构以及哪一个子文件夹包含模块,需要提供一个settings.gradle文件。每个模块可以提供其独立的build.gradle文件。

多模块项目结构如下:

androidstudio中怎么添加aar的依赖 android studio添加依赖库_依赖包

需要做的就是在settings.gradle中声明项目中的所有模块include ':device', ':cqdeviceset'复制代码

可以看到这里没有as 新建项目时默认的模块app,  这也是可以修改的, 将app重命名并在settings.gradle中声明即可, 在我的项目中改为device.

同时项目中还引入了外部SharedLib作为依赖包

先看下依赖包结构

androidstudio中怎么添加aar的依赖 android studio添加依赖库_图形化_02

具体引入步骤如下:settings.gradle中声明

include ':SharedLib'
project(':SharedLib').projectDir = new File('../SharedLib')//依赖包地址
include ':SharedLib:DeviceLib' //依赖包中包括的子模块复制代码

2.  在需要使用该依赖包的模块的build.gradle文件中添加以下内容:

dependencies {
compile project(':SharedLib:DeviceLib')
}复制代码

为了给模块添加依赖,你需要使用project()方法,该方法的参数为模块路径。

构建生命周期

初始化阶段,gradle会寻找到settings.grade文件。如果该文件不存在,那么gradle就会假定你只有一个单独的构建模块。如果你有多个模块,settings.gradle文件定义了这些模块的位置。如果这些子目录包含了其自己的build.gradle文件,gradle将会运行它们,并且将他们合并到构建任务中。模块tasks

项目中有多个模块的时候,  如何多模块同时编译? 只需要在terminal运行

gradlew assembleRelease

复制代码

如何运行指定模块?同样只需要在terminal运行

gradlew :device:assembleRelease

复制代码

如果想同时编译多个模块(我的项目中有7个模块),只需要在terminal运行

gradlew :mqupload:assembleRelease :mqdownload:assembleRelease复制代码

gradle图形化

当有多个模块,Android studio会分析出来,并且展示在gradle中,点击AS右侧的gradle即可看到,结构如下图:

androidstudio中怎么添加aar的依赖 android studio添加依赖库_依赖包_03

grade图形化让运行模块间的任务变得简单,但是其没有为所有模块同时运行一个任务,所以最快的方式是使用命令行。加速多模块构建

当构建多模块项目,gradle会依次执行所有的模块。当电脑内存够大的时候,使构建过程多线程将会更快。该特性在gradle早已存在,但是其默认关闭。

所以如果你希望启动parallel构建,你需要在grade.properties文件中配置如下属性:

org.gradle.parallel=true复制代码

gradle会选择尽可能多的线程去执行你的构建过程,每个线程都会执行一个模块。parallel执行的是独立的模块,即你的模块是独立的。