迁移AndroidX时androidx.databinding不存在错误的解决咨询
解决AndroidX迁移中DataBinding找不到
androidx.databinding包的问题 兄弟,我之前迁移AndroidX的时候也踩过几乎一模一样的DataBinding坑,结合你的环境(Android Studio 3.4 + AGP 3.1.4 + Gradle 4.5.1)来看,核心问题大概率出在版本兼容性不足和一些配置细节上,给你一步步排查的方案:
1. 优先升级Android Gradle Plugin(AGP)和Gradle版本
你当前用的AGP 3.1.4是非常老的版本,对AndroidX的DataBinding支持很不完善,而且和你用的Android Studio 3.4版本不匹配。AS 3.4对应的推荐AGP版本是3.4.x(比如3.4.3),Gradle对应5.1.1:
- 打开项目根目录的
build.gradle,修改AGP版本:buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.4.3' } } - 打开
gradle/wrapper/gradle-wrapper.properties,修改Gradle下载地址:
这个升级能解决80%以上旧版本和AndroidX的适配问题。distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
2. 检查DataBinding的代码和布局文件是否完成AndroidX迁移
迁移后所有DataBinding相关的引用必须切换到androidx包:
- Java代码里的导入语句要改:
把import android.databinding.DataBindingUtil;换成import androidx.databinding.DataBindingUtil; - 布局文件必须用
<layout>标签包裹(这是DataBinding的基础要求,迁移后别漏了):<layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 你的布局内容 --> </LinearLayout> </layout> - 还要确保布局里的变量引用没有使用旧的Support库类(比如
android.support.v7.widget.RecyclerView要换成androidx.recyclerview.widget.RecyclerView)。
3. 清理缓存并彻底重建项目
旧的编译缓存是很多奇怪问题的元凶,按以下步骤操作:
- 点击Android Studio菜单栏的
File->Invalidate Caches / Restart,选择Invalidate and Restart - 重启后,先执行
Build->Clean Project,再执行Build->Rebuild Project
4. 修正gradle.properties和build.gradle的配置
- 打开
gradle.properties,保留以下配置,删掉android.databinding.enableV2(AGP 3.2以上默认启用V2,旧版本的这个配置反而会冲突):android.useAndroidX=true android.enableJetifier=true - 打开app模块的
build.gradle,确保:compileSdkVersion和targetSdkVersion至少是28(AndroidX的最低要求)- DataBinding的配置正确:
android { compileSdkVersion 28 defaultConfig { targetSdkVersion 28 // 其他默认配置 } dataBinding { enabled = true } }
5. 排查残留的Support库依赖
打开Android Studio的File -> Project Structure -> Dependencies,检查所有模块的依赖,有没有还在使用com.android.support:开头的库?如果有:
- 要么手动换成对应的AndroidX库(比如
com.android.support:appcompat-v7换成androidx.appcompat:appcompat:1.0.0) - 要么确认Jetifier能正确转换(升级AGP后Jetifier的转换可靠性会高很多)
如果做完以上步骤还是有问题,可以尝试删除项目根目录和app模块下的.gradle文件夹,然后重新同步项目(Sync Project with Gradle Files)。
内容的提问来源于stack exchange,提问作者Andante
相关产品推荐
相关产品推荐

