# 任务

  • 了解 Settings 类作用于 Gradle 构建的哪个阶段?
  • 了解 Settings 类与 settings.gradle 的关系
  • 了解和使用 inlcude 方法
  • hook 初始化阶段的监听器
  • 总结

# Settings 类作用于 Gradle 构建的哪个阶段?

前面介绍过,Gradle 构建涉及到三个阶段,分别是 初始化阶段,配置阶段,执行阶段。在 Gradle 中就是通过执行 Settings 类来完成构建的 初始化阶段

# Settings 类与 settings.gradle 的关系

就像大家所知的build.gradle文件是对应于Project的,那么settings.gradle对应于 Settings 类啦。

# includ 方法

在 Setting 类中,最重要的一个方法就是 include 方法了。

方法名 作用
void include(String... projectPaths); 添加需要参与构建的Project,接受一个可变参数,每一个值是一个Project路径

这里有一个需要注意的点:可变参数的路径并不是 project 的文件路径,它指的是当前 project相对于根project的路径。

例如:在一个 AS 的示例工程中,有如下一些 module ,那么每一个 project 的 path 该如何表示呢,下面我列举一个示例来表示一下:

GradleDemo(根Project) -> path = ""
app(子Project) -> path = ":app"
subapp(app的子project) -> path = ":app:subapp"
common(子Project) -> path = ":common"
play(子Project) -> path = ":play"

从上面的 module 的结构来看, GradleDemo 为根project ,它的路径是 :,而对于 appmodule 来说,它的 path 是 :appsubapp是 app project 的子 project ,它的 path 是:app:subapp。所以基于上面的理解,每一个 project 的路径都是相对于根project而言的,路径的分隔符是 : 而不是\

下面是 project路径 的格式:

:路径1:路径2

说了那么多,现在来看看如何使用 include 方法咯:

  • 添加一个 project
//添加:app这个module参与构建
include ":app"
  • 添加多个 project
//include 接受可变参数,使用 , 逗分开不同的路径
include ':app',':common'

# hook 初始化阶段的监听器

在初始化阶段中主要做的事有两件:

  • 确定哪些是需要构建的 project 。
  • 为所有的参与构建的 Project 创建对象。

那么下面列举是在执行 settings.gradle 脚本的监听回调:

gradle.settingsEvaluated {
println "【settings.gradle】 初始化执行结束"
} gradle.projectsLoaded {
Gradle gradle ->
println "【settings.gradle】 所有在 settings 中 include 的 Project 对象都创建完成了"
}

# 总结

虽然 Settings 类很简单,但是我们不能忽略的它的作用哦,毕竟它负责了 Gradle 构建的第一个阶段。在日常开发中,我们主要使用到的就是 include 方法了,所以本文也只演示了该方法的作用与使用。

 

Gradle Settings 类的学习的更多相关文章

  1. php大力力 [019节]php分页类的学习

    2015-08-26 php大力力019.php分页类的学习 [2014]兄弟连高洛峰 PHP教程14.2.1 分页需求分析 14:18 [2014]兄弟连高洛峰 PHP教程14.2.2 分页类中分页 ...

  2. 20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习

    20175212童皓桢 在IDEA中以TDD的方式对String类和Arrays类进行学习 要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...

  3. Exception类的学习与继承总结

    日期:2018.11.11 星期日 博客期:023 Exception类的学习与继承总结 说起来我们上课还是说过的!老师提到了报错问题出现主要分Exception和Error两类!第一次遇见这个问题是 ...

  4. 20155312张竞予 20170510实践一:在IDEA中以TDD的方式对String类和Arrays类进行学习

    实践题目 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arrays类 sort binarySea ...

  5. 20155326 第12周课堂实践总结(二)String类和Arrays类的学习

    20155326 第12周课堂实践总结(二)String类和Arrays类的学习 实践二 Arrays和String单元测试 实践题目 在IDEA中以TDD的方式对String类和Arrays类进行学 ...

  6. Settings app简单学习记录

    Settings是android系统设置的入口.主界面由Settings.java以及settings_headers.xml构成. Settings类继承自PreferenceActivity,而P ...

  7. 06.FileStream类的学习

    //FileStream类是用来操作字节的,也就是可以操作所有文件. 因为所有的文件都是以字节形式来存储的. //StreamReader类和StreamWriter类是用来操作字符的. FileSt ...

  8. 05.File类的学习

    File  是文件的意思 File类是一个静态类,所以File类是一个工具类 File类是专门操作文件的类 File的常用方法 namespace _16.File类的学习 { class Progr ...

  9. 04.Path类的学习

    path 是路径的意思. path类是一个静态类,所以path是一个工具类. Path类是专门用来操作路径的. Path的常用方法: namespace _15.Path类的学习 { class Pr ...

随机推荐

  1. jQuery_完成表格的隔行换色

    表格的颜色一样不利于区分,而利用jQuery则可以很方便的进行表格的隔行换色操作,原表如下: 这样看着很不方便,但是隔行换色之后非常便捷清楚. 代码如下: <!DOCTYPE html> ...

  2. go语言系列--golang在windows上的安装和开发环境goland的配置

    在windows上安装golang软件 golang中国网址为:https://studygolang.com/dl 我的学习选择版本:1.12.5 golang 1.12.5版本更新的内容:gola ...

  3. 测试常用命令之awk篇

    awk/gawk 1,内置变量 FILENAME:输入文件名称 FNR:当前数据文件中的数据行数 NF:数据文件中的字段总数 NR:已处理的输入数据行数目 FS:输入数据段分隔符 RS:输入数据行分隔 ...

  4. 6.并发编程--volatile

    并发编程--volatile volatile-说明 volatile关键字的作用是变量在多个线程可见: volatile 关键字是非原子性的 要是实现原子性操作,建议使用atomic类的系列对象:支 ...

  5. Java equals 和 hashCode 的这几个问题可以说明白吗?

    前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦 ...

  6. Java之Integer类

    Integer类简介: Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中. Integer类在对象中包装了一个基本类型int的值,也就是每个Int ...

  7. 2018-2019-2 网络对抗技术 20165220 Exp 9 Web安全基础

    2018-2019-2 网络对抗技术 20165220 Exp 9 Web安全基础 实验任务 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF) ...

  8. git reset --hard 操作后的数据恢复

    在进行正文之前先简单介绍下git reset 命令 git reset git reset 命令用于改变当前的仓库状态,简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在 ...

  9. Python 使用Qt进行开发(三)

    下面我们实现日期时间框的添加,表示日期时间的文本框可以使用QtWidgets控件下的 QDateEdit() , QTimeEdit() , QDateTime() 三个方法实现. 1,使用QDate ...

  10. leetcode-mid-sorting and searching-162. Find Peak Element

    mycode  54.81% class Solution(object): def findPeakElement(self, nums): """ :type num ...