【问题标题】:Android app ClassNotFoundException for main activity主要活动的 Android 应用程序 ClassNotFoundException
【发布时间】:2011-09-03 02:02:17
【问题描述】:

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

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

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

【问题讨论】:

标签: android classnotfoundexception


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 可悲的是,即使清单顶部有该行,我也会收到此异常。不过,这有点随机......
  • 这个答案帮助了我。我还必须运行 gradle clean,因为旧的调试 APK 仍然不正确。
【解决方案2】:

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

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

相对

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

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

【讨论】:

  • ,正确的定义方式
  • 好点。虽然在这个例子中,如果项目是 com.company.project,我认为它必须是“.main.MyMainActivity”?
  • 是的,在Activity之前,取包名,包名已经在menifest中定义了
  • 我认为 fredw 正在尝试解决我的问题,但我无法这么快验证它,因为问题只发生在客户端。
  • 这对我来说是固定的。谢谢。
【解决方案3】:

请关闭您的 Eclipse 并打开。清理您的项目并进行刷新。然后运行看看。

【讨论】:

  • 问题只出现在客户端。 ://
  • 不知道为什么这被否决了。重新启动 Eclipse 为我修复了它。
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

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

    对我来说,这是因为maven插件的问题:每当我右键单击>Maven>更新项目...>好的,它将src文件夹的输出文件夹更改为target/classes,导致ClassNotFoundException。

    【讨论】:

    • +1。我将我的项目更改为 Maven 项目,因此它将我的输出文件夹更改为 /target/classes。因此类未找到错误 - 因为它的路径错误!!!
    【解决方案6】:

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

    我所做的就是把它移走

    com.example.MainActivity
    

    进入

    Activity
    

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

     android:name="Activity.MainActivity"`
    

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

    例如:com.example.Activity.MainActivity

    希望这对某人有所帮助。

    【讨论】:

      【解决方案7】:

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

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

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

      然后我对包含的每个项目和主项目都做了project -&gt; clean

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

      【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

          以上所有答案均不适合我,如果将来可以为任何人腾出一些时间,请贡献我的解决方案。

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

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

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

          eclipse 完全没有错误。

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

          【讨论】:

            【解决方案10】:

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

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

                • ../src/debug
                • ../src/main
                • ../src/release

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

                GL

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-06-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-04
                  • 1970-01-01
                  • 2014-02-08
                  • 1970-01-01
                  • 2016-12-09
                  相关资源
                  最近更新 更多