【问题标题】:ClassNotFoundException after upgrading to ADT 18升级到 ADT 18 后出现 ClassNotFoundException
【发布时间】:2012-05-16 04:33:24
【问题描述】:

自从我将 ADT 更新到 19 后,我开始出现以下错误。 每当我启动我的应用程序时都会出现问题。 我检查了所有与此相关的以前的帖子,但似乎没有一个有帮助。任何想法都将不胜感激......

我的设置

  1. 我目前在 Windows 7 64 位中安装了 ADT 18、SDK 19、elcipse。
  2. 我使用制作 ashare.jar 的库项目,我的所有外部 jar(即保管箱、commons 编解码器)都位于库项目 (Ashare) 的“libs”文件夹中。
  3. 我不使用 proguard。

我们如何看待这个问题。

  1. 在 Eclipse 中创建 apk > {MyProject} > 右键单击​​ > Android 工具 > 导出签名的应用程序包
  2. 使用“adb install XXX.apk”在模拟器或 dev.phone 中安装 apk
  3. 启动应用程序。然后,砰。它抛出错误。

一些值得注意的事情是

  1. 在我将 Eclipse 中的 ADT 更新到版本 18 后开始发生这种情况
  2. 只有当我制作签名的 apk 并在模拟器或 dev.phone 中运行它时才会发生这种情况。
  3. 如果我使用 {MyProject} > 右键单击​​ > 运行方式 > Android 应用程序运行我的应用程序,我看不到问题
  4. 当我检查 classes.dex 内部时,我发现那里缺少一些类。我不确定,但我觉得构建过程不包括 classes.dex 中的所有类
  5. 在导出过程中,Eclipse 控制台没有错误(我在 Android>Build>Build 输出设置中使用了详细选项)

Java 异常

05-07 08:52:48.336: D/AndroidRuntime(3055): Shutting down VM
05-07 08:52:48.336: W/dalvikvm(3055): threadid=1: thread exiting with uncaught exception (group=0x40a3e1f8)
05-07 08:52:48.340: E/AndroidRuntime(3055): FATAL EXCEPTION: main
05-07 08:52:48.340: E/AndroidRuntime(3055): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.acj0.barcodeexpdemo/com.acj0.barcodeexpdemo.Launcher}: java.lang.ClassNotFoundException: com.acj0.barcodeexpdemo.Launcher
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.os.Looper.loop(Looper.java:137)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at java.lang.reflect.Method.invokeNative(Native Method)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at java.lang.reflect.Method.invoke(Method.java:511)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at dalvik.system.NativeStart.main(Native Method)
05-07 08:52:48.340: E/AndroidRuntime(3055): Caused by: java.lang.ClassNotFoundException: com.acj0.barcodeexpdemo.Launcher
05-07 08:52:48.340: E/AndroidRuntime(3055):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
05-07 08:52:48.340: E/AndroidRuntime(3055):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
05-07 08:52:48.340: E/AndroidRuntime(3055):     ... 11 more

2012 年 5 月 7 日更新

  • 我所有的 jars 都在 Library 项目的“libs”文件夹中,我看到它们都包含在“Android Dependencies”中

2012 年 5 月 18 日更新 - 暂时解决

  • 我找到了临时解决方案。在运行“导出签名的应用程序包”之前,我做了“清理”,没有选中“自动构建”选项。然后,我再也看不到错误了。我不知道为什么它有效。如果您有任何想法,请告诉我。

【问题讨论】:

  • 发布您发现的 dex 文件中缺少的类的来源。安装apk时,也尝试捕获odex过程中生成的logcat。
  • 我遇到了类似的问题...这些库是否包含在名为 lib 的文件夹中?还是库?你应该选择第二个......
  • 我在更新 SDK 版本时遇到了同样的异常。问题和答案是(here
  • +1 进行第二次更新。禁用“自动构建”为我解决了这个问题。在我的设置中,其他一切似乎都是正确的。
  • 第二次更新也 +1。升级后我遇到了同样的问题。原因有什么新的提示吗? ADT 18 出了什么问题?已安装最新更新。

标签: android eclipse adt classnotfoundexception


【解决方案1】:

将您的外部 jar 放在 libs 目录中。 你可以看看this link

【讨论】:

  • 感谢 lujop。我的所有 jars 都在“libs”文件夹中,我可以看到所有这些都自动包含在 Android 依赖项中。
  • 没有。我们不使用proguard。这个问题在没有任何 proguard 配置的情况下发生。
  • 如果我引用了库项目,并且在将 libs 目录包含在 jar 中之后,我收到 dalvik 转换错误并出现一堆“已添加”错误怎么办?
【解决方案2】:

我遇到了同样的问题,尽管我按照link lujop mentioned 中的描述做了所有事情。以下是缺少的内容:

  1. 右键单击您的项目>构建路径>配置构建路径...
  2. 点击“订购和导出”标签
  3. 勾选您所指的库(Android x.x.x、Android 依赖项)和其他项目旁边的复选框
  4. 清理您的项目
  5. 应该是这样的

希望对你有帮助!

【讨论】:

    【解决方案3】:

    我也有这个。这是我的解决方法。 按照这里: http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

    确保没有“引用的库”。如果有任何右键单击它们并从构建路径中删除。该文件夹现在应该已经消失了,您应该只剩下“Android Dependencies”

    【讨论】:

      【解决方案4】:

      这也让我发疯了一整天,才意识到愚蠢的我清单中的应用程序名称是错误的。 对于应用程序名称,我有: android:name="com.diack.locdatafeeds"

      它错过了我的主要活动 android:name="com.diack.locdatafeeds.Mainactivity"

      希望对某人有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-26
        • 2022-06-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        相关资源
        最近更新 更多