这个问题困扰了我好几天。首先我们公司新成立技术部,我有幸被安排结合当下业务,出一套Android框架。框架里面包含了slf4j这个jar,一个日志框架。我使用import moudle的方式导入了一个library到某个项目里面,使用我整合好的框架。
于是我在主工程中又引入了一个同样版本的slf4j,导致出现了如下错误。
对的,你没看错,编译居然出现的是找不到符号的错误。很模糊,不知如何下手。 因为它报的这样的错,所以让人觉得是不是Android API 28没有引入进来。结果发现没有问题。然后就是一翻百度,google,bing的疯狂搜索。
网上各种版本的解决方案都有,基本就是很大众的方式,大众方法总结如下:
方法1:Androidstudio菜单栏Build–Clean Project,再Rebuild Project,就可以编译通过了。或者,
把import里面对R的引用删除掉,让AS自动再次引入就可以了。此方法等效于 clean and rebuild。
好啦。准备去填下一个坑。
评价:来个不懂Android的人都会操作的步骤,基本和老爷爷玩计算机,搞不定,就是关机重启的方式一个道理;
方法2:
评价:感觉有点意思,尝试了一下,还是不行。首先我的项目没有搞什么混淆,所以不存在这样的问题。
方法3:
评价:很显然,我的问题,不是这个jar。所以我也就没尝试;
方法4,5,6,7,8:什么gradle版本过低,Android版本没有引入,……一系列的,如果你和网上说的错误一模一样的话,可以照着试试。
我的最终解决方案:
1.首先我从git上拉下来一份可以运行的代码。然后集成我的框架,做一步编译一把,看有没有问题。直到后面,我在主项目中也引入了slf4j之后,问题出现了,它爆出了找不到符号的问题。于是我想起来,我的library里面也引入了slf4j。把主项目的引入注释掉就好了。总结来说,这其实是gradle编译的一个bug。它没有正确的爆出错误所在,说严重点就是误导开发者走入了一个错误的方向,导致走了很多弯路。
问题虽然有方法解决了,但是折腾是个过程,让我学到了很多。突然解决了让我很开心,很有成就感。