我有一个Android工作室项目,其中我添加了一个Java库模块,我称之为核心。我的三个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"
    ...
}

app / 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'
}

我遇到的问题是,在核心/构建。在gradle中,kotlin-stdlib-jdk7行给我的警告是插件版本(1.2.40)与库版本(jdk7-1.2.40)不相同。我试着把它改成:

实现“org.jetbrains.kotlin: kotlin-stdlib”

实现“org.jetbrains.kotlin: kotlin-stdlib: 1.2.40”

实现“org.jetbrains.kotlin: kotlin-stdlib-jdk7:1.2.40”

实现“org.jetbrains.kotlin: kotlin-stdlib-jdk7: kotlin_version美元”

实现“org.jetbrains.kotlin: kotlin-stdlib-jre7: kotlin_version美元”

但警告依然存在。构建仍然成功地运行,我知道我可以在没有任何问题的情况下抑制警告并忽略它,但我真的想知道为什么会发生这种情况,以及如何摆脱它。我使用的是Android Studio 3.0.1。有人知道怎么解决这个问题吗?


当前回答

经过许多天,我已经解决了这个问题 更新kotlin_version到'1.4.32'

其他回答

这是Kotlin插件中的一个bug。我在Kotlin问题跟踪器中提交了一个问题。您可以简单地忽略该消息。

编辑:JetBrains将该问题标记为KT-23744“Kotlin库和Gradle插件版本不同”“非jvm依赖项检查假阳性”的副本。

从Kotlin 1.4依赖于默认添加的标准库开始:

You no longer need to declare a dependency on the stdlib library in any Kotlin Gradle project, including a multiplatform one. The dependency is added by default. 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插件文档。

我在Kotlin中使用Firebase时也遇到了同样的问题。 我必须将所有依赖项升级为可用的最新版本。

注意:让你的kotlin-reflect和kotlin-stdlib版本相同。

在我的案例中,我将所有模块的版本号设置为与app的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'。