Como usar Data Binding e Kotlin no Android Studio 3.0.0

99

Acabei de começar a usar o Android Studio 3.0.0, mas sempre que tento construir meu projeto, recebo este erro:

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

estou usando

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

Antes de usar

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

E estava funcionando muito bem ... O que estou fazendo de errado ??

Obrigado!

Leandro Borges Ferreira
fonte
1
Parece ser um bug, problema criado: youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov
Este bug aparece mesmo sem qualquer ligação de dados. Basta usar a versão 1.1.2-4 do kotlin e aplicar o plugin: 'kotlin-kapt'. Em seguida, você receberá este erro Erro: Dependência circular entre as seguintes tarefas:: app: compileDebugKotlin \ ---: app: kaptDebugKotlin \ ---: app: compileDebugKotlin ( ) ( ) - detalhes omitidos (listados anteriormente)
Arsenius
Também problema relacionado: issuetracker.google.com/issues/38471980
BoD de

Respostas:

20

Parece que você precisa de 3 entradas gradle no app .gradle no nível do módulo para adicionar vinculação de dados

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

Observe que tornei a versão do compilador uma variável no gradle de compilação de nível de projeto para que possa ser gerenciada em um único lugar

o padrão era: ext.kotlin_version = '1.1.3-2'

Eu adicionei com sintaxe de colchetes:

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}
Pato de borracha
fonte
1
Esta é a resposta correta, adicionar kotlin-kapt e essa linha de dependência. A resposta principal não é mais relevante
SpaceMonkey
Gostei do uso da variável de versão
Shirane85
Estou recebendo: - com todas as versões [kapt] Ocorreu uma exceção: java.lang.NullPointerException
Pavel Zaitsev
@PavelZaitsev Faz um tempo que não uso o Android Studio
Rubber Duck
78

UPD: isso foi corrigido para o plugin Android Gradle 3.0.0-alpha3, na raiz do seu projeto build.gradle, altere o buildscript dependenciespara usar

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

Na verdade, este é um bug na interoperação do plugin Kotlin Gradle 1.1.2-4 com o plugin Android Gradle 3.0.0-alpha1, causado por como as entradas e saídas das tarefas são definidas (e, portanto, como as tarefas são conectadas a relação de dependência).

Obrigado @VyacheslavGerasimov por criar o problema KT-17936 .


Como solução temporária, você pode tentar reverter para o plug-in Kotlin Gradle 1.1.2-2 e desativar a compilação incremental:

Na raiz do seu projeto build.gradle, altere a versão do plug-in Kotlin Gradle:

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

Adicione local.propertiesà raiz do projeto, com a seguinte linha:

kotlin.incremental=false

É um problema conhecido que o plug-in Kotlin Gradle 1.1.2-2 e anteriores trava com as versões mais recentes do AGP, e desativar a compilação incremental parece corrigir essa falha.

tecla de atalho
fonte
Acredito que você quis dizer gradle.properties
Leandro Borges Ferreira
1
@LeandroBorgesFerreira, você pode usar qualquer um deles, pois o Gradle detecta e interpreta o local.propertiesarquivo em seus projetos também. Bem, talvez local.propertiesseja mais adequado para propriedades de máquinas locais .
tecla de atalho
1
Isso leva a este erro: stackoverflow.com/questions/44056104/…
gderaco
6
Na verdade, para reverter para 1.1.2-3 também funciona bem. O mesmo problema com o Android Studio 2.3.2 e o gradle 2.3.2 ao usar o Kotlin 1.1.2-4 junto com o plug-in kotlin-kapt
Arsenius
1
@hotkey baseado em issuetracker.google.com/issues/38447344 este é um problema no plug-in do Android, não no plug-in gradle do kotlin. Uma correção foi feita e está planejada para ser lançada na próxima versão alfa 3.0.0.
Nimrod Dayan
17

Para aqueles que ainda procuram uma solução adequada, o Google já corrigiu esse problema no Android Studio 3.0 Canary 3 build.

Sexta-feira, 2 de junho de 2017

Acabamos de lançar o Android Studio 3.0 Canary 3 para os canais Canary e Dev. O Android Gradle Plugin 3.0.0-alpha3 também foi lançado em maven.google.com. Esta versão contém correções para Gradle , Kotlin e muitas outras correções. Continuamos corrigindo bugs em todas as áreas do Studio 3.0 à medida que estabilizamos nossos recursos, portanto, continue enviando comentários.

Configuração do gradle de trabalho:

build.gradle (projeto)

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
fonte
Como corrigir esse problema no Android Studio 2.3.2?
Arsenius
Você pode usar uma versão mais antiga do plug-in Kotlin com falso incremental. Verifique a resposta anterior por "tecla de atalho"
Prokash Sarkar
1
Não, 1.1.2-4ainda não funciona. Ainda é preciso usar 1.1.2-2e também adicionar kapt "com.android.databinding: compiler: 3.0.0-alpha3" em seu build.gradle (módulo) ou você obterá Referência não resolvida: databinding.
0leg
Também não corrigido em 1.1.2-5
Daivid
2

Recentemente, escrevi um Blog para Android Data Binding com Kotlin aqui

Usar Classpath

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

Dependência

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 mais detalhes confira esta postagem

Imtiyaz Khalani
fonte