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

2023-03-30 11:17:48 浏览数 (2)

文章目录

  • 一、settings.gradle 映射为 Settings 类
  • 二、build.gradle 映射为 Project 类

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

一、settings.gradle 映射为 Settings 类


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

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

代码语言:javascript复制
@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 -&gt;
     *     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 中 ;

代码语言:javascript复制
@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);
}

0 人点赞