【白水日记】Gradle
关于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(newBuildAdapter(){@OverridevoidsettingsEvaluated(Settings settings){super.settingsEvaluated(settings)println("life-cycle: 初始化") }@OverridevoidprojectsEvaluated(Gradle gradle){super.projectsEvaluated(gradle)println("life-cycle: 配置") }@OverridevoidbuildFinished(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}") }