Android开发之Gradle解析
android开发之gradle
gradle是一个基于jvm的构建工具,目前android studio中建立的工程都是基于gradle进行构建的。gradle的与其他构建工具(ant、maven)的特性主要包括:
强大的dsl和丰富的gradle的api gradle就是groovy 与其他构建工具的集成 强大的依赖管理 可拓展性 与其他构建工具的集成表格
markdown extra 表格语法:
项目 | 价格 |
---|---|
computer | $1600 |
phone | $12 |
pipe | $1 |
三种构建脚本
gradle的脚本都是配置型脚本。每一种脚本类型实际上都是某个具体的gradle的api中的类对象的委托,脚本执行对应的其实是其委托的对象的配置。在一个完整的gradle的构建体系中,总共有三种类型的构建脚本,同时也分别对应着三种委托对象
脚本类型 | 委托对象 |
---|---|
init script | gradle |
settings script | settings |
build script | project |
init.gradle
对应的就是上面的init script,实际上就是gradle对象的委托,所以在这个init
脚本中调用的任何属性引用以及方法,都会委托给这个 gradle 实例。
init script的执行发生在 构建开始之前,也是整个构建最早的一步。
配置init scrip的依赖
每个脚本的执行都可以配置当前脚本本身执行所需要的依赖项。init
scrip的配置如下:
initscript { repositories { mavencentral() } dependencies { classpath group: 'org.apache.commons', name: 'commons-math', version: '2.0' } }
使用init scrip
要使用一个定义好的init scrip,主要有以下几个方式
在执行gradle命令的时候,通过-i或--init-script命令选项指定脚本的路径 这种方式可以针对具体的一次构建。 把一个init.gradle文件放到 user_home/.gradle/` 目录 把一个文件名以.gradle结尾的文件放到gradlesettings.gradle
对应的是settings script脚本类型,是settings对象的委托。在 脚本中调用的任何属性引用以及方法,都会委托给这个 settings实例。
settings script的执行发生在gradle的构建生命周期中的 初始化阶段。settings脚本文件中声明了构建所需要的配置,并用以实例化项目的层次结构。在执行settings脚本并初始化settings对象实例的时候,会自动的构建一个根项目对象rootproject并参与到整个构建当中。(rootproject默认的名称就是其文件夹的名称,其路径就是包含setting脚本文件的路径)。
因此,在settings的脚本文件中,我们可以访问使用的对象包括:
settings`对象 gradle`对象 projectdescriptor`对象获取settings文件
在gradle中,只要根项目/任何子项目的目录中包含有构件文件,那么就可以在相应的位置运行构建。而判断一个构建是否是多项目的构建,则是通过寻找settings脚本文件,因为它指示了子项目是否包含在多项目的构建中。
查找settings文件的步骤如下:
1. 在与当前目录同层次的master目录中搜索setting文件
2.如果在1中没有找到settings文件,则从当前目录开始在父目录中查找settings文件。
当找到settings文件并且文件定义中包含了当前目录,则当前目录就会被认为是多项目的构建中的一部分。
build.gradle
对应的就是前面提到的build script脚本类型,是gradle中project对象的委托。在脚本中调用的任何属性引用以及方法,都会委托给这个
project 实例。
配置脚本依赖
在build.gradle文件中有一个配置块buildscipt{}是用于配置当前脚本执行所需的路径配置等的(与initscript形似)。
buildscript { repositories { mavenlocal() google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.2' } }
这里补充关键的一点,在build.gradle文件中,不管buildscript{}配置块被放在哪个位置,它总是整个脚本文件中最先被执行的。
上一篇: 在C#中对枚举进行位运算--枚举组合
下一篇: 慢一点可以吗