问题
I'm using Databinding with one of my project with project name com.abc.def. I've related all my views with binding like
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
it worked fine but if I change my package name to com.Abc.Def it generated following error at the time of building Apk.
Cause: couldn't make a guess for com.Abc.Def.databinding.ActivityLoginBindingImpl .
Please Note:
- I have an old build with com.Abc.Def on playstore already live and I'm updating the version. That's why I have to Change package name.
- I can't remove Databinding from whole project.as it relates to all views.
- If I change my package name to old one ,it works fine.
I have already tried clean , rebuild and invalidate cache and restart .but no luck.
回答1:
I just bumped into the same issue. I was able to fix it by toggling databinding.enabled inside Build.gradle (Module). Below is a little step-by-step guide, that I went through after renaming my company package (com.abc.myapp -> com.xyz.myapp), which got databinding to work as expected:
- Build > Clean Project
go to your Build.gradle (Module) and disable databinding:
android { dataBinding { enabled = false } }File > Sync Project with Gradle Files
- Build > Rebuild Project (no surprise: you'll get a ton of error messages)
Now enable databinding again:
android { dataBinding { enabled = true } }File > Sync Project with Gradle Files
Build > Rebuild Project
Note: Some steps here may be unnecessary, but a little extra sanity checking has never done any harm during project setup, right!?
回答2:
According to JAVA package naming conventions: The package name may contain uppercase or lowercase letters[a-z], numbers, and underscores [ _ ]. You can not use capital letters in naming packages.
回答3:
com..Abc.Def.databinding.ActivityLoginBindingImpl .
Check if there is no empty package there, for those ..
回答4:
first of all, did you changed package name only in Manifest?
note that it could be different to applicationId - so you can only change it and leave app package as it was.
RCA: probably OS you are using to build is case-insensitive but java compiler is - that's reason why it can't find classes. Bindings are generated alongside other generated classes (for example dagger 2 classes generated by annotation processor), each generator creates own files within folder structure that reflects class package BUT if packages differ only with big/small letters, second generator will use same folder with wrong name. The reason is if OS is case-insensitive it assumes that folder already exist but java compiler not.
Other solution (except leaving app package as it is) is to :
- rename all packages in app to other that differ to app package or to use OS that is case-sensitive (macOS could be formatter this way or linux)
来源:https://stackoverflow.com/questions/51262888/change-package-name-after-implementation-of-data-binding