Android ClassNotFoundException

我遇到了一个我的应用程序的问题,我想知道是否有人可以给我任何可能导致它的见解。

我得到一个ClassNotFoundException ,下面的重要行是

E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0 

现在这个应用程序已经超过一年和两天前,我有两个单独的用户与我联系,关于这个问题,一个HTC野火(2.1)和一个三星Galaxy S(?)。 现在我不能在我的设备(2.2和1.6)或模拟器(2.1)上重新创build这个问题,并且不能真正解决为什么这个类不能被类加载器find。 我花了一段时间search不到,希望有人指点一下! 它似乎只是当一个活动被加载,当contentView被设置,它试图膨胀一个名为GoBoardView的自定义视图,它扩展了View类,这只是做一些简单的canvas绘制,并没有使用任何第三方库或任何其他类将有一个包名冲突或任何东西。

请帮忙! 以防万一它的构build问题,我正在更新所有的SDK和ADT通过eclipse,因为它正在build设1.6和使用旧的ADT,但我不知道这是否会帮助只是想法值得一试。 任何build议将非常感谢! (请参阅下面的编辑)

 E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126) E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603) E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629) E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31) E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) E/AndroidRuntime(21982): ... 11 more E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0 E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466) E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) E/AndroidRuntime(21982): ... 22 more 

编辑

好的,研究用户在回答这个问题时所评论的一些链接,似乎使用错误的上下文来加载活动可能会导致这个问题。 我觉得这个有趣的原因之一是我发送的两个日志报告之一有这个exception之前

 W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games } 

这是相当自我解释 – 问题是我不知道这个活动可以从哪里开始使用一个非活动的上下文,所以我有点难住,认为它可能是一些多任务像怪癖和它被带回到前台东西 。 这可能会导致classLoader出现问题。 如果这是发生在用户的手机上,我不明白为什么我不能重现这一点(和大多数其他用户不能)。

另外一件事,我通过有趣的链接find了一些人遇到的问题,由于“不正确的apk安装”,这可以通过重新安装来解决,我已经问过有问题的用户试过了没有什么区别),而且似乎一旦遇到问题(这是第一次使用),它将是持久的。

Solutions Collecting From Web of "Android ClassNotFoundException"

我不禁注意到你的活动名称是couk.doridori.goigoFull.Board但你缺less的自定义View类是couk.doridori.goigo.customUI.GoBoardView …看起来你可能有两个不同的包(goigo vs vs goigoFull)。

你有没有机会用图书馆项目做一些聪明的事情? 您将需要非常小心代码和布局xml中完全合格的类名称…

(如果不是,请添加一些关于您的项目设置的更多信息,并粘贴layoutinflater令人窒息的布局XML)

我已经在这里讨论这个问题了: Android:无法实例化activity / ClassNotFoundException,但是我们找不到明确的答案…然而John J Smith关于正确使用Context的回答很有意思。

有些人也通过这个线索解决了他们的问题,并给出了一些想法。

希望这可以帮助…

(顺便我很高兴看到另一个Go游戏程序员!)

我添加了一个自定义的布局,并且在签名的应用程序包上开始看到ClassNotFoundException消息,但是开发构build工作得很好。 我正在使用ProGuard,并且我添加的新布局未包含在ProGuardconfiguration中的“排除”列表中。 我将自定义布局包含在ProGuard排除列表中,并为我解决了这个问题。

我有时在修改软件包名称后通常会遇到这个问题。 快速清理项目为我解决了这个问题。

还有另一件事导致“ClassNotFoundException”。 前段时间,android项目开始使用libs目录进行依赖。 如果一个jar文件在libs目录下,它会自动在类path中,所以你不必在项目设置中添加它。 然而,“libs”中的jar子不可能有源代码(这是荒谬的)。 所以,如果你想附加一个源代码,你可以将一个jar从“libs”移动到“lib”,然后将其添加到类path中。 你可以附上来源。 但是我已经多次看到这会在我的类上触发ClassNotFoundExceptions。 移动jar子回来解决了这个问题。

我遇到过同样的问题。 最后问题只是在布局xml中缺less表格。

之前:

  <org.osmdroid.views.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="0dip" tilesource="MapquestOSM" android:layout_weight="1" /> 

然后缩进classNotFoundException从来没有再次显示,并且地图显示正确:

  <org.osmdroid.views.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="0dip" tilesource="MapquestOSM" android:layout_weight="1" /> 

我的经验可能是android sdk已更新,并且需要刷新支持库的链接。 只需进入项目设置> android并再次指向支持库。

对我来说,这个问题是一个小小的错误。 我查了几个小时的代码,一切正常。 有一段时间我看着我的.xml文件 – 那里是:

在java文件中,我使用了一个ViewPager,并且在一个令人讨厌的xml小部分中,我错失了大写字母和input的viewPager。 很明显,这一个是无法find…

这是由于新版本的eclipse …从构buildpath中删除所有外部依赖关系,并使用project-> properties-> builspath-> libraries选项卡再次添加它。 现在添加所有的依赖项库,并通过在项目 – >属性 – > builspath-上的顺序和项目选项卡上点击来select所有的组件。 这将工作正常!