程序包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还不能帮你自动把引用文件的包名改为最新的。