21

大多数设备都可以运行我的应用程序,但我收到此错误报告:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.company.app/com.company.app.MainActivity}: java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854)
at android.app.ActivityThread.access$2300(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newActivity(Instrumentation.java:1034)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2747)
... 11 more

我发现有一个相关的答案: ClassNotFoundException Android

但问题是,我的异常发生在我编写的任何代码行之前,那么如何确保加载类加载器?

4

12 回答 12

20

我有完全相同的问题。突然我的应用程序停止工作。我没有对清单进行任何更改,但由于一些意外,第一行丢失了:

<?xml version="1.0" encoding="utf-8"?>

这导致ClassNotFoundException启动器活动。我为此苦苦挣扎了几个小时,每次检查清单以查找可能的错误时,我都忽略了这一点。

在我再次删除这一行后发生了奇怪的事情。惊喜,惊喜应用程序仍在运行。(而且我没有忘记重建应用程序)

希望这可以帮助某人节省几个小时。

于 2013-01-27T22:01:40.560 回答
11

当我的类在清单中未正确定义时,我会收到此错误,通常是因为我没有输入正确的名称空间,如下所示:

    <activity android:name="com.company.project.main.MyMainActivity" ...>

    <activity android:name="MyMainActivity" ...>

不知道为什么它会在某些设备上为您工作,但在其他设备上却不行。

于 2011-05-27T04:45:59.150 回答
6

请关闭您的日食并打开。清理您的项目并进行刷新。然后跑过去看看。

于 2011-05-27T04:29:32.617 回答
3

我有同样的问题,问题是使用 Android 支持库的第三方库。

myproject/libs/android-support-v4.jar 
3rdpartylib/libs/android-support-v4.jar

当我用较新版本更新库时,支持库也更新了 - 但不是在我的项目中。之后,我无法启动应用程序并出现此错误。使两个库相同(副本)后,就可以了。

于 2013-12-06T10:11:42.247 回答
2

在 Eclipse 中,检查 Properties>Java Build Path>Source 并查看输出文件夹是否始终是默认文件夹(/bin/classes)。

对我来说,这是因为 maven 插件的问题:每当我右键单击>Maven>Update Project...>Ok 时,它会将 src 文件夹的输出文件夹更改为 target/classes,从而导致 ClassNotFoundException。

于 2014-07-18T08:16:01.837 回答
1

我遇到了这个问题,并使用this修复了它。

我没有在“订购和导出”下检查一个外部库,我得到了错误。

于 2014-07-16T00:39:45.737 回答
1

最近几天我遇到了这个问题。我可以在每个测试环境中运行我的应用程序,我可以导出一个发布 apk,并在每个测试环境中安装和运行它,但是当我将 apk 上传到 play 商店并从 play 商店安装时,应用程序会关闭并抛出 ClassNotFoundException . 事实证明,在我的项目中,我将多部分表单数据发送到 Web api,为此需要一些外部库。起初我只包括了所有的mim4j, httpclient, and httpcore .jars(原来是很多罐子)。

在一一删除几乎所有这些并查看我的项目是否仍然可以构建后,我只剩下一个 jar是 ACTUALLY REQUIRED。带走的是删除不需要构建的任何罐子。然后我测试了应用程序,结果发现我需要重新添加其中一个 jar,因为它的资源被构建项目所需的资源引用。确保在删除 jar 后测试应用程序的每个功能。

然后我浏览了我所包含的每个库项目,然后右键单击并选中了FOR EVERY LIBRARYMY OWN PACKAGEproject -> properties -> java build path -> order and export的所有框。

然后我对project -> clean包含的每个项目和主要项目都做了一个。

然后我导出了 apk 并将包进行了 beta 测试,它最终在用户设备上运行。

于 2014-06-24T17:22:44.200 回答
1

我刚刚遇到了这个问题。原来是因为我将 MainActivity 移到了一个新包中。

我所做的是将它从

com.example.MainActivity

进入

Activity

所以在我的清单中它看起来像这样:

 android:name="Activity.MainActivity"`

通过将其移回原始包装来解决它。它也可以通过正确重命名你的包来解决:

例如:com.example.Activity.MainActivity

希望这可以帮助某人。

于 2013-10-11T05:01:31.387 回答
1

上面的答案都不适合我,如果将来要为任何人腾出一些时间,请贡献我的解决方案。

显然对我有用的是在我的项目中删除了一个额外的支持 lib v4 jar。

通过 android 工具更新支持库后,我必须修复我使用的许多库中的 jar 不匹配问题,并将它们全部指向 android-sdks 文件夹中的同一个 jar。

我也意外地将它添加到我的项目中,由于某种原因,它使我的 MainActivity 类在运行时找不到,因为该 jar 也在我使用的 android-support-v7-appcompat 库中。

eclipse 上完全没有错误。

我从我的项目中删除了 jar,并在导出选项卡中的 v7 appcompat 库中检查了该 jar,以便我的项目也可以使用它,瞧,应用程序正在运行。

于 2015-08-22T14:59:07.410 回答
0

感谢版本控制,我注意到我的 .classpath xml 文件中没有这些行:

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>

这些导致主要活动找不到类。

于 2014-01-05T04:06:12.880 回答
0

运行 Robolectric 测试时我也有同样的情况。实际上,测试类路径包括带有android.com.Activity的jar,尚未创建。在我的情况下,一个解决方案是将 JAVA_HOME 从 10th JDK 版本降级,该版本用于 Maven 项目。

于 2018-05-13T08:53:30.673 回答
0

我将以下文件夹复制/粘贴到一个新项目中,保持相同的包名,并解决了它:

  • ../src/调试
  • ../src/main
  • ../src/发布

最后我添加了文件依赖项build.gradle

总帐

于 2018-12-20T07:36:17.930 回答