Android java.lang.NoClassDefFoundError using JODA libraries

android, date, jar, jodatime

Solution

Rename the lib folder to libs. As of ADT Tools 17 externals jars get only packaged into the apk if they are inside this folder. Alternatively you could go to "configure build path.."->"Order and Export" and click the checkbox next to the jar.

Problem

I'm stuck from about 2 hours on a problem that i thought it was easy to solve. I'm building a custom date-time picker for the android platform and, because of the slowness of the standard java.util.Calendar and java.util.Date classes, i decided to use the JODA library. Unfortunately i've got no experience with 'JAR' references (forgive me...i come from COM and .NET assemblies world =)...), but i learn some tips on internet but obviously they seems to be wrong... These are the steps i took to use the library in my project: - Download the latest JODA library 2.1 - Create the 'lib' folder into my project folder - Add 'joda-time-2.1.jar' to the 'lib' folder. - Add the 'joda-time-2.1.jar' library to the build path. - Add 'joda-time-2.1-javadoc.jar' and 'joda-time-2.1-sources.jar' to the 'lib' folder - Set the above libraries as 'java source attachements' and 'javadoc location' for the joda-time-2.1 referenced library. - Use the new library into my code (the ehm ehm 'intelli-sense' and compiler don't throws any error or warning) - Start debug on real or virtual device. When it comes to the following line (the first one that uses JODA BTW), debug stops: ``` DateTime newDate = new DateTime(2012, 5, 3, 12, 0, 0); ``` And returns the following stack trace: ``` 05-03 19:09:14.349: E/AndroidRuntime(4071): java.lang.NoClassDefFoundError: org.joda.time.DateTime 05-03 19:09:14.349: E/AndroidRuntime(4071): at it.paganel.droidMessageExport.Control.TimePickerControl.SetTimePart(TimePickerControl.java:83) 05-03 19:09:14.349: E/AndroidRuntime(4071): at it.paganel.droidMessageExport.Control.TimePickerControl.onClick(TimePickerControl.java:116) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.view.View.performClick(View.java:2454) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.view.View$PerformClick.run(View.java:9030) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.os.Handler.handleCallback(Handler.java:587) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.os.Handler.dispatchMessage(Handler.java:92) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.os.Looper.loop(Looper.java:123) 05-03 19:09:14.349: E/AndroidRuntime(4071): at android.app.ActivityThread.main(ActivityThread.java:4641) 05-03 19:09:14.349: E/AndroidRuntime(4071): at java.lang.reflect.Method.invokeNative(Native Method) 05-03 19:09:14.349: E/AndroidRuntime(4071): at java.lang.reflect.Method.invoke(Method.java:521) 05-03 19:09:14.349: E/AndroidRuntime(4071): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:870) 05-03 19:09:14.349: E/AndroidRuntime(4071): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 05-03 19:09:14.349: E/AndroidRuntime(4071): at dalvik.system.NativeStart.main(Native Method) 05-03 19:09:14.349: E/AndroidRuntime(4071): Caused by: java.lang.ClassNotFoundException: org.joda.time.DateTime in loader dalvik.system.PathClassLoader[/data/app/it.paganel.droidMessageExport-2.apk] 05-03 19:09:14.349: E/AndroidRuntime(4071): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 05-03 19:09:14.349: E/AndroidRuntime(4071): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 05-03 19:09:14.349: E/AndroidRuntime(4071): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 05-03 19:09:14.349: E/AndroidRuntime(4071): ... 13 more ``` Someone can help me? Thanks in advance!

Original source

Related problems