再探Gradle

首先经过文章咱们将能学习到什么?编程

总结

  1. 首先要了解gradle是什么,能作什么(必定要从编程框架的角度去了解)
  2. 了解gradle和maven、ant之间的区别以及它的优点
  3. 了解gradle的生命周期

下面根据总结的内容开始讲述api

gradle的基本概念

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。
Gradle不只仅是一个工具,拥有本身的groovy语法,更拥有gradle api,此时不就更是一个编程框架的体现了嘛?
咱们经过下图来了解下gradle的基本组成部分bash

因此,学好groovy语法是学好gradle的核心。

gradle的优点

  1. 灵活性
    Maven、Ant构建程序的时候没法修改构建的过程,也就是工具给咱们提供了什么,咱们就只能用什么,可是Gradle不同,以Android开发为例,咱们在建构apk包的时候,能够经过构建gradle脚本在程序编译执行的时候修改apk的包名,可是Maven或者Ant只能在构建完成后才能够进行修改操做。
  2. 粒度性
    在使用Maven或者是Ant构建程序的时候,源代码和脚本是独立的,并且咱们也不知道工具内部作了什么,就打包生成了apk。
    可是gradle就不一样了,gradle资源的编译、源代码的编译到生成apk,都是经过执行一个个Task任务生成的(且这些Task内部源码都是开源的,若是想了解Gradle的执行过程的话,是能够经过查看Task源码来进行学习的),最后打包生成apk的全部逻辑,并且整个生成的过程都是能够经过改变Task任务动态改变的,Tinker就是如此。
  3. 扩展性
    Gradle支持插件机制,能够直接复用已有的插件。
  4. 兼容性
    Gradle不只仅拥有本身优点,而且还集成了Maven和Ant的功能,吸收了全部的构建工具的长处

总结:gralde相比于其余工具备很是多的优点,最核心的缘由是由于Gradle是一个编程框架,固然要比xml配置要强大的多

gradle执行流程(生命周期)

一、生命周期的介绍
首先咱们来看一个命令的执行过程,以mac系统为例框架

./gradlew clean

./gradlew build
复制代码

执行过程分析:
一、首先短暂的Loading阶段
二、而后执行一段时间的Configuring阶段
三、执行完Configuring后再真正执行clean或者build操做maven

今日问答

Q1:在执行的时候,为何会有前面两步操做?
A1:loading和configuring其实就是gradle生命周期中的前两个工具

Q2:为何执行build操做的时候又执行了不少其余的命令
A2:在执行clean或者是build操做的时候,其实就是在执行gradle中的Task任务,而Task之间有依赖性,因此必须将其余依赖的Task的任务先执行完成再执行自身的Task,因此咱们在控制台就会看到很大一堆的命令输出了学习

下面咱们用一张图来理解上面的执行的过程gradle

一、Loding阶段也就是初始化阶段(Initialization),也就是执行项目中的setting.gradle文件,解析该项目中的全部module,并构建出对应的project对象。ui

二、onfiguring就是配置阶段(Configration),该阶段就是解析每一个module中的build.gradle文件中的配置信息,在①和②执行的过程当中咱们能够添加一个Hook,固然这个是经过API来进行操做的。this

三、最后就是执行阶段,上面的两步是第三步执行的前提条件,也就是执行咱们最终的clean、build命令操做。你在gradle命令中指定的Task任务,gradle就会将这个Task任务链上的全部任务所有按依赖顺序执行一遍。

如今咱们最后来总结下为何在build的任务的时候会输出不少东西,见下图

如图所见,咱们执行build任务的时候,首先依赖了check和assemble任务,而他们又依赖了其余的任务,因此最终在控制台看到的时候就输出了一大堆的东西

二、生命周期监听
常见的监听方法

//常见的一组 
/** *配置阶段开始前的监听回调 **/
this.beforeEvaluate {
     println '配置阶段执行开始执行'
}
/** *配置阶段完成后的监听回调 **/
this.afterEvaluate {
   println '配置阶段执行完成'
}
/** *gradle执行完成后的回调监听 **/
this.gradle.buildFinished {
     println '执行阶段执行完成'
}

//另一组
this.gradle.beforeProject {}
this.gradle.afterProject {}
this.gradle.buildFinished {}

//另一组
this.gradle.addListener()
this.gradle.addBuildListener()
this.gradle.addProjectEvaluationListener()
复制代码

当前,咱们以前提到了初始化的过程,那个咱们也能够在setting.gradle文件中添加以下打印语句

println '初始化阶段开始执行'
复制代码

经过添加上面的代码后,咱们执行

./gradlew clean
复制代码

获得结果

经常使用的监听方式就是使用第一种方式,在此咱们了解生命周期是颇有必要的,正如咱们学习Activity的时候须要了解它的生命周期同样,顺便问一句,大家还记得Activity的生命周期流程吗?
相关文章
相关标签/搜索