Cómo usar Data Binding y Kotlin en Android Studio 3.0.0


99

Acabo de comenzar a usar Android Studio 3.0.0, pero cada vez que intento construir mi proyecto aparece este error:

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

estoy usando

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

Antes de que estuviera usando

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

Y estaba funcionando bien ... ¿Qué estoy haciendo mal?

¡Gracias!


1
Parece un error, problema creado: youtrack.jetbrains.com/issue/KT-17936
— Vyacheslav Gerasimov

Este error aparece incluso sin ningún enlace de datos. Simplemente use la versión 1.1.2-4 de kotlin y aplique el complemento: 'kotlin-kapt'. Entonces obtendrá este error Error: Dependencia circular entre las siguientes tareas:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - detalles omitidos (enumerados anteriormente)
— Arsenius

También problema relacionado: issuetracker.google.com/issues/38471980
— BoD

Respuestas:


20

Parece que necesita 3 entradas gradle en la aplicación .gradle a nivel de módulo para agregar enlace de datos

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

Tenga en cuenta que hice la versión del compilador una variable en el nivel de proyecto build gradle para que se pueda administrar desde un solo lugar

por defecto era: ext.kotlin_version = '1.1.3-2'

Agregué con sintaxis de corchetes:

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

1
Esta es la respuesta correcta, para agregar kotlin-kapt y esa línea de dependencia. La respuesta principal ya no es relevante
— SpaceMonkey

— Me

Estoy obteniendo: - con todas las versiones [kapt] Se produjo una excepción: java.lang.NullPointerException
— Pavel Zaitsev

@PavelZaitsev No he usado Android Studio en un tiempo
— Rubber Duck

78

UPD: Esto se corrigió para el complemento de Android Gradle 3.0.0-alpha3, en la raíz de su proyecto build.gradle, cambie el buildscript dependenciespara usar

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

En realidad, esto es un error en la interacción del complemento Kotlin Gradle 1.1.2-4 con el complemento de Android Gradle 3.0.0-alpha1, causado por la forma en que se configuran las entradas y salidas de las tareas (y por lo tanto, cómo se conectan las tareas con la relación dependiente).

Gracias @VyacheslavGerasimov por crear el problema KT-17936 .


Como solución temporal, puede intentar volver al complemento Kotlin Gradle 1.1.2-2 y deshabilitar la compilación incremental:

En la raíz de su proyecto build.gradle, cambie la versión del complemento Kotlin Gradle:

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

Agregue local.propertiesa la raíz del proyecto, con la siguiente línea:

kotlin.incremental=false

Es un problema conocido que el complemento Kotlin Gradle 1.1.2-2 y versiones anteriores se bloquean con las versiones más recientes de AGP, y la desactivación de la compilación incremental parece solucionar ese bloqueo.


Creo que te refieres a gradle.properties
— Leandro Borges Ferreira

1
@LeandroBorgesFerreira, puede usar cualquiera de ellos, porque Gradle también detecta e interpreta el local.propertiesarchivo en sus proyectos. Bueno, tal vez local.propertiessea ​​más adecuado para las propiedades de la máquina local .
— tecla

1
Esto conduce a este error: stackoverflow.com/questions/44056104/…
— gderaco

6
En realidad, volver a 1.1.2-3 también funciona bien. Mismo problema con Android Studio 2.3.2 y 2.3.2 Gradle cuando se utiliza junto con Kotlin 1.1.2-4 Kotlin-Kapt plug-in
— Arsenio

1
@hotkey basado en issuetracker.google.com/issues/38447344 este es un problema en el complemento de Android, no en el complemento kotlin gradle. Se realizó una corrección y se planea lanzarla en la próxima versión 3.0.0 alfa.
— Nimrod Dayan

17

Para aquellos que aún buscan una solución adecuada, Google ya ha solucionado este problema en la compilación de Android Studio 3.0 Canary 3 .

Viernes 2 de junio de 2017

Acabamos de lanzar Android Studio 3.0 Canary 3 para los canales Canary y Dev. El complemento Android Gradle 3.0.0-alpha3 también se lanzó a través de maven.google.com. Esta versión tiene correcciones para Gradle , Kotlin y muchas otras correcciones. Continuamos corrigiendo errores en todas las áreas de Studio 3.0 a medida que estabilizamos nuestras funciones, así que continúe enviando comentarios.

Configuración de gradle de trabajo:

build.gradle (proyecto)

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 (módulo)

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

¿Cómo solucionar este problema en Android Studio 2.3.2?
— Arsenius

Puede usar una versión anterior del complemento Kotlin con incremental false. Verifique la respuesta anterior con "tecla de
— acceso

1
No, 1.1.2-4todavía no funciona. Uno todavía tiene que usar 1.1.2-2y también agregar kapt "com.android.databinding: compiler: 3.0.0-alpha3" a su build.gradle (módulo) o obtendrá una referencia no resuelta: databinding.
— 0leg

No arreglado en 1.1.2-5 también
— Daivid

2

Recientemente escribí Blog para el enlace de datos de Android con Kotlin aquí

Usar Classpath

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

Dependencia

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

para obtener más detalles, consulte esta publicación

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.