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.