# 任务

  • 了解 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. HDU 2147--HDU 2147(博弈)--我可能做了假题。。。

    kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/1000 K (Java/Others) Total Su ...

  2. pycharm2019连接mysql错误08801 ------Connection to django1@localhost failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    Error:Connection to django1@localhost failed. [08001] Could not create connection to database server ...

  3. DeepFaceLab报错,integer division or modulo by zero

    DeepFaceLab的集成环境在众多换脸软件中是做的最好的.但是使用过程也会出现一些错误,主要的错误有两个,一个是你配置太低OOM了,主要体现显存太低.第二个是版本不对应.比如你原先用的cuda9. ...

  4. 转:C语言inline详细讲解

    本文介绍了GCC和C99标准中inline使用上的不同之处.inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而 ...

  5. leetcode 342. 4的幂(python)

    1. 题目描述 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16输出: true示例 2: 输入: 5输出: false 2. 思路 参考: ...

  6. 红帽虚拟化RHEV-安装RHEV-M

    目录 目录 前言 软件环境 时间同步 更新系统 安装并配置RHEV-M 添加域并为用户授权远程登陆 安装rhevm报告 安装Spice协议 最后 前言 在红帽虚拟化RHEV-架构简介篇中介绍了RHEV ...

  7. 看看 Delphi XE2 为 VCL 提供的 14 种样式

    看看 Delphi XE2 为 VCL 提供的 14 种样式 其实只提供了 13 个 vsf 样式文件, 还有默认的 Windows 样式, 共 14 种. 在空白窗体上添加 ListBox1 等控件 ...

  8. robotframework之用户关键字的用法

    robotframework是一个关键字驱动框架,核心在于关键字的应用 目录 1.如何创建用户关键字 2.调用用户关键字 3.用户关键字的使用场景 1.如何创建关键字 第一种:直接在项目上右键,添加用 ...

  9. 模态框——angular

    ui-bootstrap-tpls.js库 $uibModal服务 $uibModalInstance服务 一.在angular中应用modal $uibModal 使用方法:直接注入到控制器中. . ...

  10. 【web前端】面题整理(2)

    今天是520,单身狗在这里祝各位520快乐! DOM节点统计 DOM 的体积过大会影响页面性能,假如你想在用户关闭页面时统计(计算并反馈给服务器)当前页面中元素节点的数量总和.元素节点的最大嵌套深度以 ...