0

我正在开发一个 github android 项目:ebookdroid。我在eclipse中导入代码,我选择NDK路径来编译c和cpp文件。完成后没有错误。我在我的设备上运行项目,日志中有 java.lang.NoClassDefFoundError。

06-14 11:25:57.806: E/AndroidRuntime(16523): FATAL EXCEPTION: main
06-14 11:25:57.806: E/AndroidRuntime(16523): java.lang.NoClassDefFoundError: org.ebookdroid.ui.library.adapters.BooksAdapter
06-14 11:25:57.806: E/AndroidRuntime(16523):    at org.ebookdroid.ui.library.RecentActivityController.beforeCreate(RecentActivityController.java:104)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at org.ebookdroid.ui.library.RecentActivityController.beforeCreate(RecentActivityController.java:1)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at org.emdev.ui.AbstractActionActivity.onCreate(AbstractActionActivity.java:93)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.Activity.performCreate(Activity.java:4469)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.os.Looper.loop(Looper.java:137)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at android.app.ActivityThread.main(ActivityThread.java:4507)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at java.lang.reflect.Method.invokeNative(Native Method)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at java.lang.reflect.Method.invoke(Method.java:511)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
06-14 11:25:57.806: E/AndroidRuntime(16523):    at dalvik.system.NativeStart.main(Native Method)
06-14 11:32:40.056: I/Process(16613): Sending signal. PID: 16613 SIG: 9

为什么会出现这个错误?在课堂上我导入了 BooksAdapter 的正确包......有人可以告诉我我可以尝试什么吗?对不起我的英语不好,提前谢谢你!

4

2 回答 2

4

由于您使用的是库,这是运行时异常。所以只要去

Project Properties>Java Build Path>Order and Import tab并检查您正在使用的库。

似乎 ADT 更新 22,您必须手动执行此操作:Libraries do not get added to APK after upgrade to ADT 22

于 2013-06-14T10:25:38.333 回答
1

NoClassDefFoundError 的原因是特定类在 Classpath 中不可用,因此我们需要将其添加到 Classpath 中,或者如果我们期望它在 Classpath 中不可用,我们需要检查它为什么不可用。可能有多种原因,例如:

1) 类在 Java 类路径中不可用。

2)您可能正在使用 jar 命令运行程序,并且清单文件的 ClassPath 属性中未定义类。

3) 任何启动脚本都覆盖了 Classpath 环境变量。

4)因为 NoClassDefFoundError 是 java.lang.LinkageError 的一个子类,所以如果它的一个依赖项(如本机库)可能不可用,它也会出现。

5) 检查日志文件中的 java.lang.ExceptionInInitializerError。由于静态初始化失败导致的 NoClassDefFoundError 很常见。

6) 如果您在 Java EE 环境中工作,那么多个 Classloader 之间的 Class 可见性也会导致 java.lang.NoClassDefFoundError,请参阅示例和场景部分进行详细讨论。

我们现在将看到几个例子和场景,当 java.lang.NoClassDefFoundError 出现时以及它是如何解决的。这可以帮助您解决 Java 应用程序中 NoClassDefFoundError 的根本原因。

于 2013-06-14T10:16:41.243 回答