Acabei de criar um novo projeto no Android Studio 3.2 Canary 16 com Kotlin habilitado. Em seguida, também habilitei a vinculação de dados, mas estou recebendo um erro informando que não foi possível encontrar a classe DataBindingComponent.
Este é o meu projeto gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.2.41'
ext.android_plugin_version = '3.2.0-alpha10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-alpha16'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Meu arquivo gradle do módulo:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
applicationId "net.julianonunes.myapp"
minSdkVersion 22
targetSdkVersion 27
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.android.support:design:27.1.1'
kapt "com.android.databinding:compiler:3.1.2"
}
Xml da minha atividade:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="data"
type="net.julianonunes.myapp.RegisterData" />
</data>
....
</layout>
E aqui está o resultado da compilação:
Executing tasks: [clean, :app:assembleDebug]
Configuration on demand is an incubating feature.
> Configure project :app
app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'androidx.databinding:databinding-compiler:3.2.0-alpha16'.
> Task :clean
> Task :app:clean
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild
> Task :app:compileDebugAidl NO-SOURCE
> Task :app:compileDebugRenderscript
> Task :app:checkDebugManifest
> Task :app:generateDebugBuildConfig
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:mainApkListPersistenceDebug
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :app:mergeDebugResources
> Task :app:createDebugCompatibleScreenManifests
> Task :app:processDebugManifest
> Task :app:splitsDiscoveryTaskDebug
> Task :app:processDebugResources
> Task :app:generateDebugSources
> Task :app:dataBindingExportBuildInfoDebug
> Task :app:transformDataBindingBaseClassLogWithDataBindingMergeGenClassesForDebug
> Task :app:transformDataBindingWithDataBindingMergeArtifactsForDebug
> Task :app:dataBindingGenBaseClassesDebug
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.pom
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.jar
> Task :app:kaptGenerateStubsDebugKotlin
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:28: error: cannot find symbol
protected ActivityMainBinding(DataBindingComponent _bindingComponent, View _root,
^
symbol: class DataBindingComponent
location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:46: error: cannot find symbol
@Nullable ViewGroup root, boolean attachToRoot, @Nullable DataBindingComponent component) {
^
symbol: class DataBindingComponent
location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:57: error: cannot find symbol
@Nullable DataBindingComponent component) {
^
symbol: class DataBindingComponent
location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:68: error: cannot find symbol
@Nullable DataBindingComponent component) {
^
symbol: class DataBindingComponent
location: class ActivityMainBinding
e: [kapt] An exception occurred: java.lang.NullPointerException
at java.io.File.<init>(File.java:277)
at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:77)
at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:203)
at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:188)
at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:90)
at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:65)
at org.jetbrains.kotlin.kapt3.ProcessorWrapper.process(annotationProcessing.kt:131)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:87)
at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:45)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:257)
at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:212)
at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:95)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:97)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:107)
at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:84)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:374)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:64)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:101)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:365)
at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:130)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:161)
at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:107)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:96)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:405)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:98)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:920)
at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:98)
at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:950)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:919)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:404)
at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
> Task :app:kaptDebugKotlin FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.7/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 8s
20 actionable tasks: 19 executed, 1 up-to-date
O que há de errado com meu projeto?
PS: O problema também acontece no Android Studio 3.1.2
android
kotlin
android-databinding
Juliano Nunes Silva Oliveira
fonte
fonte
android.databinding.enableV2=false android.enableExperimentalFeatureDatabinding = false
. adicionar isso paragrade.properties
resolver meu problemaRespostas:
Bibliotecas de ligação de dados estão sendo refatoradas como parte da refatoração do androidx.
Encontrei o link de dependência do processador de anotação de ligação de dados do repositório maven do Google aqui .
Eu construí a dependência gradle real a partir daí.
Atualização A partir do Android Studio 3.2.0-beta01, a vinculação de dados não precisa mais que sua dependência do processador de anotação seja declarada no arquivo gradle, uma vez que a vinculação de dados é capaz de resolver sua dependência.
fonte
Com a seguinte configuração
E o DataBinding simplesmente habilita tendo isso em meu app build.gradle
e depois
e também isso nas minhas propriedades gradle.wrapper
Eu tive os mesmos erros:
Eu tive mais de 100 deles. Descobriu-se que esses erros não eram importantes e que o verdadeiro erro subjacente não foi mostrado pelo IDE. Portanto, aumentei o número de erros que o compilador Kotlin pode exibir adicionando isto em build.gradle:
De repente, logo abaixo de todos aqueles erros falsos, vi o verdadeiro causado por uma falha na resolução de conflito de mesclagem 😔
fonte
Basta excluir a dependência do compilador (kapt "com.android.databinding: compiler: $ gradleVersion), que funcionou para mim. Aparentemente, ele é fornecido com o plugin de ligação de 3.2.0.
fonte
Se você já está usando a versão estável do Android Studio 3.2 , basta remover a dependência, ela já está incluída.
fonte
Caused by: java.lang.NullPointerException at java.io.File.<init>(File.java:277) at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:77) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:203) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:188) ...
Mesmo erro aqui no Android Studio 3.3.1, sem Kotlin, Java puro, usando androidx
build.gradle contém
gradle.properties contém
Estou lutando contra o problema há horas e, em seguida, resolvi-o da seguinte maneira:
Declarar temporariamente uma interface vazia para DataBindingComponent em seu projeto (em
src/main/java/androidx.databinding/DataBindingComponent.java
)Deixe-o compilar e o erro desaparecerá. Mas agora o erro raiz real será revelado. O que estava realmente causando todos os problemas, mas foi de alguma forma engolido. No meu caso, vinha do AutoValue, indicando que eu o estava usando incorretamente
consertar isso e remover a interface fictícia deixa o compilador feliz novamente.
fonte
Pelo que vale a pena, eu tive um problema semelhante e foi o resultado de uma consulta incorreta do Room que estava relacionada a uma vinculação de dados.
fonte
ArrayList
como retorno a uma consulta onde tem que ser umList
.No meu caso, foi uma anotação de punhal ruim. Eu coloquei o escopo personalizado em um módulo em vez de colocá-lo em um método fornece.
¯\_(ツ)_/¯
fonte
Eu tive o mesmo problema.
Mudar
Kapt
paraannotationProcessor
apenas para DataBinding corrigiu o problema para mim.fonte
Eu enfrento esse problema ao atualizar para o Android Studio 3.2, eu mudo o plugin do Gradle 3.2.0 para 3.1.4 e ele funciona bem -> eu acho que é um problema do Gradle, ele será atualizado com certeza muito em breve
fonte
A adaga também pode ser a causa.
Alterar a versão do punhal de 2.17 de volta para 2.16 pode corrigir esse problema por enquanto.Discussão: https://github.com/google/dagger/issues/1245
AtualizarO Dagger 2.18 foi lançado, mas infelizmente ainda não funcionará depois que eu testei (Será que perdi algo?).Update2Dagger 2.19 também não funcionará e a discussão está bloqueada.Mas no google issuetracke , existem soluções / soluções alternativas. Eu testei e eles funcionaram. Marque se quiser usar o punhal mais recente.Update3
O problema do punhal foi corrigido no Android Studio 3.3.
fonte
Finalmente resolvi meu problema porque estava usando o Android Annotations e eles lançaram uma nova versão 4.5.1 há 1 hora, onde suportam o Grade Plugin 3.2.0.
Procurei esse bug por uma semana e estou feliz agora. Espero que isso ajude voçe tambem!
fonte
Meu problema é que tentei habilitar a vinculação de dados para meu
Login
módulo, mas não para oApp
módulo. Depois de adicionar:para o
App
módulo e removê-lo doLogin
módulo, funcionou.fonte
Eu tentei
classpath 'com.android.tools.build:gradle:3.2.0-beta05'
com e sem dependência explícitakapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
E ainda obtendo a mesma exceção.
Eu também tentei 3.3.0-alpha06, mas nada mudou.
ATUALIZAÇÃO: após 2 dias, resolvi o problema. O que fiz foi consertar manualmente todos os arquivos que apresentavam problemas, por causa da Migração para AndroidX (pacotes errados nas importações e XMLs etc.). Além disso, eu precisava atualizar o Glide de 4.7 para 4.8. Quando consertei todos os arquivos vermelhos, o problema desapareceu.
fonte
Este é o meu erro mais estúpido! Na verdade, criei uma variável privada para Databinding e isso estava causando esse problema.
Basta usar um
lateinit var binding
e funcionou.Isso pode ajudar alguém!
fonte
Basta remover a dependência kapt "com.android.databinding ...". Se você estiver usando o Android Studio 3.2 ou uma versão superior.
fonte
No meu caso, se você estiver usando o Módulo de recursos dinâmicos:
Isso precisa ser habilitado nos arquivos gradle raiz e filho (não se esqueça de adicionar o plugin kapt).
fonte
Corrijo -o atualizando o Android Studio para Canary 16 E isso em gradle.wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
fonte
Resolvi o erro adicionando
no arquivo gradle.properties do meu projeto
fonte
android.useAndroidX:
Quando definido comotrue
, este sinalizador indica que você deseja começar a usar o AndroidX a partir de agora. Se o sinalizador estiver ausente, o Android Studio se comportará como se o sinalizador estivesse definido comofalse
.android.enableJetifier:
Quando definido comotrue
, este sinalizador indica que você deseja ter suporte de ferramenta (do plug-in Android Gradle) para converter automaticamente bibliotecas de terceiros existentes como se fossem escritas para AndroidX. Se o sinalizador estiver ausente, o Android Studio se comportará como se o sinalizador estivesse definido comofalse
.No meu caso, o problema foi resolvido alterando:
(ou seja, gradle DSL como um liner)
para
Além de
could not find the DataBindingComponent class
que também tinhaerror: incompatible types: NonExistentClass cannot be converted to Annotation
associado comkotlinx.android.parcel.Parcelize
anotação (@Parcelize)Android Studio 3.3; gradle-4.10.1-all; tools.build:gradle 3.3.0
fonte
Tive o mesmo problema quando estava importando aula no databinding, que não existia. Também use
para receber todas as mensagens de erro para encontrar o problema. Para meu projeto, foi limitado a 50.
fonte
Para mim, ocorreu um erro no meu arquivo de layout. Referenciei uma função que não existia.
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
Abaixo está a solução:
android:text="@{sleepTrackerViewModel.nightStrings}"
fonte
Outra coisa para tentar :) Eu estava tentando obter o GithubBrowserSample no Android Studio 3.2 (RC3). Continuei recebendo muitos erros estranhos na vinculação de dados, embora ela não especifique as versões de vinculação de dados no build.gradle principal. A solução foi remover essas duas linhas de gradle.properties:
fonte
Minha situação:
Descobri que, ao remover a ligação de dados do meu layout, recompilar o aplicativo e, em seguida, adicionar a ligação de dados de volta corrigiu esse problema.
Mudei o
DataBindingUtil.setContentView(...)
para justosetContentView(...)
e reduzi meu layout de atividade ao mínimo:Em seguida, adicione a ligação de dados peça por peça.
fonte
No meu caso, ocorreu um erro de importação em um dos arquivos. Basta abrir esse arquivo para que as importações ocorram automaticamente e, a partir daí, o projeto seja construído.
É uma pena que o AS não tenha dado nenhuma indicação para isso, nem o rastreamento de pilha de erros.
Caso nada da resposta postada ajude - basta navegar por todos os arquivos do projeto e procurar um arquivo que tenha declaração de importação incorreta.
fonte
É um bug no jetificador. Aqui está uma solução alternativa por enquanto até a próxima atualização. Coloque isso no gradle do seu projeto:
fonte
Se você estiver usando a biblioteca da dataroom, verifique a anotação @Dao em suas classes DAO. No meu caso, esqueci de adicionar @Dao à minha interface do RoomDatabase'Dao.
fonte
Erros de compilação para interfaces geradas como
DataBindingComponent
geralmente são enganosos. Tente procurar por quaisquer outros erros de compilação e corrija-os primeiro, depois recompile.fonte
Tive que remover a seguinte importação do Gradle,
Mesmo que seja um problema estranho, tente remover para importações desnecessárias, ele deve funcionar.
fonte
Se estiver usando com o Room Database, verifique todas as suas classes Dao se você tiver algum problema de importação ou não especificou o TypeConverter necessário usando
@TypeConverters
, esse erro é enganoso e deve ser corrigido se você atualizar a versão das ferramentas de compilação gradle em nível de projeto para a mais recente. Useiclasspath 'com.android.tools.build:gradle:3.4.0'
e obtive o erro corretamente.fonte
No meu caso, houve algum erro na classe de item do banco de dados Room ... O erro foi sobre o modificador privado que deve ser público para variáveis de membro da classe de item db Room.
Use e explore a linha de comando ./gradlew assembleDebug para ver o stacktrace .
#Room #Database #Table class #DAO
fonte