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

Я только начал использовать 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

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

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

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

default: ext.kotlin_version = '1.1.3-2'

Я добавил с помощью синтаксиса:

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

Ответ 2

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, вызванным тем, как устанавливаются входы и выходы задач (и таким образом, как задачи связаны с зависимым от отношения).

Спасибо @Вячеслав Герасимов за создание проблемы 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, и отключение инкрементной компиляции, похоже, устраняет эту ошибку.

Ответ 3

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

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

Мы только что выпустили Android Studio 3.0 Canary 3 на Канарские острова и Дев-каналы. Также был выпущен Android Gradle Plugin 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"
}

Ответ 4

Я недавно написал "Blog for Data Binding android" с Kotlin здесь

Использовать Classpath

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

для более подробного ознакомления с этим post