浅聊Android开发的构建配置语言
整理旧电脑上的一些笔记
如果你计划开发一款 APP,在 Android Studio 里新建项目时候会看到下面的一个选项:Build configuration language,它代表了Android项目使用的构建工具(即Gradle)语言是哪种。
Gradle是开源的构建自动化工具,灵活且支持多种语言来写构建脚本。

DSL
介绍构建语言前先来简单介绍什么是DSL。
DSL(全名 Domain Specific Language),领域特定语言,是用来解决特定领域问题的编程语言。和它相对的就是我们更常见的通用编程语言(GPL,General Purpose Language),如C、Java、Python这种。
DSL设计简洁,表达性强,具备更好描述领域问题特性和约束的特点。
常见的DSL包括:正则表达式、SQL语句、Markdown、YAML、JSON······
DSL一般被分为外部DSL、内部DSL。外部DSL需要自定义语法和解析器,内部DSL是基于宿主语言,比如Java DSL,Python DSL还有我们下面要介绍的Groovy DSL和Kotlin DSL。
Gradle
Gradle是基于Groovy/Kotlin DSL的,可编程的、高性能的自动化构建工具,通过 任务(Task) 和 插件(Plugin) 机制,帮助完成自动化编译、测试、打包和部署项目。
Gradle的基本单位是Task。
插件是Gradle的扩展包,有了它Gradle可以添加新功能或配置。
Gradle项目一般包含下面文件(Groovy+Kotlin):
| Groovy DSL | Kotlin DSL |
|---|---|
| - build.gradle - settings.gradle - gradle.properties - gradle/目录 |
- build.gradle.kts - settings.gradle.kts - gradle.properties - gradle/目录 |
Groovy DSL
Groovy是动态的,运行在JVM上的面向对象的编程语言,它既可以面向对象编程,又可以作为脚本语言。Groovy和Java完全兼容,可以调用任何Java代码,使用所有Java库和框架。
Groovy DSL是建立在Groovy语言上的领域特定语言,是我们上面提到的内部DSL。
典型的build.gradle(Groovy)
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
applicationId "com.test.myapplication"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
Kotlin DSL
Kotlin是静态类型编程语言,同样运行在JVM上,同样和Java完美兼容,但Kotlin拥有着Java没有的简洁、安全性和现代语言特性(如函数、协程等)。
2016年Gradle开始支持Kotlin作为构建脚本语言,2017年Google宣布了Kotlin作为Android开发的首选语言,2023年7月从Android Studio Giraffe开始,创建新项目默认开始使用Kotlin DSL进行build配置。
2020年起,Android Studio开始采用动物代号+年份/版本号的命名方式
典型的build.gradle.ktx(Kotlin)
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
android {
namespace = "com.test.myapplication"
compileSdk = 36
defaultConfig {
applicationId = "com.test.myapplication"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
}
buildFeatures{
viewBinding = true
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.tooling)
debugImplementation(libs.androidx.compose.ui.test.manifest)
}
总结
Groovy DSL学习曲线低,内容简洁,初始构建性能快,目前主要是存量项目使用较多,且我们在可预见的未来很长一段时间内它都会被继续支持。
Kotlin DSL学习曲线稍高(需要了解Kotlin语言),初始构建速度慢,但IDE里支持自动补全、错误检测,可以帮助开发者在编写中旧发现错误且它是官方更推荐的配置语言。
引用
-
DSL-WiKi:https://en.wikipedia.org/wiki/Domain-specific_language
-
Groovy:https://groovy-lang.org/
-
Gradle:https://gradle.org/
-
Android Gradle build overview:https://developer.android.google.cn/build/gradle-build-overview?hl=en
-
Kotlin-DSL:https://kotlinlang.org/docs/gradle-configure-project.html
-
Migrate to the Kotlin DSL:https://developer.android.google.cn/build/migrate-to-kotlin-dsl
-
Android Studio Archive:https://developer.android.google.cn/studio/archive
-
Android Studio Giraffe:https://developer.android.google.cn/studio/releases/past-releases/as-giraffe-release-notes?hl=zh-cn
浙公网安备 33010602011771号