Since the update to Android Studio 3.2.0
I face the following issue:
Execution failed for task ':mobile:dataBindingGenBaseClassesDebug'.
> couldn't make a guess for com.ACME.database.model.Order
also seen this answer, which hints for that "package-names must start with a lower-case letter".
... it seems alike, as if this variable
assignment would be the cause:
<data class=".databinding.OrderFragmentBinding">
<variable name="order" type="com.ACME.database.model.Order"/>
...
</data>
found: New data binding compiler for binding classes, which does not explain the change in behavior.
Q: are such assignments also affected by that naming convention? I mean, is there any chance (beside changing the uppercase package-name) to make that data-binding v2 "guess" work out?
these settings in the gradle.properties
do enable the androidx
data-binding compiler:
android.databinding.enableV2 = false
android.enableExperimentalFeatureDatabinding = true
one can see that by the fetched package:
Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.pom
Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.jar
and it complains:
WARNING: The option setting 'android.databinding.enableV2=false' is experimental and unsupported.
The current default is 'true'
WARNING: The option setting 'android.enableExperimentalFeatureDatabinding=true' is experimental and unsupported.
The current default is 'false'
most likely androidx.fragment.app.Fragment
instead of android.support.v4.app.Fragment
would be required, in order to data-bind a Fragment
with the default v2 data-binding compiler. this is also just a temporary solution - but still better than to revert to the v1 data-binding compiler.
Update:
Since com.android.tools.build:gradle:3.5.0
the above workaround does not work anymore; One has to refactor the XML files. It works best when not adding any class=""
attribute into the <data />
tag - and also adding this tag into any existing <layout>
tag. Duplicate id
on data-bound <include>
tags may also prevent the generation (the id
has to be set on the <include>
tag, not in the included layout).
Same thing happening to me after updating to 3.2 (working application before the migration, and no code change)... then this "guess" issue even though I do have lowercase in the first letters of the package name!
<data>
...
<variable name="rule" type="com.gta.viewmodels.vmRule"/>
...
</data>
So I "guess" your issue will still remain even after you update the package name (which is best practice anyways, given issues appear every single time I upgrade Android Studio!).
Anyway, I solved by downgrading the v2 databinding in gradle.properties (you'll get an "unsupported" warning, but just ignore it):
android.databinding.enableV2=false
Looks like the Android Studio PG hasn't tested that well this assertion (here):
Data Binding V2 is now enabled by default and is compatible with V1.
Had a similar problem. Solved by renaming the data class by starting with capital letters.
Its because of you class name or package name which use databinding. These class( which use databinding) have to start with capital word and packages start with lowercase.
I have faced this issue because 1.my viewmodel classes was not extended from BaseObservable
- my package name starts with capital letter
来源:https://stackoverflow.com/questions/52488520/data-binding-fails-with-couldnt-make-a-guess