Bootstrap

Gradle的生命周期

进入本节算是gradle入门了,作为安卓开发编译器(AS/idea)的默认构建工具,gradle也是十分重要的。你对或许会对project、Task、build这些词有些熟悉但又陌生。本章开始便带你解开迷惑。

一、简介
1、gradle是什么,能做什么?

和maven、ant一样是一个强大的构建工具,使用构建工具来描述它还不能凸显他的强大,确切的说应该是编程框架。

2、gradle组成

groovy语法(相当于安卓使用java)
build script block(点build文件)
gradle api(和安卓一样在java的基础上还有添加了自己的api)

3、和maven ant相比的优势
  • 更灵活:maven\ant构建程序时不能修改构建的过程(构建脚本)。(例如修改打包出的apk名字gradle就可轻松做到)

  • 粒度性:maven\ant构建程序时源代码和构建工具相互独立。我们不知道源码做了什么。
    gradle从源码的编译、资源的编译、生成一个个Task逐个执行Task。Task源码开源。

  • 扩展性:支持插件机制

  • 兼容性:兼容所有ant、maven功能。

二、生命周期

也就是各种任务(Task)的执行过程。
ps:任务也有依赖性,某个任务执行如果依赖其他任务,则需要执行完其他任务。再执行此任务。

1、声明周期的三个阶段

(1)情景回顾

特别是安卓开发中会经常看到这个界面(如下图),点击clean、或者build让工程clean下,或者build下。这时下面窗口就会出现相应的log,诸如Executing task xxxConfigure projectBUILD SUCCESSFUL in 0s之类的,其实这些过程就是gradle执行声明周期的一些流程。

在这里插入图片描述

(2)生命周期的三个阶段

在这里插入图片描述

1、initialization:初始化阶段

执行工程的setting.gradle文件。 解析整个工程下的所有Project,构建所有的Project对应的project对象

2、Configuration:配置阶段

解析所有project对象中的task,构建好所有的task拓扑图(有向无环图)。
这个有向无环图其实就是各个执行一个Task所依赖的其他Task而形成的一种关系图。

3、Excution:执行阶段
执行具体的task,及其依赖的task(先执行目标Task依赖的Task,再执行目标Task)

如上情景回顾的实例图,用户可以通过命令行输入命令,或者通过右面的Gradle窗口的Task下双击Task名执行Gradle任务。上图执行了clean命令。观察上图发现:
1、19:04:22: Executing task ‘clean’…这里开始初始化
2、Configure project :这里开始配置
3、Task :clean执行任务(clean没有依赖其他的Task所以直接执行了clean,你如果执行build任务,或在执行前先执行build依赖的task)

2、声明周期的常见监听方法

tips:Project,Task,是Gradle提供的api。

建立个Gradle工程

和建立什么HelloWord项目一样,一直next即可,建立完成后会有如下两个点gradle文件。
1、由上我们知道你执行一个任务时,会先读取这个setting.gradle完成工程初始化、配置、然后再执行具体任务。
2、在看看Build.gradle文件,其实他就是一个任务名,即Task的名字。和上文的clean一样是一个任务。我们可以在命令行输入 gradle build或者右面的Gradle窗口,双击Task先的build即可执行build任务。这时便会执行build.gradle内部的代码的。

在这里插入图片描述
(1)初始化结束/配置开始阶段的监听

this.beforeEvaluate {}

(2)配置阶段完成后的监听

this.afterEvaluate {}

(3)执行任务完成

this.gradle.buildFinished {}

(4)初始化阶段开始

只需在setting.gradle 文件中写逻辑即可,我们知道这里肯定会在初始化之前执行。

3、声明周期监听Demo

(1)setting.gradle

rootProject.name = 'Test'
println("初始化阶段开始")

(2)build.gradle

plugins {
    id 'groovy'
}

group 'Test'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
//----------------------------以上为系统的,以下为我们自己写的回调demo------------------------------------
//配置阶段开始前 监听回调
this.beforeEvaluate {}

// 配置阶段完成后
this.afterEvaluate {
    println("配置完成后")
}

this.gradle.buildFinished {
    println("执行阶段执行完毕")
}

(3)随便执行个Task

我们就执行个系统自带的Task-clean,如下图2双击clean即可,当然你也可以命令行以命令方式执行也可如下图1。

在这里插入图片描述

图1

在这里插入图片描述

图2

(4)观察结果

在这里插入图片描述

4、其他常见监听方式
//等同beforeEvaluate
this.gradle.beforeProject {}
//等同配置阶段完成后
this.gradle.afterProject {}

还有以addListener方式添加,等以后学习Gradle api后再了解

The end

下节便开始探讨Project,溜溜球。。。。

;