Как использовать привязку данных и Kotlin в Android Studio 3.0.0


99

Я только начал использовать Android Studio 3.0.0, но каждый раз, когда я пытаюсь собрать свой проект, я получаю такую ​​ошибку:

Error:Circular dependency between the following tasks:
:app:compileDebugKotlin
+--- :app:dataBindingExportBuildInfoDebug
|    \--- :app:compileDebugKotlin (*)
\--- :app:kaptDebugKotlin
     \--- :app:dataBindingExportBuildInfoDebug (*)
(*) - details omitted (listed previously)

Я использую

kapt "com.android.databinding:compiler:2.2.0"

Раньше я использовал

androidProcessor "com.android.databinding:compiler:2.2.0"

И он работал нормально ... Что я делаю не так ??

Спасибо!


1
Похоже на ошибку, возникла
Вячеслав Герасимов

Эта ошибка появляется даже без привязки данных. Вы просто используете версию kotlin 1.1.2-4 и применяете плагин: 'kotlin-kapt'. Тогда вы получите эту ошибку Ошибка: Циклическая зависимость между следующими задачами:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - детали опущены (указаны ранее)
Arsenius

Также связанный с этим вопрос: issueetracker.google.com/issues/38471980
директоров

Ответы:


20

Кажется, что вам нужно 3 записи gradle в приложении .gradle на уровне модуля, чтобы добавить привязку данных

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }

Обратите внимание, что я сделал версию компилятора переменной в градиенте сборки на уровне проекта, чтобы ею можно было управлять из одного места.

по умолчанию было: ext.kotlin_version = '1.1.3-2'

Я добавил синтаксис скобок:

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}

1
Это правильный ответ, чтобы добавить kotlin-kapt и эту строку зависимости. Главный ответ больше не актуален
SpaceMonkey,

Понравилось использование переменной версии
Shirane85

Я получаю: - со всеми версиями [kapt] Произошло исключение: java.lang.NullPointerException
Павел Зайцев

@PavelZaitsev Я давно не пользовался студией android
Rubber Duck

78

UPD: это было исправлено для плагина Android Gradle 3.0.0-alpha3, в корне вашего проекта build.gradleизмените значение buildscript dependenciesна использование

classpath 'com.android.tools.build:gradle:3.0.0-alpha3'

На самом деле это ошибка во взаимодействии плагина Kotlin Gradle 1.1.2-4 с плагином Android Gradle 3.0.0-alpha1, вызванная тем, как заданы входы и выходы задач (и, следовательно, как задачи связаны с отношение зависимости).

Спасибо @VyacheslavGerasimov за создание номера KT-17936 .


В качестве временного решения вы можете попробовать вернуться к плагину Kotlin Gradle 1.1.2-2 и отключить инкрементную компиляцию:

В корне вашего проекта build.gradleизмените версию плагина Kotlin Gradle:

buildscript {
    ...
    dependencies {
        ...
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-2'
    }
}

Добавьте local.propertiesв корень проекта следующую строку:

kotlin.incremental=false

Известная проблема заключается в том, что плагин Kotlin Gradle 1.1.2-2 и ниже дает сбой с новейшими версиями AGP, и отключение инкрементной компиляции, похоже, исправляет этот сбой.


Я полагаю, вы имели в виду gradle.properties
Леандро Борхес Феррейра

1
@LeandroBorgesFerreira, вы можете использовать любой из них, потому что Gradle также обнаруживает и интерпретирует local.propertiesфайл в ваших проектах. Ну, может local.properties, больше подходит для свойств локальной машины .
горячая клавиша

1
Это приводит к этой ошибке: stackoverflow.com/questions/44056104/…
gderaco

6
На самом деле возврат к 1.1.2-3 тоже работает нормально. Тот же вопрос с Android Studio 2.3.2 и Gradle 2.3.2 при использовании Котлин 1.1.2-4 вместе с Котлин-kapt плагин
Арсением

1
@hotkey на основе issueetracker.google.com/issues/38447344, это проблема в плагине Android, а не в плагине kotlin gradle. Было внесено исправление, которое планируется выпустить в следующем альфа-выпуске 3.0.0.
Нимрод Даян

17

Для тех, кто все еще ищет подходящее решение, Google уже исправил эту проблему в сборке Android Studio 3.0 Canary 3 .

Пятница, 2 июня 2017 г.

Мы только что выпустили Android Studio 3.0 Canary 3 для каналов Canary и Dev. Плагин Android Gradle 3.0.0-alpha3 также был выпущен через maven.google.com. В этом выпуске есть исправления для Gradle , Kotlin и многие другие исправления. Мы продолжаем исправлять ошибки во всех областях Studio 3.0 по мере стабилизации наших функций, поэтому, пожалуйста, продолжайте присылать отзывы.

Рабочая конфигурация Gradle:

build.gradle (проект)

buildscript {
    ext.kotlin_version = '1.1.2-4'
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

build.gradle (модуль)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'


android {
    dataBinding.enabled = true
}
dependencies {
    kapt "com.android.databinding:compiler:3.0.0-alpha3"
}

Как исправить эту проблему в Android Studio 2.3.2?
Арсениус

Вы можете использовать старую версию плагина Kotlin с инкрементным значением false. Проверьте предыдущий ответ по «горячей клавише»
Прокаш Саркар

1
Нет, 1.1.2-4все равно не работает. Еще нужно использовать, 1.1.2-2а также добавить kapt "com.android.databinding: compiler: 3.0.0-alpha3" к вашему build.gradle (модулю), иначе вы получите Unresolved reference: databinding.
0leg 08

Также не исправлено на 1.1.2-5
Дайвид

2

Я недавно написал блог для привязки данных Android с Kotlin здесь

Использовать путь к классам

classpath 'com.android.tools.build:gradle:3.0.0-beta2'

Зависимость

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ......
    kapt 'com.android.databinding:compiler:2.3.1'
}

для более подробной информации ознакомьтесь с этим сообщением

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.