Gradle 编写构建脚本

前言

本篇gradle构建脚本的编写是按照android项目中build.gradle的常用的点来进行梳理的。

可以通过DSL Reference文档查看Gradle DSL支持的语法配置项,下面是一些配置文档:

Gradle 构建语言

Gradle 提供一种领域特定语言或者说是 DSL,来描述构建。这种构建语言基于 Groovy 中,并进行了一些补充,使其易于描述构建。

(1)ext,额外属性

Gradle 的域模型中,所有增强的对象都可以容纳用户定义的额外的属性。这包括但并不限于项目(project)、任务(task)和源码集(source set)。额外的属性可以通过所属对象的 ext 属性进行添加,读取和设置。或者,可以使用 ext 块同时添加多个属性。

例子1. 使用额外属性
apply plugin: "java"
ext {
    springVersion = "3.1.0.RELEASE"
    emailNotification = "build@master.org"
}
sourceSets.all { ext.purpose = null }
sourceSets {
    main {
        purpose = "production"
    }
    test {
        purpose = "test"
    }
    plugin {
        purpose = "production"
    }
}
task printProperties << {
    println springVersion
    println emailNotification
    sourceSets.matching { it.purpose == "production" }.each { println it.name }
}   

gradle -q printProperties的输出结果

3.1.0.RELEASE
build@master.org
main
plugin

在此示例中, 一个 ext 代码块将两个额外属性添加到 project 对象中。此外,通过将ext.purpose 设置为 null(null是一个允许的值),一个名为 purpose 的属性被添加到每个源码集(source set)。一旦属性被添加,他们就可以像预定的属性一样被读取和设置。

额外属性在任何能够访问它们所属的对象的地方都可以被访问,这使它们有着比局部变量更广泛的作用域。父项目上的额外属性,在子项目中也可以访问。根据这个来看第二个例子
例子2 android studio项目中各个build.gradle中的配置:

project中的build.gradle:

ext {
    VERSION_COMPILE_SDK = 27
    VERSION_BUILD_TOOLS = '26.0.2'

    VERSION_MIN_SDK = 15
    VERSION_TARGET_SDK = 25

    SOURCE_COMPATIBILITY = JavaVersion.VERSION_1_7
}

project下多个子项目中build.gradle:

defaultConfig {
        applicationId "com.didi.virtualapk"
        minSdkVersion VERSION_MIN_SDK
        targetSdkVersion VERSION_TARGET_SDK
        versionCode 3
        versionName "1.0.0"
    }
    compileOptions {
        sourceCompatibility SOURCE_COMPATIBILITY
    }

通过上面这个例子中,我怎么感觉这就是在公共部分中(或者父类)设置了一些变量,在子项目(或者子类)中直接使用

无意中发现这个博客,写的很全面,既然有了,那就到此为止吧,有需要可以看这里Android Gradle配置快速入门

点赞