今天遇到了一个找不到类的错误,花了半天时间终于搞定了。解决的办法让我很无语,也让我觉得AndroidStudio更恶心了。

先来看错误的日志​:

04-18 10:02:27.570 24923-24923/com.eastsoft.android.esbic E/CrashReport: android.view.InflateException: Binary XML file line #62: Error inflating class com.example.administrator.demo.city.CityPicker at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707) at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at com.eastsoft.android.esbic.fragment.MainFragment$1.onClick(MainFragment.java:67) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.administrator.demo.city.CityPicker" on path: DexPathList[[zip file "/data/app/com.eastsoft.android.esbic-2.apk", zip file "/data/data/com.eastsoft.android.esbic/code_cache/secondary-dexes/com.eastsoft.android.esbic-2.apk.classes2.zip"],nativeLibraryDirectories=[/data/app-lib/com.eastsoft.android.esbic-2, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at android.view.LayoutInflater.createView(LayoutInflater.java:559) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)  at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  at com.eastsoft.android.esbic.fragment.MainFragment$1.onClick(MainFragment.java:67)  at android.view.View.performClick(View.java:4438)  at android.view.View$PerformClick.run(View.java:18422)  at android.os.Handler.handleCallback(Handler.java:733)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5017)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  at dalvik.system.NativeStart.main(Native Method) 


出错的原因:

这里一定要交待一下出错的原因,因为我不知道其他人出现这个错误的原因是否和我相同,如果不同的话不知道同样的解决办法有没有用。

1、使用了别人的代码,里边包含了自定义的View,将xml中的包名修改成自己的(修改之前编译过一次,当然是报错的)。

排查:

先是在网上找,找来找去大概说的都是v4库的版本不一样,照着这个方法操作了之后却不好使。是因为方法过时了吗?还是说引起这个错误的原因有很多,但是错误日志都一个尿性?

找来找去找不到办法,只好自己排查。

​一、首先我们仔细看错误日志,这里有几个关键:

1、Didn't find class ​,说明没有找到类文件,但是我们的类明明在啊

2、​on path: DexPathList,说明是在这个名为“DexPathList”里找不到我们的类

所以我们要搞清楚​DexPathList是个什么玩意。然而我找了半天没找到,只好在项目里试着搜索相关的东西。

​二、找到项目里的关键文件

项目里到底哪里对这些文件进行了索引呢?因为我出错的原因是对目录的名字进行了修改,所以我想到的是去搜索原先项目的名字。搜出来真的好多啊。

不过我们在搜出来的东西的最下面,可以找到这么一个东西:

​这里有个dex项,很像是它哦,看看它是个什么东西。仔细看这东西的目录结构:

​从目录我们可以看出来这个东西是在项目目录的app/build/里面。既然是build的,那我们把这玩意删了会怎么样呢?试试:

编译后发现上面的LaunchActivity可以找到了,但是又出现一个DataManager找不到了。什么情况?

三、两个build​,解决问题

Android的项目目录里是有两个build文件夹的,一个是:项目目录/app/build,另一个是:项目目录/build。如果把这俩build同时删除呢?

事实证明好使了,所以解决方法就是把两个build都删掉,然后运行。同时也说明在提交代码的时候两个build是不应该提交的。

​再遇到类似的问题,不妨这么试试

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐