Comment utiliser la liaison de données et Kotlin dans Android Studio 3.0.0

99

Je viens de commencer à utiliser Android Studio 3.0.0, mais chaque fois que j'essaie de créer 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 que j'utilise

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

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

Merci!

Leandro Borges Ferreira
la source
1
Cela ressemble à un bug, problème créé: youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov
Ce bogue apparaît même sans aucune liaison de données. Vous utilisez simplement la version 1.1.2-4 de kotlin et appliquez le plugin: 'kotlin-kapt'. Ensuite, vous obtiendrez cette erreur Erreur: Dépendance circulaire entre les tâches suivantes:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - détails omis (répertoriés précédemment)
Arsenius
Également lié au numéro: issuetracker.google.com/issues/38471980
BoD

Réponses:

20

Il semble que vous ayez besoin de 3 entrées Gradle dans l'application .gradle au niveau du module pour ajouter une 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

la valeur 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'
}
Canard en caoutchouc
la source
1
C'est la bonne réponse, pour ajouter kotlin-kapt et cette ligne de dépendance. La meilleure réponse n'est plus pertinente
SpaceMonkey
J'ai aimé l'utilisation de la variable de version
Shirane85
Je reçois: - avec toutes les versions [kapt] Une exception s'est produite: java.lang.NullPointerException
Pavel Zaitsev
@PavelZaitsev Je n'ai pas utilisé le studio Android depuis un moment
Rubber Duck
78

UPD: Cela a été corrigé pour le plugin Android Gradle 3.0.0-alpha3, dans la racine de votre projet build.gradle, changez le buildscript dependenciespour 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 dépendante).

Merci @VyacheslavGerasimov pour la création du numéro KT-17936 .


En guise de solution temporaire, vous pouvez essayer de revenir au plugin Kotlin Gradle 1.1.2-2 et désactiver la compilation incrémentielle:

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

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

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

kotlin.incremental=false

C'est un problème connu que le plugin Kotlin Gradle 1.1.2-2 et inférieur se bloque avec les dernières versions d'AGP, et la désactivation de la compilation incrémentielle semble résoudre ce crash.

touche de raccourci
la source
Je crois que vous vouliez dire gradle.properties
Leandro Borges Ferreira
1
@LeandroBorgesFerreira, vous pouvez utiliser n'importe lequel d'entre eux, car Gradle détecte et interprète également le local.propertiesfichier dans vos projets. Eh bien, local.propertiesest peut - être plus adapté aux propriétés des machines locales .
raccourci clavier
1
Cela conduit à cette erreur: stackoverflow.com/questions/44056104/…
gderaco
6
En fait, revenir à la version 1.1.2-3 fonctionne également très bien. Même problème avec Android Studio 2.3.2 et gradle 2.3.2 lors de l'utilisation de Kotlin 1.1.2-4 avec le plugin kotlin-kapt
Arsenius
1
@hotkey basé sur issuetracker.google.com/issues/38447344 il s'agit d'un problème dans le plugin Android, pas dans le plugin kotlin gradle. Un correctif a été fait et devrait être publié dans la prochaine version 3.0.0 alpha.
Nimrod Dayan
17

Pour ceux qui recherchent toujours une solution appropriée, Google a déjà résolu ce problème dans la version Android Studio 3.0 Canary 3 .

Vendredi 2 juin 2017

Nous venons de publier Android Studio 3.0 Canary 3 sur les canaux Canary et Dev. Le plug-in Android Gradle 3.0.0-alpha3 a également été publié via maven.google.com. Cette version contient des correctifs pour Gradle , Kotlin et de nombreux autres correctifs. Nous continuons à corriger les bogues dans tous les domaines de Studio 3.0 à mesure que nous stabilisons nos fonctionnalités, veuillez donc continuer à transmettre vos commentaires.

Configuration de gradle de travail:

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"
}
Prokash Sarkar
la source
Comment résoudre ce problème dans Android Studio 2.3.2?
Arsenius
Vous pouvez utiliser une ancienne version du plugin Kotlin avec incrémental false. Vérifiez la réponse précédente par "raccourci clavier"
Prokash Sarkar
1
Non, 1.1.2-4ne fonctionne toujours pas. Il faut encore utiliser 1.1.2-2et ajouter kapt "com.android.databinding: compiler: 3.0.0-alpha3" à votre build.gradle (module) ou vous obtiendrez une référence non résolue: databinding.
0leg
Non fixé sur 1.1.2-5 également
Daivid
2

J'ai récemment écrit un blog pour la liaison de données Android avec Kotlin ici

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 post

Imtiyaz Khalani
la source