Gradle时序

使用Gradle wrapper执行task

如果你本地安装了Gradle,那么你就可以使用gradle命令来直接构建。如果本地没有安装,那么可以通过gradle wrapper来构建,Linux和MAC使用./gradlew,而Windows上面则使用gradlew,还可以在 gradle/gradle-wrapper.properties中配置 Gradle 版本。
Android Studio中还可以通过可视化工具完成gradle版本的配置,操作步骤为:File -> Project Structure -> Project中可更改Android Gradle 插件版本与Gradle版本。

Gradle脚本执行时序:

Gradle脚本执行分为三个步骤:

1.初始化

分析有哪些module需要被构建,为每个module创建Project对象。此时setting.gradle文件会被解析。setting.gradle文件对应Setting对象。
include ':app', ':base', ':corelibrary'
include对应Settinginclude方法,该方法含义就是添加给定的项目去构建。

2.配置

配置阶段是处理所有模块的build脚本,处理依赖属性等。这时候各个module的build.gradle会被解析。同时构建整个task的链表。这里的链表不是数据结构中的链表而是存在依赖关系的task的集合。

3.执行

根据task链表执行特定的task。

下面我们构建一个工程来验证一下:
工程结构如下:
主工程依赖codelibrary工程,codelibrary工程依赖base工程。

setting.gradle添加输出日志

println('setting.gradle start')
include ':app', ':base', ':corelibrary'
println('setting.gradle end')

app的build.gradle文件:

println('app gradle start')
apply plugin: 'com.android.application'
project.afterEvaluate {

    println('app afterEvaluate start')
    println('appafterEvaluate end')
}

gradle.buildFinished{
    println('app buildFinished start')
    println('app buildFinished end')
}

println('app gradle end')

corelibrary的build.gradle文件:

println('corelib gradle start')
apply plugin: 'com.android.library'
...
dependencies {
    ...
    api project(path : ':base')
}
println('corelib gradle end')

base的的build.gradle文件:

println('base gradle start')
apply plugin: 'com.android.library'
...
project.afterEvaluate {
    println('base afterEvaluate start')
    println('base afterEvaluate end')
}
println('base gradle end')

命令行输入:

gradlew clean(任意一个task)

输出如下日志:

E:\stydy\gradleStudy>gradlew clean
setting.gradle start
setting.gradle end

> Configure project :
main gradle start
main gradle end

> Configure project :app
app gradle start
app gradle end
app afterEvaluate start
appafterEvaluate end

> Configure project :base
base gradle start
base gradle end
base afterEvaluate start
base afterEvaluate end

> Configure project :corelibrary
corelib gradle start
corelib gradle end

> Task :clean UP-TO-DATE
> Task :app:clean
> Task :base:clean
> Task :corelibrary:clean
app buildFinished start
app buildFinished end

可以看到Gradle执行遵循如下规则:

1.解析setting.gradle来获取模块信息。这是初始化阶段
2.配置阶段解析每个模块的build.gradle,配置阶段不执行
3.配置完成后执行project.afterEvaluate,代表可以执行task了
4.执行task
5.task执行完成后执行gradle.buildFinished,此时能够知道task已经执行完成了
注意:project.afterEvaluate可以注册多个,执行顺序是按照注册顺序。

你可能感兴趣的:(Gradle时序)