Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置, 项目配置简单且任务扩展方便。java
Gradle 诞生前有两个很是流行的自动化构建工具Ant和Maven,下列表格对比这两个构建工具的优缺点:android
Gradle是基于Ant和Maven诞生的自动化构建工具,那么它必需要同时拥有Ant和Maven的优点,也就是说Gradle具备以下特色:api
本节重点介绍下Gradle的基础内容,包括运行机制和脚本内容的分析。bash
Gradle 工做流程分为三个阶段,以下图所示: 闭包
Gradle有不少插件,这里主要分析Android插件的脚本配置。app
setting.gradle工具
Setting.gradle中主要是声明了哪些Gradle自动化构建的工程,内容以下所示:测试
include ':app', ':library1', ':library2’ 复制代码
上面内容是包括三个Gradle工程,其中冒号能够理解为/,解释为构建工程的相对目录gradle
根目录build.gradleui
根目录build.gradle是对全部Gralde工程均起做用的全局声明,内容以下:
Android工程build.gradle
Android 工程中的build.gradle文件内容重点是android标签里面的特殊配置项,这里贴一个简单的配置:
apply plugin
表示当前Gradle工程构建过程须要使用到的插件,其中com.android.application表示的是使用Android项目的构建过程,固然也能够引用其它插件,前提是在root project的build.gradle中的buildscipt中的dependencises中配置,这里因为配置了com.android.tools.build:gradle因此能够直接使用Android插件
android
这个是Android工程特有的配置项,这里介绍一下几个基本配置选项:
compileSdkVersion: 编译时使用的SDK版本
buildToolsVersion: 编译时使用的编译工具的版本
applicationId: 应用惟一标识
buildTypes: 编译类型,通常默认deubg和release两种,能够自定义
Android里面有不少配置选项,基本就能知足平常开发需求
dependencies
依赖标签,主要是设置工程须要的外部库,里面有不少依赖方式,这个具体后面介绍
依赖主要是引用外部库的过程,这里须要说明两点:仓库以及依赖方式
repositories {
flatDir {
dirs 'libs' // aar目录
}
}
复制代码
这里是把本地libs目录看成仓库使用
依赖远程库文件主要由三部分构成: group Name version
以下所示:
Android 主要使用BuildType和Product Flavor构建多种Variant
BuildType
BuildType默认有debug和release两种:
Product Flavor
Product Flavor表示不一样特色的产品,例如APK打包发布时须要发不到不一样的应用市场,开发者须要设置不一样渠道的渠道号,有的时候还须要针对不一样渠道的产品定制特殊的图标或者界面。
./gradlew assemble
复制代码
该命令会构建全部的的Variant,且产物的数量为BuildTypes x Product Flavor, 若是想要只构建某一个或者一类的Variant,能够执行以下构建命令:
./gradlew assemble + Product Name(可选) + BuildTypes(可选)
复制代码
Task是Gradle中一个很是重要的工具,经过使用Task能完成一些特定的需求,本节主要从如下三个方面说明:
声明Task有好几种方式,下面展现一种直接定义的方式:
这里注意输出:
Configure project:app
Hello world
复制代码
其中在Hello Task中定义的内容在Configure阶段就输出了,这里再看下Gradle执行流程:
若是想要在build task阶段执行Task,能够将task定义以下:
上面简单说明了Task的使用,这里主要解析一下Task。
Task内部定义了不少属性和动做,本质上是一个定义了不少方法和属性的接口,全部的方法都已经被DefaultTask实现了,因此在Gradle中使用Task都是基于DefalutTask来实现的。 每一个Task中都包含了一个Action对象的集合,这个动做都会被按照顺序执行,动做为doLast和doFirst方法,这里举一个简单的例子:
总结:
Task归根结底是一个类,因此也能够继承task来完成一些特定动做,这里不作自定义task的介绍,比较少用到,这里主要介绍几个经常使用的特定task,如copy,zip,delete,下面例举删除的task的使用:
Hook Task是指在项目构建的过程当中插入自定义任务,完成一些特定的需求,Hook的点有不少,主要能Hook两个阶段:
Hook Configure阶段
Hook Build阶段
本篇主要从总体上介绍一下Gradle,重点要理解Gradle的执行流程,以及build.gradle文件中的配置做用已经做用范围,下一篇将重点介绍Gradle在Android中比较高级的用法。