程序包com.***.databinding不存在
databinding好用是好用,但是遇到坑的时候,找问题就不那么方便了,以下是我今天遇到的一个问题,记录一下,可能帮到你。
经过是这样的,昨晚还能正常编译打包,今天整理了一下项目文件,移动了几个文件到另一个包下,我是使用Android Studio移动的文件,所有用到这个文件的地方都会自动修改包名。然而一编译,一大堆如下的错误,一脸懵逼埃
***.java
Error:(16, 49) 错误: 程序包com.***.databinding不存在Error:(41, 13) 错误: 找不到符号
符号: 类 ***Binding
位置: 类 ***Activity
这种问题绝大多数情况都是xml有问题,应该首先想到的是使用databinding的xml中某个地方写错了,多数情况的话仔细看看报错日志就能看出来,不多说,然而我的情况是,之前还好好的,没有修改代码也没做什么风骚的操作,突然报出了这么以对错误,使用git diff,对比改动的地方,并没有什么异常,炒鸡郁闷怎么会报这个问题。后来灵光一闪,想到有个文件在xml中有被引用。
一般的databinding的引用对象如下:
<data> <variable name="viewModel" type="com.aaa.AAAViewModel" /> </data>
AAAViewModel这个文件在aaa包下,如果你移动了AAAViewModel这个文件到bbb包下,问题就来了,其他引用到这个文件的java类里都会自动将aaa修改到bbb,但是databinding这个地方不会修改,还是保持着com.aaa.AAAViewModel,这个时候它已经标红了,但除非进入这个xml中看,不然你根本发现不了这个问题。所以你只要将它改为
<data> <variable name="viewModel" type="com.bbb.AAAViewModel" /> </data>
就万事大吉了,然而当我发现的时候,几个小时已经过去。。。
所以移动文件的时候一定小心,特别是使用了databinding的xml中,因为目前Android Studio还不能帮你自动把引用文件的包名改为最新的。