一篇文章学会 Gradle概述以及生命周期-gradle介绍

1 Gradle是一种编程框架gradle主要由以下三部分组成
1 groovy核心语法2 build script block3 gradle api注:本章任何的代码都在
【一篇文章学会 Gradle概述以及生命周期-gradle介绍】如下图

一篇文章学会 Gradle概述以及生命周期-gradle介绍

文章插图
2 Gradle的优势1 更加的灵巧 。因为gradle是编程框架 。所以功能要厉害的多2 粒度性上 。源码的编译 。资源的编译 。都是一个一个Task的 。我们可以改写task来达到细腻控制上3 扩展性上 。gradle有插件机制以上任何的优势其实全因为Gradle是一种编程框架
3 Gradle的生命周期Gradle生命周期分为三个部分 。如下:
1 初始化阶段: 分析整个工程中任何Project,构建任何的Project对应的project对象 。这种阶段主要就是分析setting.gradle文件2 配置阶段:分析任何的projects对象中的task 。构建好任何的task拓扑图 。主要分析各个project下的build.gradle文件3 执行阶段:执行详细的的task及其依赖task如下图
一篇文章学会 Gradle概述以及生命周期-gradle介绍

文章插图
4 Gradle的生命周期的监听在root build.gradle中 。添加如下代码
/** * 配置阶段开始前的监听回调 */this.beforeEvaluate {println '配置阶段开始111...'}/** * 配置阶段后的监听回调 */this.afterEvaluate {println '配置阶段执行完毕222...'}/** * gradle执行完毕后的回调 */this.gradle.buildFinished {println '执行阶段执行完毕...'}//等同于 beforeEvaluatethis.gradle.beforeProject {}//等同于 afterEvaluatethis.gradle.afterProject {println '配置阶段执行完毕333...'}之后跟着运行 ./gradlew build,就会输出相对应的log
5 Project详细解答在gradle中 。project就貌似是android中的activity一样 。总是使用 。所以project概述是一个非常重要的概念
在android工程中 。任何的lib,module都是一个project
调查任何的project
./gradlew projects//输出如下------------------------------------------------------------Root project------------------------------------------------------------Root project 'gradledemo'+--- Project ':app'+--- Project ':mylib'+--- Project ':test'\--- Project ':utils'
可以观看到的目前工程下有5个 proejct 。之中有一个根 project 。剩下的4个是子project,可以观看到的project是树的结构 。根project的作用就是用来管理子project怎么样管理呢?就是通过相对应的api进行管理 。后面有讲到 。每一个project都对应一个输出
每一个project都有一个build.gradle文件 。build.gradle文件也是project的标识
5.1 Project核心api
1 gradle 生命周期api2 project有关api3 task有关api4 属性有关api5 file有关api6 其它api在gradle中 。一个build.gradle文件会被编译成proejct字节码 。所以在build.gradle中编编辑的任何的代码等于都是在proejct中类内部编编辑的
输出任何的proejct
//在根project下的build.gradle中 。获得任何的project 。添加如下代码//调用途径getProjects()//获得任何的projectdef getProjects(){println '------------'println 'Root Project'println '------------'//getAllprojects()返回任何的Project的set集合this.getAllprojects().eachWithIndex { Project project, int index -if(index == 0){println "Root protject :'${project.name}'"}else{println "+--- project '${project.name}'"}}}//运行 ./gradlew clean,输出如下:------------Root Project------------Root protject :'gradledemo'+--- project 'app'+--- project 'mylib'+--- project 'test'+--- project 'utils'
输出任何的子project
//在根project的build.gradle中 。输出任何的子prject//打印任何的子projectgetAllSubprojects()def getAllSubprojects(){getSubprojects().each { project -println "---- ${project.name}"}}//输出---- app---- mylib---- test---- utils获得父project的名字
//获得根project的名字 。在根project中调用返回null,在子project下调用打印出父project的名字getParentProjectName()def getParentProjectName(){def project = getParent()if(project != null ){println "父project的名字是: " + project.name}else {println '没有父project'}}获得根project的名字
getRootPro()def getRootPro(){println "根project的名字是:" + getRootProject().name}//运行 ./gradlew clean。输出:根project的名字是:gradledemo在根project对子project进行配置
/** * 可以在根project下对任何的子project进行配置 。如下代码 * 所有在子project中的build.gradle文件中可以配置的东西 * 都可以在下面的代码中进行配置 */project("app") {apply plugin: 'com.android.application'group 'com.zhj'version '1.0.0'dependencies {}android {}}project('mylib') {apply plugin: 'com.android.library'group 'com.zhj'version '1.1.1'dependencies {}}为任何的project进行统一的配置

推荐阅读