我有一个 Android 工作室项目,我在其中添加了一个 Java 库模块,我称之为 core
。我的三个 Gradle 构建文件如下所示。
项目/build.gradle
buildscript {
ext.kotlin_version = '1.2.40'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
核心/build.gradle
apply plugin: 'java-library'
apply plugin: 'kotlin'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
...
}
应用程序/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android { ... }
dependencies {
implementation project(':core')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.android.support:appcompat-v7:27.1.1'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
testImplementation 'junit:junit:4.12'
}
我遇到的问题是,在 core/build.gradle
中,kotlin-stdlib-jdk7
行给了我警告 Plugin version (1.2.40) is not the same as library version (jdk7-1.2.40)
。我尝试将其更改为:
implementation "org.jetbrains.kotlin:kotlin-stdlib"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.2.40"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.40"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
但警告仍然存在。构建仍然成功运行,我知道我可以毫无问题地隐藏警告并忽略它,但我真的想知道为什么会发生这种情况以及如何摆脱它。我正在使用 Android Studio 3.0.1。有谁知道解决这个问题?
从 Kotlin 1.4 开始对默认添加的标准库的依赖:
您不再需要在任何 Kotlin Gradle 项目(包括多平台项目)中声明对 stdlib 库的依赖。默认情况下会添加依赖项。自动添加的标准库将与 Kotlin Gradle 插件的版本相同,因为它们具有相同的版本控制。对于特定于平台的源集,使用相应的特定于平台的库变体,而在其余部分添加一个通用标准库。 Kotlin Gradle 插件将根据 Gradle 构建脚本的 kotlinOptions.jvmTarget 编译器选项选择适当的 JVM 标准库。
Link Kotlin Gradle 插件文档。
解决方案,就我而言,我在应用程序级别 Gradle 中删除了行 implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version",警告消失正如 Kotlin 页面所说:“你不再需要在任何 Kotlin Gradle 项目中声明对 stdlib 库的依赖项,包括多平台项目。默认情况下会添加该依赖项。
The automatically added standard library will be the same version of the Kotlin Gradle plugin, since they have the same versioning.
For platform-specific source sets, the corresponding platform-specific variant of the library is used, while a common standard library is added to the rest. The Kotlin Gradle plugin will select the appropriate JVM standard library depending on the kotlinOptions.jvmTarget compiler option of your Gradle build script."
升级kotlin版本后可能会遇到这个问题,实际上旧版本仍在缓存中,这种情况下,您需要执行以下步骤
使缓存失效 清理项目 将项目与 gradle 文件同步
现在你的警告将消失。
[build.gradle(模块)]
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.10'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.10'
...
}
我的项目自动添加
(implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.10')
到项目构建文件。将实现移动到模块文件后,并删除
(implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.10')
警告消失了。 “stdlib”需要匹配模块文件中的“stdlib-jdk”。
在将 Firebase 与 Kotlin 一起使用时,我遇到了同样的问题。我必须使用可用的最新版本升级所有依赖项。
注意:让您的 kotlin-reflect 和 kotlin-stdlib 版本相同。
很多天后,我解决了问题将 kotlin_version 更新为“1.4.32”
就我而言,我将所有模块的版本号设置为与 app
的 gradle 相同的最新版本,问题已解决。
不定期副业成功案例分享
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"