【白水日记】gradle

63 阅读1分钟
关于gradle,是我们熟悉又陌生的事物,每次运行项目都在用,但是一些细节,却不太了解,不如做一次查缺补漏

gradle是一种自动化构建工具,基于Groovy来声明项目配置

Groovy的语法和java很相近,支持byte,short,int,long,float,double,char类型

定义变量:

int a = 1

def b = 2

String str = "123"

定义数组:

def array = [1,2,3,4]
array.add(5)

定义map:

def map = ["name:"123"]

循环:

for(int i = 0;i<10;i++){
    println("i is $i")

}


再引入一个dsl的概念,域特殊语言,是一种闭包,开放的匿名代码块,可以入参,有返回值,可以赋值给变量

{[params->] }

def a = {println("aaa")}

a()

有一个参数时,默认为it

多个参数时候,需要指定名字



回归到Android项目中,可以分为三类gradle


settings.gradle
声明当前工程包含哪些子工程 

build.gradle
    根目录:定义所有子工程共用的配置
    子工程:针对当前子工程行为的配置 


gradle.properites
配置开关参数 


gradle的生命周期:初始化,配置,执行

监听各个生命周期的回调,可以实现:

gradle.addBuildListener(new BuildAdapter(){ @Override void settingsEvaluated(Settings settings) { super.settingsEvaluated(settings) println("life-cycle: 初始化") } ​ ​ @Override void projectsEvaluated(Gradle gradle) { super.projectsEvaluated(gradle) println("life-cycle: 配置") } ​ ​ @Override void buildFinished(BuildResult result) { super.buildFinished(result) println("life-cycle: 构建结束") } })

初始化:收集需要构建的工程,创建层次,为每个项目创建project实例

settings.gradle在初始化之前执行 配置阶段:执行各个目录下的build.gradle脚本,根据配置关系,并生成关系图,先执行根目录,再执行子目录 执行:根据依赖关系,按顺序执行task

常用的对象:

project rootProject
本质都是接口

打印目录:

println("root:{$rootProject.projectDir()}") root:{/Users/chip/project/TestGradle()} 遍历所有子工程:

gradle.rootProject.childProjects.each { name,p-> println("name:{name}+path:{p.projectDir}") }