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",照着上面的对照表试一次,会发现"真香"的

相关推荐
Libraeking2 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位2 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1234 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs5 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob5 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔5 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9965 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly7 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首7 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-194310 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed