KTS语法

其实 KTS (Kotlin Script) 并没有那么可怕,它的核心逻辑和 Groovy 是一样的,只是"方言"变了

Groovy 像是文言文或者狂草 (写意,少写一个括号也能跑,但在哪里跑我也得猜); KTS 像是法律文书或者楷书(严谨,必须加括号,必须加等号,但哪里写错了 IDE 立马标红)

下面我们通过一个 HelloWorld 级别的工程,左边 Groovy,右边 KTS,来一场面对面的"翻译"


一、 三条核心"翻译"法则

在看代码前,只需要记住这三条法则,就能读懂 80% 的 KTS 代码:

  1. 字符串必须用双引号
    • Groovy: 'Hello'"Hello" 都可以。
    • KTS: 必须是 "Hello"
  2. 赋值必须用 =
    • Groovy: compileSdkVersion 30 (像是在喊命令)。
    • KTS: compileSdk = 30 (这是在给属性赋值)。
  3. 函数调用尽量加 ()
    • Groovy: implementation 'com.xxx'
    • KTS: implementation("com.xxx")

二、 根目录 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 并没有增加复杂度,它只是增加了严谨度

为什么值得转?

  1. 写代码的感觉:在写 Gradle 脚本时,不再是"抄代码",而是像写 Kotlin 业务代码一样,有类、有对象、有方法。
  2. 排错:少写个括号,IDE 界面上直接标红,不用等到点了 Run 跑了一半才报错。
  3. 跳转:按住 Ctrl/Cmd 点击任何配置项,直接看文档源码,不再需要百度"compileSdkVersion 接受什么类型"。

建议:下次新开一个小 Demo 项目时,勾选 "Kotlin DSL",照着上面的对照表试一次,会发现"真香"的

相关推荐
阿巴斯甜12 分钟前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker44 分钟前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95272 小时前
Andorid Google 登录接入文档
android
黄林晴3 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab15 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿18 小时前
Android MediaPlayer 笔记
android
Jony_19 小时前
Android 启动优化方案
android
阿巴斯甜19 小时前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇19 小时前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android