六、Gradle生命周期及其监听

前言

学习groovy的目的最终是为了更好的使用gradle,前面已经对groovy进行了一些列的学习,接下来开始gradle的学习。

一、Gradle的执行流程

1、Initialization初始化阶段

  • 解析整个工程中的所有project,构建所有的Project对应的project对象

2、Configuration配置阶段

  • 解析所有的projects对象中的task,构建好所有的task的拓扑图(有向无环图)

3、Execution执行阶段

  • 执行具体的task及其依赖的task

4、Gradle工程分析

  • 4.1、我们都知道,在一个Android工程中可能由很多个Module,那么每一个Module都会对应着一个Project对象(后面会讲到Gradle的关键API,Project)。

新建一个项目,并且创建5个Module,如下图:

  • 4.2、那么就会在settings.gradle文件中将这些module include进来

  • 4.3、初始化阶段,就会解析settings.gradle文件,生成对应的project对象

在生成所有的project对象之后就会来到了配置阶段 。一个project包含很多个Task,即每个Project是由多个Task组成的。Task后面会讲到,现在先简单的理解为他是一个原子性的操作,就像我们编程中的函数一样,每个task都会完成自己的功能。下面是一个task 'clean',做Android的都应该见过它。作用也简单,删除编译后产生的build目录

task clean(type: Delete) {
    delete rootProject.buildDir
}
  • 4.4、在编程的时候,函数的调用是有一定的顺序的,这个顺序当然是由我们决定的,比如java程序的运行,会先执行main函数,然后我们在main函数中执行自己的逻辑,调用其他方法,在方法中调用其他的方法。我们根据需求编写这些函数并让它们按照一定的顺序正确执行,最终构建成整个拥有不同功能的应用。那么Gradle在构建APK的时候,也需要按照一定的顺序去执行一个个的task,最终构建出整个应用。那么这些task之间,也有执行的先后顺序,有些task是依赖于其他的task,需要在一些task执行之后才执行(后面会讲Task的时候讲到如何利用Gradle提供的APT决定Task之间的依赖关系),所以配置阶段就是去解析所有Project对象中的Task,构建好所有Task的拓扑图,即这些Task之间的执行顺序在配置阶段就确定了。
  • 4.5、在配置完成后,所有的task的执行顺序已经确定了,那么就到了执行阶段,执行具有的Task已经依赖Task。比如执行build Task,就会执行一系列build依赖的Task,执行build Task本身,最终打包生成我们需要的apk。

二、Gradle生命周期的监听

1、生命周期的回调监听方法

/**
 * 配置阶段开始前回调监听
 */
this.beforeEvaluate {
}

/**
 * 配置阶段完成后回调监听
 */
this.afterEvaluate {
    println '配置阶段完成...'
}

/**
 * gradle执行完毕的回调监听
 */
this.gradle.buildFinished {
    println 'gradle执行完毕...'
}

2、看过前面讲的Groovy内容再来看这个,应该很容易就看懂吧,没有看过的话,请先看看Groovy语法讲解内容。在Core module的build.gradle文件中输入上面内容,然后在终端输入  gradlew clean(mac中有点不同, ./gradlew clean)执行一个比较简单的Task,也就是我们前面看到的clean Task,下面是输出结果

3、当然还有其他的监听方法、比如beforProject, afterProject(等同配置阶段的监听)等。还有下图一些

4、其他监听

this.gradle.addBuildListener(new BuildListener() {
    @Override
    void buildStarted(Gradle gradle) {

    }

    @Override
    void settingsEvaluated(Settings settings) {

    }

    @Override
    void projectsLoaded(Gradle gradle) {

    }

    @Override
    void projectsEvaluated(Gradle gradle) {

    }

    @Override
    void buildFinished(BuildResult result) {

    }
})

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值