最近遇到的一个困扰了我一段时间的bug。这个bug的起因是我当前项目中使用了一段摄像头扫描框的代码,而我每次点击启动摄像头按钮是程序崩溃报错,错误的具体信息是:
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mining.app.zxing.view.ViewfinderView" on path: DexPathList[[zip file "/data/app/包名-1/base.apk", zip file "/data/app/包名-1/split_lib_dependencies_apk.apk", zip file
其实关于这个异常我之前有过了解,还专门和ClassNotFound异常做过比较。
NoClassDefFoundError这个异常从字面意思来说就是在程序中使用了未定义的class文件,也就是在程序编译打包的阶段,这个class没有被编译,所以在调用到这个class的时候就会出现错误。于是我以为是我引用的jar包没有被打包进去,遂百度。尝试了许多种方法,包括将app下的build删除,将.gradel删除等等方法,结果都没有用。
虽然这些解决方案对我来说没有起作用,但是我还是从这些方法中得到了另一个思路,那就是我一直以为是我的jar包错了,而没有想是不是代码错误,而编译器没有提示错误(android studio经常会出现这个问题)。后来我仔细看了出问题的文件,发现其实一个自定义的view,那么我想既然自定义了view便一定有使用的地方。于是我回头看了布局文件,找到了这个view被使用的地方,果然发现了问题。由于我的布局是直接复制之前项目的,所以路径还是之前项目的路径,而由于我的不仔细加上IDE没有提示导致这个布局是无法被加载的。但是其实这个class文件有被编译,只是我布局文件中引用的不对,所以会报NoClassDefFoundError这个错误。
以后一定要仔细仔细再仔细。。。