koltin在android 开发
kotlin-stdlib
、kotlin-gradle-plugin
和 kotlinOptions.jvmTarget
的关系
这三者在 Kotlin 及 Android 项目中的作用各不相同,但它们共同影响 Kotlin 代码的编译和运行:
组件 | 作用 | 影响范围 |
---|---|---|
org.jetbrains.kotlin:kotlin-stdlib | Kotlin 标准库,提供 Kotlin 语言核心 API(如 List , String , Coroutine 等) | 运行时(Runtime),即程序执行时使用 |
org.jetbrains.kotlin:kotlin-gradle-plugin | Kotlin 编译插件,让 Gradle 能够编译 Kotlin 代码,并提供 Kotlin 相关 Gradle 任务 | 构建时(Build Time),影响 Kotlin 代码的编译过程 |
kotlinOptions.jvmTarget | 设置 Kotlin 编译时的 JVM 目标版本,决定生成的字节码格式 | 影响字节码兼容性,决定 Kotlin 代码可运行的最低 JDK 版本 |
1️⃣ kotlin-stdlib
(Kotlin 标准库)
kotlin
复制编辑
dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.0" }
- 作用:提供 Kotlin 语言的标准 API,例如
listOf()
,mapOf()
,run()
,apply()
等。 - 版本要求:
- 必须和
kotlin-gradle-plugin
版本匹配,否则可能会出现Module was compiled with an incompatible version of Kotlin
错误。 - 例如,如果
kotlin-gradle-plugin
是1.8.0
,建议kotlin-stdlib
也是1.8.0
。
- 必须和
2️⃣ kotlin-gradle-plugin
(Kotlin Gradle 插件)
kotlin
复制编辑
buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0" } }
- 作用:
- 让 Gradle 支持 Kotlin 代码编译,否则 Gradle 只能处理 Java 代码。
- 提供 Kotlin DSL、Kotlin 编译任务等 Gradle 构建能力。
- 需要版本匹配:
kotlin-gradle-plugin
的版本应该和kotlin-stdlib
保持一致,否则可能会出现兼容性问题。
3️⃣ kotlinOptions.jvmTarget
kotlin
复制编辑
kotlinOptions { jvmTarget = "1.8" }
- 作用:指定 Kotlin 编译成的 JVM 字节码版本。
- 影响:
jvmTarget = "1.8"
→ 生成 Java 8 字节码,兼容 Java 8 及更高版本。jvmTarget = "17"
→ 生成 Java 17 字节码,仅兼容 Java 17 及更高版本。
- 与 Kotlin 版本无关,但 必须与项目的 Java 兼容:
- 如果 Android 项目
compileSdkVersion
低于 24,可能 不支持jvmTarget = "1.8"
,此时编译可能失败。
- 如果 Android 项目
🔗 这三者如何关联?
kotlin-gradle-plugin
负责编译 Kotlin 代码,它需要正确的kotlin-stdlib
版本来提供运行时 API。kotlin-stdlib
提供 Kotlin 标准库,确保 Kotlin 代码能正常运行。kotlinOptions.jvmTarget
决定编译 Kotlin 代码时的 JVM 目标,影响生成的字节码格式,需与 Java 版本兼容。