在我的android项目中,我将一个库jar添加到libs
文件夹中
这个jar包含三个不同的包:
使用ant编译/存档jar。
eclipse中没有错误,但是当我尝试在设备上运行我的Android应用程序时,我得到了这个:
E/AndroidRuntime(23807): FATAL EXCEPTION: main
E/AndroidRuntime(23807): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.project/com.example.project.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
E/AndroidRuntime(23807): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(23807): at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(23807): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(23807): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(23807): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(23807): at android.app.ActivityThread.main(ActivityThread.java:5039)
E/AndroidRuntime(23807): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(23807): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(23807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(23807): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(23807): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.project.MainActivity" on path: /data/app/com.example.project-1.apk
E/AndroidRuntime(23807): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(23807): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(23807): at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
E/AndroidRuntime(23807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
E/AndroidRuntime(23807): ... 11 more
这肯定是我的jar造成这种情况,因为如果我从MainActivity中删除对它的类的引用,那么问题就解决了,应用程序在设备上运行。
使用apktool我检查了apk中的内容,我发现所有内容都被添加到smali
目录中,除了我的包(com.example.core)之外的所有内容。
所以我的jar中的所有Android应用程序类(com.example.project),gson(com.google.gson)和netty(org.jboss.netty)都在那里,但不是com.example.core。
我的环境:
Eclipse 4.2.1
ADT 21.0.1
Java 7(oracle)
我测试过的设备:
三星Galaxy S2
LG nexus 4
有什么想法吗? 感谢。
答案 0 :(得分:10)
您获得NoClassDefFoundError
,因为您的jar文件在运行时不可用。
为了使它在运行时可用,您必须在java构建路径中检查jar文件的复选框,如下所示:
答案 1 :(得分:7)
好的,我终于找到了问题,花了我一段时间。
我在我的机器上使用java 7,而ant构建器也使用这个默认版本,不幸的是,android不喜欢java 7,所以这解决了我的问题:
<javac srcdir="." destdir="bin/classes" source="1.6" target="1.6">
...
</java>
或者您可以在Eclipse中使用这些步骤:
Eclipse menu: Window/Preferences/Java/Compiler
Compiler Compliance level: 1.6
tick "use default"
希望这会为面临此问题的其他人节省一些时间。
答案 2 :(得分:3)
(java构建路径/顺序和导出)将您的lib移到顶部并签入
答案 3 :(得分:1)
对于IntelliJ,这个设置终于让错误消失了: