Android Studio在第二次构建后显示Kotlin依赖警告

我刚刚在Android项目中启用了Kotlin,我偶然发现了一个警告。 在第二次构建之后(Build – > Rebuild Project),这个警告显示在Messages:

Warning:Runtime JAR files in the classpath should have the same version. These files were found in the classpath: ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.2.10/85fe1811f3e586d0cc53aba1394d8089f1862215/kotlin-stdlib-jdk8-1.2.10.jar (version 1.2) ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.10/19bc012f8c4cd6b705bd6512263777cc19bcf259/kotlin-reflect-1.2.10.jar (version 1.2) /Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.1.51/kotlin-stdlib-jre7-1.1.51.jar (version 1.1) ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.10/cfe8b616b3bf0811ef70863c86b745a2e767a66e/kotlin-stdlib-jdk7-1.2.10.jar (version 1.2) ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.10/b9bf650516989595a5390e5a54181e16347208ac/kotlin-stdlib-1.2.10.jar (version 1.2) 

看起来第二个版本包含来自缓存的过时的kotlin-stdlib-jre7-1.1.51.jar 。 清洁构建(Build – > Clean Project)后,警告消失,下一个重建项目再次启动。

我正在使用Android Studio 3.0.1,并且明确地将Kotlin依赖包括在版本中:

的build.gradle

 buildscript { ext { // shared build properties kotlin_version = '1.2.10' buildToolsVersion = '27.0.2' minSdkVersion = 15 targetSdkVersion = 27 compileSdkVersion = 27 } repositories { jcenter() google() } dependencies { classpath "com.android.tools.build:gradle:3.0.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}" } } 

应用程序/的build.gradle

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}" implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}" [...] } 

同样在我们的Travis版本上显示警告。 因此,这不仅是我的本地设置问题。 即使这只是一个警告,我发布一个包含冲突版本的apk也不舒服。

概要

  1. 你已经修复它更新你的依赖关系,但我会在这里回答链接一个相关的问题。

  2. 您正确配置了您的项目依赖关系,并将Kotlin插件更新到1.2。

  3. 这通常就像这里一样,但是在Kotlin 1.2中,stdlib-jre的依赖关系被改为jdk。

  4. 但是你的项目取决于Realm版本4.3.1,他们在4.3.2版本中修正了这个问题。

  5. 您可以通过命令或AS 3.1中的新建版本标签find导致问题的依赖项。


1.添加显式依赖项并更新依赖项

Kotlin标准库的扩展版本在文档和此答案中进行了解释。

如果您的目标是JDK 7或JDK 8 ,则可以使用Kotlin标准库的扩展版本,其中包含用于添加到新JDK版本中的API的附加扩展function。

使用下列依赖项之一而不是kotlin-stdlib

 compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" 

在Kotlin 1.1.x中 ,改用kotlin-stdlib-jre7kotlin-stdlib-jre8

如果自动解决方法无法正常工作, 更新其他依赖项( 请参阅第5点 )。


2.配置Gradle和Kotlin插件更新

修改你的Gradle配置。 为了构建一个用Kotlin编写的Android项目 :

  • 设置kotlin-android gradle插件并将其应用到您的项目中。
  • 添加kotlin-stdlib依赖项。

这些动作也可以通过调用以下动作在IntelliJ IDEA / AS中自动执行:

工具| Kotlin | 在Project中配置Kotlin

在这里输入图像说明

检查Kotlin插件更新:

工具| Kotlin | 配置Kotlin插件更新

在这里输入图像说明


3.在1.2.x版本中,kotlin-stdlib-jre7重命名为kotlin-stdlib-jdk7

Sirrah在2017年12月27日发表评论:

Kotlin stdlib在1.2.x版本中被重命名。 看到这里 。

旧的名字kotlin-stdlib-jre7被改为kotlin-stdlib-jdk7

这个库在realm-librarykotlin-extensions引用。


4.在4.3.2版本中,Realm更新为Kotlin 1.2

将Gradle Wrapper更新到4.4.1并更新到Kotlin 1.2 ( #5642 )

  • 更新Gradle Wrapper并更新到Kotlin 1.2

  • kotlin-stdlib-jre7 – > kotlin-stdlib-jdk7

在这里输入图像说明


5.通过命令查找冲突依赖关系,或从AS 3.1开始生成选项卡

 ./gradlew -q dependencies app:dependencies --configuration variantDebugCompileClasspath 

在这里输入图像说明

从Android Studio 3.1 Beta 1开始,您可以使用新版本选项卡来查找冲突的依赖关系:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

在这种情况下,您删除了警告并修复了将Realm版本更新为4.3.2的问题:

在这里输入图像说明

在这里输入图像说明

考虑到下载的顺序依赖关系,也可以在Travis-ci版本中检查它:

在这里输入图像说明