Verwendung von Datenbindung und Kotlin in Android Studio 3.0.0

99

Ich habe gerade angefangen, Android Studio 3.0.0 zu verwenden, aber jedes Mal, wenn ich versuche, mein Projekt zu erstellen, wird folgende Fehlermeldung angezeigt:

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

ich benutze

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

Bevor ich benutzte

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

Und es hat gut funktioniert ... Was mache ich falsch?

Vielen Dank!

Leandro Borges Ferreira
quelle
1
Scheint wie ein Fehler, erstelltes Problem: youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov
Dieser Fehler tritt auch ohne Datenbindung auf. Sie verwenden einfach die Version 1.1.2-4 von kotlin und wenden das Plugin 'kotlin-kapt' an. Dann wird dieser Fehler angezeigt. Fehler: Zirkuläre Abhängigkeit zwischen den folgenden Aufgaben :: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - Details weggelassen (zuvor aufgeführt)
Arsenius
Ebenfalls verwandtes Problem: issuetracker.google.com/issues/38471980
BoD

Antworten:

20

Es scheint, dass Sie 3 Gradle-Einträge in der App .gradle auf Modulebene benötigen, um Datenbindung hinzuzufügen

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

Beachten Sie, dass ich die Compiler-Version zu einer Variablen im Build-Gradle auf Projektebene gemacht habe, damit sie von einem einzigen Ort aus verwaltet werden kann

Standard war: ext.kotlin_version = '1.1.3-2'

Ich habe mit Klammer-Syntax hinzugefügt:

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}
Badeente
quelle
1
Dies ist die richtige Antwort, um kotlin-kapt und diese Abhängigkeitslinie hinzuzufügen. Die Top-Antwort ist nicht mehr relevant
SpaceMonkey
Gefiel die Verwendung der Versionsvariablen
Shirane85
Ich erhalte: - mit allen Versionen [kapt] Eine Ausnahme ist aufgetreten: java.lang.NullPointerException
Pavel Zaitsev
@ PavelZaitsev Ich habe Android Studio seit einer Weile nicht mehr benutzt
Rubber Duck
78

UPD: Dies wurde für das Android Gradle Plugin 3.0.0-alpha3 behoben. Ändern Sie in Ihrem Projektstamm build.gradledas buildscript dependencieszu verwendende Plugin

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

Dies ist tatsächlich ein Fehler in der Interaktion des Kotlin Gradle-Plugins 1.1.2-4 mit dem Android Gradle-Plugin 3.0.0-alpha1, der dadurch verursacht wird, wie die Ein- und Ausgänge der Aufgaben eingestellt sind (und somit wie die Aufgaben damit verbunden sind die abhängige Beziehung).

Vielen Dank an @VyacheslavGerasimov für die Erstellung des Problems KT-17936 .


Als vorübergehende Problemumgehung können Sie versuchen, zum Kotlin Gradle-Plugin 1.1.2-2 zurückzukehren und die inkrementelle Kompilierung zu deaktivieren:

build.gradleÄndern Sie im Stammverzeichnis Ihres Projekts die Version des Kotlin Gradle-Plugins:

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

Fügen Sie local.propertiesdem Projektstamm mit der folgenden Zeile hinzu:

kotlin.incremental=false

Es ist ein bekanntes Problem, dass das Kotlin Gradle-Plugin 1.1.2-2 und niedriger mit den neuesten AGP-Versionen abstürzt, und das Deaktivieren der inkrementellen Kompilierung scheint diesen Absturz zu beheben.

Hotkey
quelle
Ich glaube, Sie meinten gradle.properties
Leandro Borges Ferreira
1
@LeandroBorgesFerreira, Sie können jeden von ihnen verwenden, da Gradle die local.propertiesDatei auch in Ihren Projekten erkennt und interpretiert . Na ja, ist vielleicht local.propertiesbesser geeignet für lokale Maschineneigenschaften .
Hotkey
1
Dies führt zu diesem Fehler: stackoverflow.com/questions/44056104/…
gderaco
6
Eigentlich funktioniert es auch gut, auf 1.1.2-3 zurückzugreifen. Gleiches Problem mit Android Studio 2.3.2 und Gradle 2.3.2 bei Verwendung von Kotlin 1.1.2-4 zusammen mit dem Kotlin-Kapt-Plugin
Arsenius
1
@hotkey basierend auf issuetracker.google.com/issues/38447344 Dies ist ein Problem im Android-Plugin, nicht im Kotlin Gradle-Plugin. Ein Fix wurde vorgenommen und soll in der nächsten Alpha-Version 3.0.0 veröffentlicht werden.
Nimrod Dayan
17

Für diejenigen, die noch nach einer geeigneten Lösung suchen, hat Google dieses Problem bereits in Android Studio 3.0 Canary 3 Build behoben .

Freitag, 2. Juni 2017

Wir haben gerade Android Studio 3.0 Canary 3 für die Kanäle Canary und Dev veröffentlicht. Das Android Gradle Plugin 3.0.0-alpha3 wurde ebenfalls über maven.google.com veröffentlicht. Diese Version enthält Korrekturen für Gradle , Kotlin und viele andere Korrekturen. Wir beheben weiterhin Fehler in allen Bereichen von Studio 3.0, während wir unsere Funktionen stabilisieren. Bitte geben Sie weiterhin Feedback weiter.

Arbeitsgradle-Konfiguration:

build.gradle (Projekt)

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 (Modul)

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"
}
Prokash Sarkar
quelle
Wie kann ich dieses Problem in Android Studio 2.3.2 beheben?
Arsenius
Sie können eine ältere Version des Kotlin-Plugins mit inkrementellem false verwenden. Überprüfen Sie die vorherige Antwort von "hotkey"
Prokash Sarkar
1
Nein, 1.1.2-4funktioniert immer noch nicht. Man muss 1.1.2-2noch kapt "com.android.databinding: compiler: 3.0.0-alpha3" zu Ihrem build.gradle (Modul) verwenden und hinzufügen, sonst erhalten Sie eine ungelöste Referenz: Datenbindung.
0leg
Auch am 1.1.2-5 nicht behoben
Daivid
2

Ich habe vor kurzem Blog für Datenbindung Android mit Kotlin hier geschrieben

Verwenden Sie Classpath

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

Abhängigkeit

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

Weitere Informationen finden Sie in diesem Beitrag

Imtiyaz Khalani
quelle