Jak korzystać z wiązania danych i Kotlin w Android Studio 3.0.0

99

Właśnie zacząłem korzystać z Android Studio 3.0.0, ale za każdym razem, gdy próbuję zbudować projekt, pojawia się ten błąd:

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

ja używam

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

Zanim użyłem

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

I działało dobrze ... Co robię źle?

Dzięki!

Leandro Borges Ferreira
źródło
1
Wygląda na błąd, utworzony numer: youtrack.jetbrains.com/issue/KT-17936
Wiaczesław Gierasimow
Ten błąd pojawia się nawet bez powiązania danych. Wystarczy użyć kotlin w wersji 1.1.2-4 i zastosować wtyczkę: „kotlin-kapt”. Wtedy pojawi się ten błąd Błąd: Zależność cykliczna między następującymi zadaniami:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - pominięto szczegóły (wymienione wcześniej)
Arsenius
Również związany problem: issuetracker.google.com/issues/38471980
BoD

Odpowiedzi:

20

Wygląda na to, że potrzebujesz 3 wpisów gradle w aplikacji .gradle na poziomie modułu, aby dodać powiązanie danych

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

Zauważ, że zrobiłem wersję kompilatora jako zmienną w gradle poziomu projektu, dzięki czemu można nią zarządzać z jednego miejsca

domyślnie: ext.kotlin_version = '1.1.3-2'

Dodałem ze składnią nawiasów:

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}
Gumowa kaczuszka
źródło
1
To jest poprawna odpowiedź, aby dodać kotlin-kapt i tę linię zależności. Najlepsza odpowiedź nie ma już znaczenia
SpaceMonkey
Podobało mi się użycie zmiennej wersji
Shirane85
Otrzymuję: - ze wszystkimi wersjami [kapt] Wystąpił wyjątek: java.lang.NullPointerException
Pavel Zaitsev
@PavelZaitsev Od jakiegoś czasu nie korzystałem ze studia Android
Rubber Duck
78

UPD: Zostało to naprawione dla wtyczki Android Gradle 3.0.0-alpha3, w katalogu głównym projektu yout build.gradle, zmień buildscript dependenciesużycie

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

W rzeczywistości jest to błąd we współpracy wtyczki Kotlin Gradle 1.1.2-4 z wtyczką Android Gradle 3.0.0-alpha1, spowodowany tym, jak ustawione są wejścia i wyjścia zadań (a tym samym jak zadania są powiązane z relacja zależna).

Dzięki @VyacheslavGerasimov za stworzenie numeru KT-17936 .


W ramach tymczasowego obejścia możesz spróbować powrócić do wtyczki Kotlin Gradle 1.1.2-2 i wyłączyć kompilację przyrostową:

W katalogu głównym projektu build.gradlezmień wersję wtyczki Kotlin Gradle:

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

Dodaj local.propertiesdo katalogu głównego projektu, używając następującego wiersza:

kotlin.incremental=false

Znanym problemem jest to, że wtyczka Kotlin Gradle w wersji 1.1.2-2 i starszych ulega awarii z najnowszymi wersjami AGP, a wyłączenie kompilacji przyrostowej wydaje się naprawiać tę awarię.

Klawisz skrótu
źródło
Myślę, że miałeś na myśli gradle.properties
Leandro Borges Ferreira
1
@LeandroBorgesFerreira, możesz użyć dowolnego z nich, ponieważ Gradle wykrywa i interpretuje local.propertiesplik również w twoich projektach. Cóż, może local.propertiesjest bardziej odpowiedni dla lokalnych właściwości maszyn .
skrót klawiszowy
1
Prowadzi to do tego błędu: stackoverflow.com/questions/44056104/ ...
gderaco
6
Właściwie powrót do wersji 1.1.2-3 również działa dobrze. Ten sam problem z Androidem Studio 2.3.2 i Gradle 2.3.2 podczas używania Kotlin 1.1.2-4 razem z wtyczką kotlin-kapt
Arsenius
1
@hotkey na podstawie issuetracker.google.com/issues/38447344 jest to problem we wtyczce Androida, a nie we wtyczce kotlin gradle. Wprowadzono poprawkę, która ma zostać wydana w następnej wersji alfa 3.0.0.
Nimrod Dayan
17

Dla tych, którzy wciąż szukają odpowiedniego rozwiązania, Google naprawił już ten problem w kompilacji Android Studio 3.0 Canary 3 .

Piątek, 2 czerwca 2017 r

Właśnie udostępniliśmy Android Studio 3.0 Canary 3 na kanałach Canary i Dev. Wtyczka Android Gradle Plugin 3.0.0-alpha3 została również wydana przez maven.google.com. To wydanie zawiera poprawki do Gradle , Kotlin i wielu innych poprawek. Nadal naprawiamy błędy we wszystkich obszarach Studio 3.0 w miarę stabilizowania naszych funkcji, więc prosimy o dalsze przekazywanie opinii.

Konfiguracja nachylenia roboczego:

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 (moduł)

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
źródło
Jak rozwiązać ten problem w Android Studio 2.3.2?
Arsenius
Możesz użyć starszej wersji wtyczki Kotlin z przyrostowym fałszem. Sprawdź poprzednią odpowiedź „
klawiszem
1
Nie, 1.1.2-4nadal nie działa. Nadal trzeba użyć 1.1.2-2i dodać kapt "com.android.databinding: compiler: 3.0.0-alpha3" do twojego build.gradle (moduł) albo otrzymasz Unresolved reference: databinding.
0leg
Nie naprawiono również w 1.1.2-5
Daivid
2

Mam recenly zapisu Blog o powiązanie danych z android Kotlin tutaj

Użyj Classpath

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

Zależność

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

więcej szczegółów znajdziesz w tym poście

Imtiyaz Khalani
źródło