参考资料:
http://www.infoq.com/cn/articles/android-in-depth-gradle/
笔记:
1.gradle中每一个待编译的工程成为一个Project,每一个Project由许多Task组成,编译一个工程,就是执行这些Task,完成响应的任务
2.每一个工程包含一个build.gradle文件,根目录包含一个settings.gradle文件,主要用于设置编译那些工程
3.gradle命令介绍:
- gradle projects:查看子工程信息
- gradle tasks:查看任务信息
- gradle task-name:执行某个task
4.gradle的工作流程:
- 初始化阶段:执行settings.gradle文件,在setting文件中可以写一个需要提前执行的方法,比如读取配置文件等
- Configuration阶段:这个阶段主要解析每个Project中的build.gradle文件,该阶段结束后,整个build的project以及内部的Task关系就确定了,形成一个有向图,可以添加一个Hook,在Task关系图确定后,执行一些操作
- 执行阶段
- 常见的Hook函数:
allprojects { afterEvaluate { project -> println "define in root project : after ${project.name} evaluate" } beforeEvaluate { project -> println "define in root project : before ${project.name} evaluate" } } gradle.settingsEvaluated { settings -> println "emit by gradle : Setting evaluated" } gradle.projectsLoaded { gradle -> println "emit by gradle : project loaded" } gradle.beforeProject { project -> println "emit by gradle : before ${project.name} evaluate " } gradle.afterProject { project -> println "emit by gradle : after ${project.name} evaluate " } gradle.projectsEvaluated { gradle -> println "emit by gradle : all project evaluated " } gradle.taskGraph.whenReady { graph -> println "task graph is ready" graph.getAllTasks().each { println "task ${it.name} will execute" } } gradle.taskGraph.beforeTask { task -> println "before ${task.name} execute" } gradle.taskGraph.afterTask { task -> println "after ${task.name} execute" } gradle.buildFinished { buildResult -> println "emit by gradle : build finished" } println "all project size : ${allprojects.size()}"
5.gradle构建过程中的3个对象:
- setting对象:settings.gradle文件会对应一个setting对象
- project对象:每个project的build.gradle会对应一个project对象
- gradle对象:整个构建过程会有一个gradle对象
6.ext属性:gradle中在第一次定义属性的时候加上ext属性,这样就可以在其他gradle文件中跨脚本读取
7.Task:自定义Task,doLast,doFirst