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

Tob*_*off 7 android kotlin android-studio android-gradle-plugin

我刚刚在我的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)
Run Code Online (Sandbox Code Playgroud)

看起来第二个版本包含过时kotlin-stdlib-jre7-1.1.51.jar的缓存.在干净的构建(构建 - >清理项目)之后,警告消失,下一个重建项目再次启动它.

我正在使用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}"
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序/的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}"
    [...]
}
Run Code Online (Sandbox Code Playgroud)

同样在我们的travis构建中显示警告.因此,这不仅是我本地设置的问题.即使它只是一个警告,我发布一个包含冲突版本的apk也感觉不舒服.

alb*_*elu 10

摘要

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

  2. 您正确配置了项目依赖项并将Kotlin插件更新为1.2.

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

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

  5. 您可以通过命令或AS 3.1中的新构建选项卡找到导致问题的依赖项.


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

文档答案中解释了Kotlin标准库的扩展版本.

如果您的目标是JDK 7或JDK 8,则可以使用Kotlin标准库的扩展版本,其中包含在新JDK版本中添加的API的其他扩展功能.

而不是kotlin-stdlib,使用以下依赖项之一:

compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
Run Code Online (Sandbox Code Playgroud)

在Kotlin 1.1.x中,使用kotlin-stdlib-jre7kotlin-stdlib-jre8 不是.

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


2.配置Gradle和Kotlin插件更新

修改您的Gradle配置.为了构建用Kotlin编写的Android项目:

  • 设置kotlin-androidgradle插件并将其应用于您的项目.
  • 添加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日评论:

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

旧名称kotlin-stdlib-jre7改为kotlin-stdlib-jdk7.

该库在realm-library和中引用kotlin-extensions.


4. Realm在4.3.2版本中更新为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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

在此输入图像描述

在此输入图像描述

在此输入图像描述

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

在此输入图像描述

在此输入图像描述

考虑到下载的顺序依赖性,也可以在Travis-ci构建中检查它:

在此输入图像描述