news 2026/5/1 22:42:48

Kotlin DSL 构建脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kotlin DSL 构建脚本

Kotlin DSL

Android Studio 默认的模板已推荐使用 Kotlin DSL 取代 Groovy DSL 作为构建脚本。Kotlin DSL 已成为 AGP 8.0+ 文档优先,Groovy DSL 仍受支持但新特性适配滞后。Kotlin DSL 不是“另一种写法”,而是构建脚本工程化的基础设施升级。

Kotlin DSL 脚本相对于Groovy DSL 脚本最大的优势是良好的代码提示。kotlin-dsl 对 groovy -dsl的语法转变,基本上是把单引号改成双引号,然后加上括号或者加上等于号。

在Groovy DSL中也可以使用双引号+字符串模板。

基础配置差异

  • 文件名称增加.kts

build.gradle文件名称变为build.gradle.kts

  • 方法调用变为赋值语句

    namespace 'com.example.app' // Groovy 中为方法调用

    namespace = "com.example.app" // Kotlin 中为赋值语句

  • 布尔属性增加 is 前缀

    minifyEnabled false // 无 is 前缀

    isMinifyEnabled = false // 布尔属性带 is 前缀!

区别Groovy 写法Kotlin 写法原因
布尔属性minifyEnabled falseisMinifyEnabled = falseKotlin Bean 属性规范
字符串拼接"lib-$version""lib-$version"(需双引号)Kotlin 字符串模板要求
访问 ext 属性ext.libVersion = "1.0"extra["libVersion"] = "1.0"Kotlin 无动态 ext
集合追加include << ":module"include(":module")Kotlin 无 << 操作符
插件版本id 'plugin'id("plugin") version "x.y.z"Kotlin DSL 要求显式版本(根项目)

依赖管理革命

Version Catalog + 类型安全访问器。

先独立配置依赖版本

在gradle/libs.versions.toml中配置依赖版本:

[versions] kotlin = "1.9.20" androidx-core = "1.12.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
再使用依赖

在build.gradle.kts中使用依赖:

dependencies { //依赖libs.versions.toml中配置的库版本 implementation(libs.androidx.core.ktx) // ✅ 编译时检查,IDE 智能提示 implementation(libs.kotlin.stdlib) //直接硬编码依赖库版本 //字符串模板安全使用 val retrofitVersion = "2.9.0" implementation("com.squareup.retrofit2:retrofit:$retrofitVersion") }

Kotlin 语言特性赋能

// 扩展函数封装公共逻辑(放入 buildSrc 或 convention plugin) fun Project.configureAndroidLint() { tasks.withType<LintTask>().configureEach { lintConfig = file("lint.xml") isCheckDependencies = true } } // 作用域函数简化配置 android.buildFeatures.apply { viewBinding = true compose = true } // 安全访问 project 属性 val debugMode = extra["debugMode"] as? Boolean ?: false

libs.versions.toml

libs.versions.toml文件的使用:https://blog.csdn.net/android_cai_niao/article/details/160431318

[libraries]的写法

# 写法一:拆分 group + name(更清晰) androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-ktx" } # 写法二:合并简写 module(更简洁) androidx-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-ktx" } # 写法三:内联版本号(不推荐,版本分散) androidx-ktx = { module = "androidx.core:core-ktx", version = "1.12.0" }

[bundles]

bundle作用是把依赖打包

[bundles] hilt = ["hilt-android", "hilt-compiler"]

别名归化

所有依赖的别名(alias)都会被 Gradle 标准化处理:凡是别名中含有 -、_ 或 . 的,引用时都统一转换为 .,原因是Gradle 用点号 . 来生成层级访问器(type-safe accessor),如果允许别名里直接写 .,会产生歧义,所以统一把 - 和 _ 都归一化为 .,然后在前面加上libs.*前缀。

引用版本值libs.versions.<alias>.get()
引用库依赖libs.<alias>
引用插件libs.plugins.<alias>
引用bundlelibs.bundls.<alias>

推荐的命名规范是使用 kebab-case(如 androidx-ktx),这样可以在构建文件中获得更好的代码补全支持。

kebab-case命名风格

Kebab-case命名风格,单词之间用连字符-连接,所有字母小写。就像串在烤串上的肉块 🍢,所以叫 “kebab”(烤串)

常见命名风格
kebab-case短横线连接androidx-ktxmy-library
camelCase首单词小写,后续首字母大写androidxKtxmyLibrary
PascalCase每个单词首字母大写AndroidxKtxMyLibrary
snake_case下划线连接androidx_ktxmy_library
SCREAMING_SNAKE_CASE下划线+全大写ANDROIDX_KTXMY_LIBRARY

各场景的惯用风格

  • kebab-case → HTML/CSS 类名、libs.versions.toml 的别名、URL
  • camelCase → Java/Kotlin 变量名、函数名
  • PascalCase → Java/Kotlin 类名
  • snake_case → Python 变量名、数据库字段名

libs.versions.toml 推荐 kebab-case,是因为 - 会被 Gradle 自动转成 .,天然形成层级结构,代码补全体验更好。

apply plugin: 'kotlin-android-extensions'

  • Kotlin Android Extensions‌ 是 JetBrains 为简化 Android 开发而提供的插件,允许开发者通过 XML 布局中的id直接访问 View,例如btn_login.setOnClickListener { ... },无需调用findViewById()
  • 该插件自 ‌Kotlin 1.2‌ 引入,在早期广泛用于减少样板代码,现已废弃。

废弃时间线

  • 2020 年起‌:Google 官方逐步明确不再推荐使用 Kotlin Android Extensions。
  • Kotlin 1.8.0(2021 年底)‌:正式‌禁用‌该插件。
  • 当前(2026 年)‌:该插件‌已完全废弃‌,新项目不应使用。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 22:41:33

座舱式个人飞行器 - 接线图解与电气连接

座舱式个人飞行器 - 接线图解与电气连接第一部分&#xff1a;系统架构 1.1 整体系统连接图┌──────────────────────────────────┐│ 遥控器&#xff08;地面&#xff09; ││ Radiomaster TX16S ││ …

作者头像 李华
网站建设 2026/5/1 22:41:26

视频对比神器:5分钟掌握专业级画质差异分析技巧

视频对比神器&#xff1a;5分钟掌握专业级画质差异分析技巧 【免费下载链接】video-compare Split screen video comparison tool using FFmpeg and SDL2 项目地址: https://gitcode.com/gh_mirrors/vi/video-compare 你是否曾经为了比较两个视频的画质差异而反复切换播…

作者头像 李华
网站建设 2026/5/1 22:37:50

Red Hat 8.4 安装后必做的5件事:从换源到静态IP,新手避坑指南

Red Hat 8.4 安装后必做的5件事&#xff1a;从换源到静态IP&#xff0c;新手避坑指南 刚装完Red Hat Enterprise Linux 8.4&#xff0c;你是不是发现系统总弹订阅提示、yum用不了、网卡IP老是变&#xff1f;别急&#xff0c;这份实战指南能帮你快速搭建稳定可用的开发环境。我们…

作者头像 李华
网站建设 2026/5/1 22:37:41

Windows热键冲突终极解决方案:3分钟快速定位键盘快捷键冲突

Windows热键冲突终极解决方案&#xff1a;3分钟快速定位键盘快捷键冲突 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…

作者头像 李华