Acabo de crear un nuevo proyecto en Android Studio 3.2 Canary 16 con Kotlin habilitado. Luego también habilité el enlace de datos, pero recibo un error que dice que no pudo encontrar la clase DataBindingComponent.
Aquí está mi proyecto 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
}
Mi archivo de módulo gradle:
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 de mi actividad:
<?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>
Y aquí está el resultado de la compilación:
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
¿Qué le pasa a mi proyecto?
PD: el problema también ocurre en Android Studio 3.1.2
android
kotlin
android-databinding
Juliano Nunes Silva Oliveira
fuente
fuente
android.databinding.enableV2=false android.enableExperimentalFeatureDatabinding = false
. agregar esto paragrade.properties
resolver mi problemaRespuestas:
Las bibliotecas de enlace de datos se están refactorizando como parte de la refactorización de androidx.
Encontré el enlace de dependencia del procesador de anotaciones de enlace de datos del repositorio maven de Google aquí .
He construido la dependencia real de Gradle a partir de ahí.
kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"
Actualización A partir de Android Studio 3.2.0-beta01, el enlace de datos ya no necesita que se declare la dependencia del procesador de anotaciones en el archivo gradle, ya que el enlace de datos es capaz de resolver su dependencia.
fuente
Con la siguiente configuración
Y DataBinding simplemente habilita al tener esto en mi aplicación build.gradle
apply plugin: 'kotlin-kapt'
y entonces
dataBinding { enabled = true }
y también esto en mis propiedades gradle.wrapper
android.databinding.enableV2=true
Tuve los mismos errores:
could not find the DataBindingComponent class.
Tenía más de 100 de ellos. Resultó que esos errores no eran importantes y que el IDE no mostró el verdadero error subyacente. Por lo tanto, aumenté la cantidad de errores que el compilador de Kotlin puede mostrar agregando esto en build.gradle:
dataBinding { enabled = true } kapt { javacOptions { // Increase the max count of errors from annotation processors. // Default is 100. option("-Xmaxerrs", 500) } }
De repente, justo debajo de todos esos errores falsos, vi el verdadero causado por una resolución de conflicto de fusión fallida 😔
fuente
Simplemente elimine la dependencia del compilador (kapt "com.android.databinding: compiler: $ gradleVersion), que funcionó para mí. Aparentemente, se proporciona con el complemento de enlace de 3.2.0.
fuente
Si ya está utilizando la versión estable de Android Studio 3.2 , simplemente elimine la dependencia, ya está incluida.
fuente
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) ...
Mismo error aquí en Android Studio 3.3.1, sin Kotlin, Java puro, usando androidx
build.gradle contiene
dataBinding { enabled true }
gradle.properties contiene
android.useAndroidX=true android.enableJetifier=true android.databinding.enableV2=true
He estado luchando contra el problema durante horas y luego lo resolví de la siguiente manera:
Declare temporalmente una interfaz vacía para DataBindingComponent en su proyecto (en
src/main/java/androidx.databinding/DataBindingComponent.java
)package androidx.databinding; public interface DataBindingComponent { }
Déjelo compilar y el error desaparecerá. Pero ahora se revelará el error de raíz real. El que en realidad estaba causando todos los problemas, pero de alguna manera fue tragado. En mi caso, venía de AutoValue, lo que indica que lo estaba usando incorrectamente
error: Parameter type java.lang.Boolean of setter method should be boolean to match getter
arreglar eso y luego eliminar la interfaz ficticia vuelve feliz al compilador.
fuente
Por lo que vale, tuve un problema similar y fue el resultado de una consulta de Room incorrecta que estaba relacionada con un enlace de datos.
fuente
ArrayList
como retorno a una consulta donde tiene que ser unList
.En mi caso fue una mala anotación. Pongo un alcance personalizado en un módulo en lugar de ponerlo en un método proporciona.
¯\_(ツ)_/¯
fuente
Tuve el mismo problema.
Cambiar
Kapt
aannotationProcessor
solo para DataBinding solucionó el problema para mí.fuente
Me enfrento a este problema al actualizar a Android Studio 3.2, cambio el complemento de Gradle de 3.2.0 a 3.1.4 y funciona bien -> Creo que es un problema de Gradle, seguro que se actualizará muy pronto
fuente
La daga también puede ser la causa.
Cambiar la versión de dagger de 2.17 a 2.16 puede solucionar este problema por ahora.Discusión: https://github.com/google/dagger/issues/1245
ActualizarDagger 2.18 está disponible, pero desafortunadamente aún no funcionará después de que lo probé (¿me he perdido algo?).Actualización2Dagger 2.19 tampoco funcionará y la discusión está bloqueada.Pero en la lista de problemas de Google , hay soluciones / soluciones. Probé y funcionaron. Márcalo si quieres usar la última Dagger.Actualización3
El problema de Dagger se ha solucionado en Android Studio 3.3.
fuente
Finalmente solucioné mi problema porque estaba usando las anotaciones de Android y lanzaron una nueva versión 4.5.1 hace 1 hora, donde son compatibles con Grade Plugin 3.2.0.
Estuve buscando este error durante una semana y ahora estoy feliz. ¡Espero que esto le ayude también!
fuente
Mi problema fue que intenté habilitar el enlace de datos para mi
Login
módulo pero no para elApp
módulo. Después de agregar:dataBinding { enabled = true }
al
App
módulo y lo quitó delLogin
módulo, funcionó.fuente
Lo he intentado
classpath 'com.android.tools.build:gradle:3.2.0-beta05'
con y sin dependencia explícitakapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
Y sigue recibiendo la misma excepción.
También probé 3.3.0-alpha06 pero nada cambió.
ACTUALIZACIÓN: Después de 2 días, resolví el problema. Lo que hice fue arreglar manualmente todos los archivos que tenían problemas debido a la migración a AndroidX (paquetes incorrectos en importaciones y XML, etc.). Además, necesitaba actualizar Glide de 4.7 a 4.8. Cuando arreglé todos los archivos rojos, el problema desapareció.
fuente
¡Este es mi error más estúpido! De hecho, he creado una variable privada para el enlace de datos y eso estaba causando este problema.
Solo usa a
lateinit var binding
y funcionó.¡Esto podría ayudar a alguien!
fuente
Simplemente elimine la dependencia kapt "com.android.databinding ...". Si está utilizando Android Studio 3.2 o una versión superior.
fuente
En mi caso, si usa el módulo de funciones dinámicas:
dataBinding { enabled true }
Esto debe habilitarse tanto en archivos gradle raíz como secundarios (no olvide agregar el complemento kapt).
fuente
Lo solucioné actualizando Android Studio a Canary 16 Y esto en gradle.wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
fuente
Resolví el error agregando
android.useAndroidX=true android.enableJetifier=true
en el archivo gradle.properties de mi proyecto
fuente
android.useAndroidX:
Cuando se establece entrue
, esta bandera indica que desea comenzar a usar AndroidX a partir de ahora. Si la bandera está ausente, Android Studio se comporta como si la bandera estuviera configurada enfalse
.android.enableJetifier:
Cuando se establece entrue
, esta marca indica que desea tener soporte de herramientas (del complemento Gradle de Android) para convertir automáticamente las bibliotecas de terceros existentes como si estuvieran escritas para AndroidX. Si la bandera está ausente, Android Studio se comporta como si la bandera estuviera configurada enfalse
.En mi caso, el problema se resolvió cambiando:
androidExtensions.experimental = true
(es decir, Gradle DSL como una sola línea)
a
androidExtensions { experimental = true }
además de
could not find the DataBindingComponent class
que también me habíaerror: incompatible types: NonExistentClass cannot be converted to Annotation
asociado con lakotlinx.android.parcel.Parcelize
anotación (@Parcelize)Android Studio 3.3; gradle-4.10.1-todos; tools.build:gradle 3.3.0
fuente
Tuve el mismo problema cuando estaba importando la clase en el enlace de datos, que no existía. También use
allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xmaxerrs" << "1000" } } }
para recibir todos los mensajes de error para encontrar el problema. Para mi proyecto estaba limitado a 50.
fuente
Para mí, hubo un error en mi archivo de diseño. Hice referencia a una función que no existía.
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
A continuación se muestra la solución:
android:text="@{sleepTrackerViewModel.nightStrings}"
fuente
Algo más para probar :) Estaba tratando de obtener el GithubBrowserSample en Android Studio 3.2 (RC3). Seguí recibiendo muchos errores extraños en el enlace de datos a pesar de que no especifica versiones de enlace de datos en el build.gradle principal. La solución fue eliminar estas dos líneas de gradle.properties:
org.gradle.jvmargs=-Xmx4536m android.databinding.enableV2=true
fuente
Mi situación:
Descubrí que al eliminar el enlace de datos de mi diseño, recompilar la aplicación y luego volver a agregar el enlace de datos solucionó este problema.
Cambié el
DataBindingUtil.setContentView(...)
a solosetContentView(...)
y reduje el diseño de mi actividad al mínimo:<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello"/> </FrameLayout>
Luego, vuelva a agregar la vinculación de datos pieza por pieza.
fuente
En mi caso, hubo un error de importación en uno de los archivos. Simplemente abrir ese archivo hizo que las importaciones ocurrieran automáticamente y luego se construyó el proyecto.
Es una lástima que AS no haya dado ninguna indicación de esto, ni tampoco el seguimiento de pila de errores.
En caso de que nada de la respuesta publicada ayude, simplemente navegue por todos los archivos del proyecto y busque un archivo que tenga una declaración de importación incorrecta.
fuente
Es un error en el jetificador. Aquí hay una solución alternativa por ahora hasta la próxima actualización. Pon esto en tu proyecto gradle:
buildscript { dependencies { classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02' } }
fuente
Si está utilizando la biblioteca de la sala de datos, verifique la anotación @Dao en sus clases de DAO. En mi caso, olvidé agregar @Dao a mi interfaz de RoomDatabase'Dao.
fuente
Los errores de compilación para las interfaces generadas
DataBindingComponent
suelen ser engañosos. Intente buscar otros errores de compilación y corríjalos primero, luego vuelva a compilar.fuente
Tuve que eliminar la siguiente importación de Gradle,
androidx.room:room-compiler:2.1.0-alpha06
Aunque es un problema extraño, solo intente eliminar las importaciones innecesarias, debería funcionar.
fuente
Si lo usa con Room Database, verifique todas sus clases de Dao si tiene algún problema de importación o si no especifica el TypeConverter requerido
@TypeConverters
, este error es engañoso y debe corregirse si actualiza la versión de las herramientas de compilación de Gradle a nivel de proyecto a la última versión. Uséclasspath 'com.android.tools.build:gradle:3.4.0'
y obtuve el error correctamente.fuente
Para mi caso, hubo algún error en la clase de elemento de la base de datos de Room ... El error se refería al modificador privado que debería ser público para las variables miembro de la clase de elemento de la base de datos de Room.
Utilice y explore la línea de comandos ./gradlew assembleDebug para ver stacktrace.
# Habitación # Base de datos # Clase de tabla #DAO
fuente