Come utilizzare Data Binding e Kotlin in Android Studio 3.0.0


99

Ho appena iniziato a utilizzare Android Studio 3.0.0, ma ogni volta che provo a creare il mio progetto ottengo questo errore:

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

sto usando

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

Prima che usassi

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

E funzionava benissimo ... Cosa sto sbagliando ??

Grazie!



Questo bug appare anche senza alcuna associazione di dati. Devi solo usare la versione 1.1.2-4 di kotlin e applicare il plugin: 'kotlin-kapt'. Quindi riceverai questo errore Errore: dipendenza circolare tra le seguenti attività:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - dettagli omessi (elencati in precedenza)
Arsenius

Anche problema correlato: issuetracker.google.com/issues/38471980
CdA

Risposte:


20

Sembra che siano necessarie 3 voci gradle nell'app .gradle a livello di modulo per aggiungere l'associazione dati

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

Si noti che ho reso la versione del compilatore una variabile nel gradle di compilazione a livello di progetto in modo che possa essere gestita da un'unica posizione

l'impostazione predefinita era: ext.kotlin_version = '1.1.3-2'

Ho aggiunto con la sintassi delle parentesi:

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

1
Questa è la risposta corretta, aggiungere kotlin-kapt e quella linea di dipendenza. La risposta migliore non è più pertinente
SpaceMonkey,

Mi è piaciuto l'uso della variabile di versione
Shirane85

Ricevo: - con tutte le versioni [kapt] Si è verificata un'eccezione: java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev Non uso Android Studio da un po '
Rubber Duck,

78

UPD: Questo è stato risolto per il plug-in Android Gradle 3.0.0-alpha3, nella radice del progetto build.gradle, cambia il buildscript dependenciesper utilizzare

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

Questo è in realtà un bug nell'interoperabilità del plug-in Kotlin Gradle 1.1.2-4 con il plug-in Android Gradle 3.0.0-alpha1, causato da come sono impostati gli input e gli output delle attività (e quindi da come le attività sono collegate la relazione dipende).

Grazie @VyacheslavGerasimov per aver creato il problema KT-17936 .


Come soluzione temporanea, puoi provare a ripristinare il plug-in Kotlin Gradle 1.1.2-2 e disabilitare la compilazione incrementale:

Nella root del tuo progetto build.gradle, cambia la versione del plugin Kotlin Gradle:

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

Aggiungi local.propertiesalla radice del progetto, con la seguente riga:

kotlin.incremental=false

È un problema noto che il plug-in Kotlin Gradle 1.1.2-2 e versioni precedenti si arresta in modo anomalo con le versioni AGP più recenti e la disabilitazione della compilazione incrementale sembra risolvere tale arresto.


Credo che intendessi gradle.properties
Leandro Borges Ferreira

1
@ LeandroBorgesFerreira, puoi usare qualsiasi di loro, perché Gradle rileva e interpreta il local.propertiesfile anche nei tuoi progetti. Bene, forse local.propertiesè più adatto per le proprietà della macchina locale .
hotkey

1
Questo porta a questo errore: stackoverflow.com/questions/44056104/...
gderaco

6
In realtà anche per tornare a 1.1.2-3 funziona bene. Stesso problema con Android Studio 2.3.2 e gradle 2.3.2 quando si utilizza Kotlin 1.1.2-4 insieme al plugin kotlin-kapt
Arsenius

1
@hotkey basato su issuetracker.google.com/issues/38447344 questo è un problema nel plugin Android, non nel plugin kotlin gradle. È stata apportata una correzione che verrà rilasciata nella prossima versione alpha 3.0.0.
Nimrod Dayan

17

Per coloro che sono ancora alla ricerca di una soluzione adeguata, Google ha già risolto questo problema nella build di Android Studio 3.0 Canary 3 .

Venerdì 2 giugno 2017

Abbiamo appena rilasciato Android Studio 3.0 Canary 3 sui canali Canary e Dev. Anche il plug-in Android Gradle 3.0.0-alpha3 è stato rilasciato tramite maven.google.com. Questa versione ha correzioni a Gradle , Kotlin e molte altre correzioni. Continuiamo a correggere bug in tutte le aree di Studio 3.0 mentre stabilizziamo le nostre funzionalità, quindi continua a inviare feedback.

Configurazione gradle di lavoro:

build.gradle (progetto)

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

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

Come risolvere questo problema in Android Studio 2.3.2?
Arsenius

Puoi utilizzare una versione precedente del plug-in Kotlin con false incrementale. Controlla la risposta precedente con "hotkey"
Prokash Sarkar

1
No, 1.1.2-4ancora non funziona. Uno deve ancora usare1.1.2-2 e anche aggiungere kapt "com.android.databinding: compiler: 3.0.0-alpha3" al tuo build.gradle (modulo) o otterrai un riferimento non risolto: databinding.
0leg

Non risolto anche il 1.1.2-5
Daivid

2

Recentemente ho scritto blog per Android di associazione dati con Kotlin qui

Usa Classpath

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

Dipendenza

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

per maggiori dettagli controlla questo post

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.