跳转到正文
YGJoon 技术博客

Android Kotlin Gradle Kotlin DSL 与构建优化

发布于:
·844 字 · 约 2 分钟·作者:
把 Gradle 脚本换成 Kotlin DSL:类型安全的构建配置、Version Catalog 统一版本、构建逻辑抽模块,附带构建提速的实测手段。
Android Kotlin Gradle Kotlin DSL 与构建优化文章封面
目录

Kotlin DSL 优势

基础示例

build.gradle.kts

plugins {
    id("com.android.application") version "8.6.0"
    kotlin("android")
}

android {
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 24
        targetSdk = 34
        versionCode = 3
        versionName = "1.2.0"
    }
}

Version Catalog 管理依赖

gradle/libs.versions.toml

[versions]
kotlin = "1.9.24"
androidx-core = "1.13.1"

[libraries]
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }

[plugins]
android-application = { id = "com.android.application", version = "8.6.0" }

settings.gradle.kts

enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
dependencyResolutionManagement {
    versionCatalogs {
        create("libs") {
            from(files("gradle/libs.versions.toml"))
        }
    }
}

使用:implementation(libs.androidx.core.ktx)。

构建逻辑模块化

创建 build-logic 自定义插件:

build-logic/
└── convention/
    ├── build.gradle.kts
    └── src/main/kotlin/AndroidApplicationConventionPlugin.kt
class AndroidApplicationConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) = with(target) {
        pluginManager.apply("com.android.application")
        pluginManager.apply("org.jetbrains.kotlin.android")

        extensions.configure<ApplicationExtension> {
            compileSdk = 34
            defaultConfig.minSdk = 24
        }
    }
}

模块使用:

plugins {
    id("com.example.android.application")
}

构建性能优化

优化项操作
配置缓存org.gradle.configuration-cache=true
Gradle 缓存org.gradle.caching=true
并行构建org.gradle.parallel=true
Kotlin Daemon默认启用,确保 JDK 版本一致
R8 优化minifyEnabled false -> Release 再开启

gradle.properties

org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8
kotlin.incremental=true
kotlin.incremental.java=true
kapt.incremental.apt=true

任务调试

常见问题

问题原因解决方案
类型不匹配Kotlin DSL 类型推断失败显式指定类型或导入 com.android.build.api
插件顺序导致异常依赖插件未提前应用在 Convention Plugin 中统一应用顺序
构建缓存命中率低任务输入不稳定确保 @Input 标记正确,避免随机路径

实战案例:Kotlin DSL 是”用类型安全换学习成本”

Groovy DSL 写构建脚本像写配置,Kotlin DSL 像写代码——有自动补全、有类型检查,写错 implementation 直接红。但代价是:构建脚本本身也要编译,build.gradle.kts 改一行,Gradle 要先编译脚本再执行,配置阶段变慢。

我的实战建议(来自 Flutter + 原生两边的构建经验):

  1. 新项目直接 Kotlin DSL,别犹豫。Google 官方模板早切了,社区插件也都跟上了。
  2. 用 Version Catalog(libs.versions.toml)管版本。Flutter 侧没有对等物(pubspec.yaml 里版本号散落各处),Android 这套”一处定义、处处引用”是真香,Dependabot/Renovate 也能直接读它来提 PR。
  3. 构建优化别迷信参数:org.gradle.parallel=true、org.gradle.caching=true 是免费午餐先开;但 configuration-cache 和 KSP/kapt 混用时偶发诡异 bug,开了之后构建挂了,先试关掉它再排查。

Flutter 开发者有个独特优势:Dart 是 AOT 编译,天然快;但 Android 的 R8/dex 流程慢得多。理解 Gradle 构建,才能理解为什么 Android 包”build 一下要 3 分钟”——知识是通的。

参考:Android 官方文档《Configure your build》;Gradle 官方文档 Kotlin DSL 章节

总结

  1. 使用 Kotlin DSL + Version Catalog,可让依赖管理更规范。
  2. 构建逻辑模块化、开启缓存与并行度,是提升构建速度的关键。
  3. 对于大型项目,建议结合 Gradle Enterprise 或 Build Scan 定期审计构建健康度。

分享这篇文章:


相关文章

上一篇
Android Kotlin App Startup 优化策略
下一篇
Android Kotlin Hilt 依赖注入实战