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!

Leandro Borges Ferreira
fuente
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'
}
Pato de goma
fuente
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.

tecla de acceso rápido
fuente
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"
}
Prokash Sarkar
fuente
¿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

Imtiyaz Khalani
fuente