文章目录

Android Plugin DSL Reference 参考文档 :​https://google.github.io/android-gradle-dsl/2.3/​






一、settings.gradle 映射为 Settings 类



根目录下的 settings.gradle 脚本 , 编译时被映射为 Settings 类 ;

settings 中可以直接调用 Settings 接口中的方法 , 查看 include 方法 , 发现该 include 方法定义在 Settings 接口中 ;

【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )_Android Gradle

@HasInternalProtocol
public interface Settings extends PluginAware, ExtensionAware {
/**
* <p>设置文件的默认名称。</p>
*/
String DEFAULT_SETTINGS_FILE = "settings.gradle";

/**
* <p>将给定的项目添加到生成中。
* 提供的列表中的每个路径都被视为要添加到生成中的项目的路径。
* 请注意,这些路径不是文件路径,而是指定新项目在项目层次结构中的位置。
* 因此,提供的路径必须使用“:”字符作为分隔符(而不是“/”)。</p>
*
* <p>提供的路径的最后一个元素用作项目名称。
* 提供的路径将转换为相对于根项目目录的项目目录。
* 包含项目后,可以通过更改“projectDir”属性来更改项目目录 (see {@link ProjectDescriptor#setProjectDir(File)})</p>
*
* <p>例如,路径{@code a:b}添加了一个带有路径{@code:a:b}、名称{@code b}和项目目录{@code$rootDir/a/b}的项目。
* 它还添加了路径为{@code:a}、名称为{@code a}、项目目录为{@code$rootDir/a}的项目,如果它还不存在的话。</p>
*
* <p>使用项目路径的一些常见示例如下:</p>
*
* <pre class='autoTestedSettings'>
* // 包括两个项目,“foo”和“foo:bar”
* // 通过将“:”替换为“/”来推断目录
* include 'foo:bar'
*
* // 包括一个项目,其项目目录与逻辑项目路径不匹配
* include 'baz'
* project(':baz').projectDir = file('foo/baz')
*
* // 包括许多其项目目录与逻辑项目路径不匹配的项目
* file('subprojects').eachDir { dir ->
* include dir.name
* project(":${dir.name}").projectDir = dir
* }
* </pre>
*
* @param projectPaths 要添加的项目。
*/
void include(String... projectPaths);
}






二、build.gradle 映射为 Project 类



Module 模块下的 build.gradle 会被映射为 Project 类 , 因此在 build.gradle 中可以直接调用 Project 中的方法 ;

查看 build.gradle 中的 dependencies 方法源码 , 该方法定义在 Project.java 中 ;

【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )_Android Gradle_02

@HasInternalProtocol
public interface Project extends Comparable<Project>, ExtensionAware, PluginAware {
/**
* 默认的项目生成文件名。
*/
String DEFAULT_BUILD_FILE = "build.gradle";

/**
* <p>配置此项目的依赖项。
*
* <p>此方法对该项目的{@link DependencyHandler}执行给定的闭包。这个 {@link
* DependencyHandler} 作为闭包的委托传递给闭包。
*
* <h3>Examples:</h3>
* See docs for {@link DependencyHandler}
*
* @param configureClosure 用于配置依赖项的闭包。
*/
void dependencies(Closure configureClosure);
}