首页 > 解决方案 > 为什么必须在 Android 中明确指定 $kotlin_version?

问题描述

在 Android Studio 项目中支持 Kotlin 需要两个依赖项:kotlin-gradle-plugininProject/build.gradlekotlin-stdlib-jdk7in Project/app/build.gradle,并且这两个需要具有相同的版本。常见的方法似乎是使用单个变量,然后您必须在 IDE 更新其 Kotlin 插件时手动更改该变量 - 从 Android Studio 3.1.3 开始,如果您使用 a作为kotlin_versionIDE,IDE 仍然无法自动更新依赖项$variable版本。

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

在非 Android Kotlin 项目中,即那些使用apply: 'kotlin'而不是 的项目中apply plugin: 'kotlin-android',可以简单地从依赖项中省略版本kotlin-stdlib-jdk7,然后从插件中自动解析。

implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7'

这甚至适用于 Android 项目中的非 Android 模块。我的问题是,为什么这在 Android 模块中是不可能的?为什么不能$kotlin_version简单地省略?如果该功能从 Kotlin 1.1.2 开始就存在,为什么即使在 Kotlin 1.2.51 上它仍然会导致 Android 上的编译错误?或者实际上是否可以做到这一点,如果可以,怎么做?

标签: androidgradlekotlin

解决方案


事实上,这并不是 Kotlin 特有的,而是与 Gradle 如何管理依赖关系有关。

有关如何在 Gradle 中指定依赖项的版本,请参阅https://docs.gradle.org/current/userguide/declaring_dependencies.html 。

在这种情况下

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

是设置版本的标准方式。由于此版本号对于多个依赖项是相同的,因此它在变量中声明,以便轻松更改所有 Kotlin 库的版本。

implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7'

dependency constraints从 Gradle 4.6 开始可用的用途。它用于相同的目的。可以将库的版本设置在一个中心位置,这样可以将版本保持在一个共同的值,而不必遍历gradle.properties更大项目的所有文件。


推荐阅读