bug解决-NoClassDefFoundError

1,654 阅读1分钟

bug解决-NoClassDefFoundError

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/xxx/DataBinderMapperImpl

最近刚好是跟小伙伴重新写了公司的Andorid基础库,并且计划打成AAR包放到现有项目里面去进行试用,在把AAR包导入之后项目多次报了同一个错,如下图所示。

  • com.github.CymChad:BaseRecyclerViewAdapterHelper这个依赖库下的DataBinderMapperImpl找不到

    解决:这个原因是由于我们AAR中使用的三方库依赖为3.X版本的,而项目中用到的是2.X版本的。3.X中添加了对DataBinding的支持导致的。我这里直接将aar中的版本修改之后重新打包。问题解决

  • 我们自己写的AAR包中的DataBinderMapperImpl找不到

    解决:我们点到config包下DataBinderMapperImpl.collectDependencies()方法中可以看到,由于config包依赖了其他几个包,会循环添加那几个包的DataBinderMapperImpl的引用,所以其实就是config包依赖的包漏了导进去[哭笑不得]

总结:这个问题主要是导包的问题,不过我第一眼看到的时候感觉更像是databinding配置问题或者是databinding的xml哪里写的有问题。

题外话-databinding配置

因为一开始感觉更像是databinding的问题,所以特意去官网看了一下。图中有几个重点。

  • databinding库已经添加到android gradle 插件了,我们不需要再在依赖中写了,但是我们一定要enable他。
  • databinding开启的方法也更新了
    android {
        ...
        buildFeatures {
            dataBinding true
        }
    }
    
  • databinding必须要在所有使用databinding的module中开启,即使该module不直接使用databinding