Android Studio показывает предупреждение о зависимости Kotlin после второй сборки

Я только что включил Kotlin в своем проекте Android и наткнулся на предупреждение. После второй сборки (Build -> Rebuild Project) это предупреждение отображается под сообщениями:

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 ответ

Решение

Резюме

  1. Вы уже исправили это, обновляя свои зависимости, но я отвечу здесь, чтобы связать связанный вопрос.

  2. Вы правильно настроили зависимости вашего проекта и обновили плагин Kotlin до 1.2.

  3. Обычно этого достаточно, как здесь, но зависимости stdlib-jre были изменены на jdk в Kotlin 1.2.

  4. Но ваш проект зависел от Realm версии 4.3.1, и они исправили это в версии 4.3.2.

  5. Вы можете найти зависимость, вызывающую проблему, с помощью команд или новой вкладки сборки в AS 3.1.


1. Добавьте явные зависимости и обновите зависимости

Расширенные версии стандартной библиотеки Kotlin описаны в документации и в этом ответе.

Если вы нацелены на JDK 7 или JDK 8, вы можете использовать расширенные версии стандартной библиотеки Kotlin, которые содержат дополнительные функции расширения для API, добавленных в новые версии JDK.

Вместо kotlin-stdlib используйте одну из следующих зависимостей:

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

В Kotlin 1.1.x используйте kotlin-stdlib-jre7 а также kotlin-stdlib-jre8 вместо.

Обновите другие зависимости, если автоматическое разрешение не работает должным образом (см. Пункт 5).


2. Настройте обновления плагинов Gradle и Kotlin

Пересмотрите свою конфигурацию Gradle. Чтобы построить проект Android, написанный на Kotlin:

  • Настройте kotlin-android Gradle плагин и применить его к своему проекту.
  • добавлять kotlin-stdlib зависимостей.

Эти действия также могут выполняться автоматически в IntelliJ IDEA / AS, вызывая действие:

Инструменты | Котлин | Настроить Kotlin в проекте

Проверьте обновления плагина Kotlin:

Инструменты | Котлин | Настроить обновления плагина Kotlin


3. kotlin-stdlib-jre7 переименован в kotlin-stdlib-jdk7 во время выпуска 1.2.x

Сирра прокомментировала 27 декабря 2017 года здесь:

Kotlin stdlib был переименован во время выпуска 1.2.x. Смотрите здесь.

Старое имя kotlin-stdlib-jre7 был изменен на kotlin-stdlib-jdk7,

На эту библиотеку ссылаются в realm-library а также kotlin-extensions,


4. Realm обновлен до Kotlin 1.2 в версии 4.3.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, учитывая, что загружены зависимости порядка:

Что вы также можете сделать, это просто удалить (или переместить) дополнительные папки версий. например, удалите одну из двух папок ниже, затем пересоберите, и это должно избавить от предупреждения времени выполнения kotlin.

~ /.Gradle / кэширует / модули-2 / файлы-2,1/org.jetbrains.kotlin/ Котлин-STDLIB-jdk7 /1.2.10

~ /.Gradle / кэширует / модули-2 / файлы-2,1/org.jetbrains.kotlin/ Котлин-STDLIB /1.2.10

Другие вопросы по тегам