其实 KTS (Kotlin Script) 并没有那么可怕,它的核心逻辑和 Groovy 是一样的,只是"方言"变了
Groovy 像是文言文或者狂草 (写意,少写一个括号也能跑,但在哪里跑我也得猜); KTS 像是法律文书或者楷书(严谨,必须加括号,必须加等号,但哪里写错了 IDE 立马标红)
下面我们通过一个 HelloWorld 级别的工程,左边 Groovy,右边 KTS,来一场面对面的"翻译"
一、 三条核心"翻译"法则
在看代码前,只需要记住这三条法则,就能读懂 80% 的 KTS 代码:
- 字符串必须用双引号 :
- Groovy:
'Hello'或"Hello"都可以。 - KTS: 必须是
"Hello"。
- Groovy:
- 赋值必须用
=:- Groovy:
compileSdkVersion 30(像是在喊命令)。 - KTS:
compileSdk = 30(这是在给属性赋值)。
- Groovy:
- 函数调用尽量加
():- Groovy:
implementation 'com.xxx'。 - KTS:
implementation("com.xxx")。
- Groovy:
二、 根目录 build.gradle 对照
这是项目的入口配置
1. 声明插件 (Plugins)
Groovy (build.gradle):
groovy
// 以前的旧写法是 buildscript { dependencies { classpath ... } }
// 现在的写法:
plugins {
id 'com.android.application' version '8.2.0' apply false
id 'com.android.library' version '8.2.0' apply false
id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}
KTS (build.gradle.kts):
kotlin
plugins {
// 区别1:必须用双引号
// 区别2:必须用括号 id(...)
id("com.android.application") version "8.2.0" apply false
id("com.android.library") version "8.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
}
感受:这里差别不大,主要是加了括号和双引号。
三、 App 模块 build.gradle 对照 (重头戏)
这里是差异最大的地方,也是IDE 提示优势体现最明显的地方
1. 插件引用
Groovy:
groovy
plugins {
id 'com.android.application'
id 'kotlin-android'
}
KTS:
kotlin
plugins {
id("com.android.application")
id("kotlin-android")
}
2. Android 配置块 (最能体现赋值语法的区别)
Groovy:
groovy
android {
namespace 'com.example.myapp' // 只有空格
compileSdkVersion 34 // 只有空格
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 24
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
// 签名配置等...
}
KTS:
kotlin
android {
namespace = "com.example.myapp" // 必须加 = 号
compileSdk = 34 // 属性名变了(更简洁),且必须加 = 号
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24 // 必须加 =
targetSdk = 34 // 必须加 =
versionCode = 1
versionName = "1.0"
}
}
🔥 IDE 提示优势时刻: 在 KTS 中,你把鼠标放在
compileSdk上,按 Ctrl+左键(Mac 是 Cmd+左键),你是可以点进源码的! 你会看到它是BaseExtension类下的一个var compileSdk: Int属性。 这意味着: 如果你敲compileSdk = "34"(字符串),IDE 会直接爆红告诉你类型错误,而在 Groovy 中可能要等到编译失败才告诉你。
3. BuildTypes (构建类型)
这是最容易让人懵的地方,因为 Groovy 太动态了
Groovy:
groovy
buildTypes {
release { // 这里的 release 是凭空写出来的,Groovy 会动态创建
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
KTS:
kotlin
buildTypes {
// KTS 是静态语言,不能凭空变出 release。
// 必须用 getByName 或者 create 来获取已经存在的 release 配置
getByName("release") {
isMinifyEnabled = true // 布尔值通常加 is 前缀,且必须用 =
// 函数调用必须加括号
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
4. 依赖 (Dependencies)
Groovy:
groovy
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
testImplementation 'junit:junit:4.13.2'
}
KTS:
kotlin
dependencies {
// 必须加括号,必须双引号
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
testImplementation("junit:junit:4.13.2")
}
四、 回应"痛点":Config.gradle 在 KTS 里怎么办?
之前用了 config.gradle 来统一管理版本号。在 KTS 时代(以及 2025 年现在的标准),我们有了官方钦定的替代品:Version Catalog (libs.versions.toml)。
这比 config.gradle 爽太多了,而且支持 KTS 的代码提示
1. 创建 gradle/libs.versions.toml 文件:
toml
[versions]
kotlin = "1.9.20"
coreKtx = "1.12.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
2. 在 KTS 中使用 (IDE 智能提示炸裂):
当在 build.gradle.kts 里打字时:
kotlin
dependencies {
// 当你敲下 libs. 时,IDE 会自动弹出 androidx,然后弹出 core...
// 就像写 Java 代码一样爽,完全不用去记名字!
implementation(libs.androidx.core.ktx)
}
这比用 rootProject.ext.versionName 这种"盲猜"的写法要安全舒服得多
总结
KTS 并没有增加复杂度,它只是增加了严谨度
为什么值得转?
- 写代码的感觉:在写 Gradle 脚本时,不再是"抄代码",而是像写 Kotlin 业务代码一样,有类、有对象、有方法。
- 排错:少写个括号,IDE 界面上直接标红,不用等到点了 Run 跑了一半才报错。
- 跳转:按住 Ctrl/Cmd 点击任何配置项,直接看文档源码,不再需要百度"compileSdkVersion 接受什么类型"。
建议:下次新开一个小 Demo 项目时,勾选 "Kotlin DSL",照着上面的对照表试一次,会发现"真香"的