Question or issue of Kotlin Programming:
I just created a new project on Android Studio 3.2 Canary 16 with Kotlin enabled. Then I also enabled data binding, but I’m getting an error saying that it could not find the DataBindingComponent class.
Here’s my project 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 }
My module gradle file:
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" }
My activity’s xml:
....
And here’s the build output:
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.(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
What is wrong with my project?
PS: The problem also happens on Android Studio 3.1.2
How to solve this issue?
Solution no. 1:
Databinding libraries are being refactored as a part of androidx refactoring.
I found the databinding annotation processor dependency link from google’s maven repository here.
I’ve constructed the actual gradle dependency from there.
kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"
Update
As of Android studio 3.2.0-beta01, databinding no longer needs its annotation processor dependency to be declared in the gradle file, since databinding is capable of resolving its dependency.
Solution no. 2:
With the following setup
Android Studio 3.2.1 Build #AI-181.5540.7.32.5056338, built on October
8, 2018 JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: OpenJDK 64-Bit
Server VM by JetBrains s.r.o macOS 10.13.3
And DataBinding simply enable by having this in my app build.gradle
apply plugin: 'kotlin-kapt'
and then
dataBinding { enabled = true }
and also this in my gradle.wrapper properties
android.databinding.enableV2=true
I had the same errors:
could not find the DataBindingComponent class.
I had more than 100 of them. It turned out that those errors were not important and that the true underlying error was not showed by the IDE. Therefore, I increased the number of errors that the Kotlin compiler can display by adding this in build.gradle:
dataBinding { enabled = true } kapt { javacOptions { // Increase the max count of errors from annotation processors. // Default is 100. option("-Xmaxerrs", 500) } }
An suddenly, right below all those fake errrors, I saw the real one caused by a failed merge conflict resolution 😔
Solution no. 3:
Just delete the compiler dependency (kapt “com.android.databinding:compiler:$gradleVersion), that worked for me. Apparently, it is provided with binding plugin from 3.2.0.
Solution no. 4:
If You’re already using Android Studio 3.2 stable version, Just remove the dependency, it’s already included.
Solution no. 5:
Same Error here on Android Studio 3.3.1, no Kotlin, pure Java, using androidx
build.gradle contains
dataBinding { enabled true }
gradle.properties contains
android.useAndroidX=true android.enableJetifier=true android.databinding.enableV2=true
I’ve been fighting the issue for hours and then solved it as follows:
Temporarily declare an empty interface for DataBindingComponent in your Project (in src/main/java/androidx.databinding/DataBindingComponent.java
)
package androidx.databinding; public interface DataBindingComponent { }
Let it compile and the error will be gone. But now the actual root error will be revealed. The one that was actually causing all the trouble but was somehow swallowed. In my case it was coming from AutoValue indicating that i was using it incorrectly
error: Parameter type java.lang.Boolean of setter method should be boolean to match getter
fixing that and then removing the dummy interface makes the compiler happy again.
Solution no. 6:
For what it’s worth, I had a similar issue and it was the result of a bad Room query that was related to a data binding.
Solution no. 7:
In my case it was a bad dagger annotation. I put custom scope on a Module instead of putting it on a provides method.
¯\_(ツ)_/¯
Solution no. 8:
I had the same issue.
Changing Kapt
to annotationProcessor
only for DataBinding fixed the problem for me.
Solution no. 9:
i face this problem when updating to android studio 3.2 , i change gradle plugin from 3.2.0 to 3.1.4 and it works fine
–> i think it’s a gradle problem , it will be updated for sure very soon
Solution no. 10:
Dagger may also be the cause. Changing dagger version from 2.17 back to 2.16 can fix this problem for now.
Discussion: https://github.com/google/dagger/issues/1245
Update
Dagger 2.18 is out but unfortunately it still won’t work after I tested(Have I missed something?).
Update2
Dagger 2.19 also won’t work and the discussion is locked.
But in the google issuetracke, there’re solutions/workarounds. I tested and they worked. Check it if you want to use the latest Dagger.
Update3
Dagger problem has been fixed in the Android Studio 3.3.
Solution no. 11:
i finally fixed my problem because i was using Android Annotations and they released a new Version 4.5.1 1 Hour ago, where they support Grade Plugin 3.2.0.
I was searching for this bug for a week and i´m happy now. Hope this helps you, too!
Solution no. 12:
My issue was that I tried to enable data binding for my Login
module but not the App
module. After adding:
dataBinding { enabled = true }
to the App
module and removed it from the Login
module, it worked.
Solution no. 13:
I have tried classpath 'com.android.tools.build:gradle:3.2.0-beta05'
with and without explicit dependency kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"
And still getting the same exception.
I have also tried 3.3.0-alpha06 but nothing changed.
UPDATE:
After 2 days, I resolved the issue.
What I did is, manually fixing all the files that had problems, because of Migration to AndroidX (wrong packages in imports and XMLs etc.). Additionally, I needed to update Glide from 4.7 to 4.8. When I fixed all red files the problem disappeared.
Solution no. 14:
This is my most stupid mistake!
I have actually created a private variable for Databinding and that was causing this issue.
Just use a lateinit var binding
and it Worked.
This could help someone!
Solution no. 15:
Just remove kapt “com.android.databinding…” dependency. If you are using Android Studio 3.2 or greater version.
Solution no. 16:
In my case,
If your using Dynamic Feature Module :
build.gradle(app)
dataBinding { enabled true }
This needs to enabled on both root and child gradle files (don’t forget to add kapt plugin).
Solution no. 17:
I fix it updating Android Studio to Canary 16 AND this in gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
Solution no. 18:
I solved the error by adding
android.useAndroidX=true android.enableJetifier=true
in my project’s gradle.properties file
Solution no. 19:
In my case the issue was resolved by changing:
androidExtensions.experimental = true
(i.e. gradle DSL as a one-liner)
to
androidExtensions { experimental = true }
apart from could not find the DataBindingComponent class
I also had error: incompatible types: NonExistentClass cannot be converted to Annotation
associated with kotlinx.android.parcel.Parcelize
annotation (@Parcelize)
Android Studio 3.3; gradle-4.10.1-all; tools.build:gradle 3.3.0
Solution no. 20:
Had same issue when I was importing class in databinding, that did not exist. Also use
allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xmaxerrs" << "1000" } } }
for recieving all error messages to find the issue. For my project it was limited to 50.