浅聊Android开发的构建配置语言

整理旧电脑上的一些笔记



如果你计划开发一款 APP,在 Android Studio 里新建项目时候会看到下面的一个选项:Build configuration language,它代表了Android项目使用的构建工具(即Gradle)语言是哪种。

Gradle是开源的构建自动化工具,灵活且支持多种语言来写构建脚本。

build configuarion language

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里支持自动补全、错误检测,可以帮助开发者在编写中旧发现错误且它是官方更推荐的配置语言。

引用

posted @ 2026-09-06 19:14  换元不配限  阅读(4)  评论(0)    收藏  举报