Gradle 编写构建脚本
前言
本篇gradle构建脚本的编写是按照android项目中build.gradle的常用的点来进行梳理的。
可以通过DSL Reference文档查看Gradle DSL支持的语法配置项,下面是一些配置文档:
-
Gradle DSL Reference(Gradle原生支持的DSL配置)
https://docs.gradle.org/current/dsl/ -
Android Plugin DSL Reference(Android的DSL配置)
http://google.github.io/android-gradle-dsl/current/
andorid里面经常需要做的一些配置在上面这个地址下就可以看到所有的项。
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配置快速入门