web-dev-qa-db-fra.com

Comment utiliser la liaison de données 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, l'erreur suivante apparaît:

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 fonctionnait très bien… Ce que je fais mal ??

Merci!

Il semble que vous ayez besoin de 3 entrées Gradle dans l'application .gradle 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 la palette de construction au niveau du projet afin de pouvoir la gérer à partir d'un seul endroit.

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

J'ai ajouté avec la syntaxe du crochet:

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

UPD: Cela a été corrigé pour Android Gradle plugin 3.0.0-alpha3, dans votre racine de projet build.gradle, changez la buildscriptdependencies à utiliser

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

Il s’agit en fait d’un bogue dans l’interopérabilité du plug-in Kotlin Gradle 1.1.2-4 avec le plug-in Android Gradle 3.0.0-alpha1, causé par la manière dont les entrées et les sorties des tâches sont définies (et donc comment les tâches sont liées à la relation de dépendance).

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


Pour résoudre temporairement ce problème, 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

Le problème conn signifie que le plugin Kotlin Gradle 1.1.2-2 et inférieur se bloque avec les versions les plus récentes de AGP, et la désactivation de la compilation incrémentielle semble résoudre ce problème.

78
hotkey

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

Vendredi 2 juin 2017

Nous venons de publier Android Studio 3.0 Canary 3 sur les canaux Canary et Dev. Le Android Gradle Plugin 3.0.0-alpha3 a également été publié sur maven.google.com. Cette version corrige 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. Continuez donc à transmettre vos commentaires.

Configuration du niveau 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"
}
17
Prokash Sarkar

J'ai récemment écrit Blog for Data Binding 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 ceci post

2
Imtiyaz Khalani