我正在开发一个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的正确包... 有人可以告诉我我该怎么办? 抱歉我的英语不好&提前谢谢!
答案 0 :(得分:3)
由于您使用的是库,因此这是运行时异常。所以只需转到
Project Properties>Java Build Path>Order and Import tab
并检查您正在使用的库。
似乎ADT更新22,您必须手动执行此操作:Libraries do not get added to APK anymore after upgrade to ADT 22
答案 1 :(得分:1)
NoClassDefFoundError的原因是Classpath中没有特定的类,所以我们需要将它添加到Classpath中,或者我们需要检查它为什么在Classpath中不可用,如果我们期望它的话。可能有多种原因,如:
1)Java Classpath中没有类。
2)您可能正在使用jar命令运行程序,并且未在清单文件的ClassPath属性中定义类。
3)任何启动脚本都会覆盖Classpath环境变量。
4)因为NoClassDefFoundError是java.lang.LinkageError的子类,所以如果其中一个依赖项(如本机库)可能不可用,它也会出现。
5)检查日志文件中的java.lang.ExceptionInInitializerError。由于静态初始化失败而导致的NoClassDefFoundError非常常见。
6)如果您在Java EE环境中工作,而多个类加载器中的Class的可见性也会导致java.lang.NoClassDefFoundError,请参阅示例和场景部分以进行详细讨论。
我们现在将看到java.lang.NoClassDefFoundError之前的几个示例和场景以及它是如何解决的。这可以帮助您解决Java应用程序中NoClassDefFoundError的根本原因。