项目编译报错具体错误如下:
然后突然发现好多类都在报错
以我多年(只有两年^ - ^)的开发经验来看肯定是哪个资源文件导致的。点击build
左侧有ab字母的按钮
拖到最底下,上面的错其实不是真正问题原因,如下:
这里我们可以看到错误: 程序包xxx.xxx.databinding不存在
可是在我的项目目录里并没有databinding
这个包,而是在generatedjava
下有一个,这里的代码都是编译时期自动生成的,比如DataBinding;butterknife;dagger
。我的问题就出在butterknife上。
错误: 程序包xxx.xxx.databinding这个报错原因其实是butterknife问题导致编译没过,所以DataBinding自动生成的代码也有问题
错误: @OnClick annotation for method contains duplicate ID 2131298051. (com.popupwindow.MainRemoteWindow.onViewClicked)
public void onViewClicked(View view) {
定位到MainRemoteWindow类看下源码
@OnClick({R.id.title, R.id.right_top_btn, R.id.keyboard_clean, R.id.remote_close, R.id.remote_exit
, R.id.remote_change, R.id.remote_voice_down, R.id.remote_voice_up, R.id.remote_center_control_ok,
R.id.remote_center_control_up, R.id.remote_center_control_down, R.id.remote_center_control_left, R.id.remote_center_control_right,
//多余了一行
R.id.remote_center_control_up, R.id.remote_center_control_down, R.id.remote_center_control_left, R.id.remote_center_control_right})
public void onViewClicked(View view) {
}
这下看到问题了,在R文件中第一个多余的R.id.remote_center_control_up
的id值的16进制是0x7f090703
,换算成10进制刚好就是2131298051
,可能是手快了多复制了一行,一个很小的失误浪费的大半天才解决。
这个问题好难发现啊,没有具体的错误日志,还误导我去找是不是少了databinding
的包,是不是databinding
跟其他包冲突等等;butterknife
也没有提示,部门三个人找了半天,最终还是让我拿下了。
总结:遇到类似问题可以参考我的解决办法,看到错的时候不要慌,仔细通过现有的日志去分析产生的原因。
几十几百的错,一般都是布局、资源文件、.9图、包冲突、Studio出BUG等等导致编译没过。