【白水日记】Gradle

2021-03-04  本文已影响0人  d2665f7588cb

    关于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}")    }

上一篇下一篇

猜你喜欢

热点阅读