108 votes

Comment utiliser Data Binding et Kotlin dans Android Studio 3.0.0

Je viens de commencer à utiliser Android Studio 3.0.0, mais chaque fois que j'essaie de construire mon projet, j'obtiens cette erreur :

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

J'utilise

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

Avant, j'utilisais

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

Et ça marchait très bien... Qu'est-ce que je fais de mal ?

Merci !

1 votes

On dirait un bug, un problème créé : youtrack.jetbrains.com/issue/KT-17936

0 votes

Ce bogue apparaît même sans liaison de données. Il suffit d'utiliser la version 1.1.2-4 de kotlin et d'appliquer le plugin : 'kotlin-kapt'. Vous obtiendrez alors cette erreur Error:Circular dependency between the following tasks : :app:compileDebugKotlin \--- :app:kaptDebugKotlin \--- :app:compileDebugKotlin ( ) ( ) - détails omis (listés précédemment)

0 votes

Question également liée : issuetracker.google.com/issues/38471980

80voto

hotkey Points 119

UPD : Ceci a été corrigé pour le plugin Android Gradle 3.0.0-alpha3, dans votre projet Root build.gradle changer le buildscript dependencies à utiliser

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

Il s'agit en fait d'un bogue dans l'interopérabilité du plugin Kotlin Gradle 1.1.2-4 avec le plugin Android Gradle 3.0.0-alpha1, causé par la façon dont les entrées et les sorties des tâches sont définies (et donc comment les tâches sont connectées avec la relation depends-on).

Merci @VyacheslavGerasimov pour avoir créé le problème KT-17936 .


Comme solution de contournement temporaire, vous pouvez essayer de revenir au plugin Kotlin Gradle 1.1.2-2 et désactiver la compilation incrémentale :

Dans la racine de votre projet build.gradle changer la version du plugin Kotlin Gradle :

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

Ajouter local.properties à la racine du projet, avec la ligne suivante :

kotlin.incremental=false

Il s'agit d'un problème connu que le plugin Kotlin Gradle 1.1.2-2 et inférieur se bloque avec les dernières versions de l'AGP, et que la désactivation de la compilation incrémentale semble corriger ce blocage.

0 votes

Je crois que vous vouliez dire gradle.properties

1 votes

@LeandroBorgesFerreira, vous pouvez utiliser n'importe lequel d'entre eux, parce que Gradle détecte et interprète l'option local.properties dans vos projets également. Bien, peut-être local.properties est plus approprié pour machine locale propriétés.

1 votes

Cela conduit à cette erreur : stackoverflow.com/questions/44056104/

41voto

Rubber Duck Points 380

Il semble que vous ayez besoin de 3 entrées gradle dans le fichier .gradle de l'application au niveau du module pour ajouter la liaison de données.

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

Notez que j'ai fait de la version du compilateur une variable dans le gradle de construction au niveau du projet afin qu'elle puisse être gérée à partir d'un seul endroit.

par défaut était : ext.kotlin_version = '1.1.3-2'

J'ai ajouté avec la syntaxe des crochets :

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

1 votes

C'est la bonne réponse, il faut ajouter kotlin-kapt et cette ligne de dépendance. La première réponse n'est plus pertinente

0 votes

J'ai apprécié l'utilisation de la variable version

0 votes

J'obtiens : - avec toutes les versions [kapt] Une exception s'est produite : java.lang.NullPointerException

17voto

Prokash Sarkar Points 7498

Pour ceux qui recherchent toujours une solution appropriée, Google a déjà corrigé ce problème en Android Studio 3.0 Canary 3 construire.

Vendredi 2 juin 2017

Nous venons de publier Android Studio 3.0 Canary 3 sur les canaux Canary et Dev. Dev Channels. Le plugin Android Gradle 3.0.0-alpha3 a également été publié. via maven.google.com. Cette version contient des corrections pour Gradle , Kotlin , et de nombreux autres correctifs. Nous continuons à corriger des bogues dans tous les domaines de Studio 3.0 tout en stabilisant nos fonctionnalités. Nous vous invitons donc à continuer à nous faire part de vos commentaires.

Configuration de gradle en cours :

build.gradle (projet)

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

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

0 votes

Comment résoudre ce problème dans Android Studio 2.3.2 ?

0 votes

Vous pouvez utiliser une ancienne version du plugin Kotlin avec un faux incrémental. Vérifiez la réponse précédente par "hotkey".

1 votes

Non, 1.1.2-4 ne fonctionne toujours pas. On doit toujours utiliser 1.1.2-2 et ajoutez également kapt "com.Android.databinding:compiler:3.0.0-alpha3" à votre build.gradle (module) ou vous obtiendrez Unresolved reference : databinding.

3voto

Imtiyaz Khalani Points 1317

J'ai récemment écrit un blog pour Data Binding Android avec Kotlin. aquí

Utiliser Classpath

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

Dépendance

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

Pour plus de détails, consultez ce site poste

2voto

Si vous utilisez le plugin Kotlin Gradle 1.3 et supérieur, vous n'avez pas besoin de spécifier kapt "com.android.databinding:compiler:$plugin_version"

https://youtrack.jetbrains.com/issue/KT-32057

Il suffit de préciser dataBinding dans votre fichier build.gradle :

android {
    ...
    dataBinding {
        enabled = true
    }
}

o

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X