3

I am facing with a ClassNotFoundException when I deploy my android application on my android phone.

I tried on android phone which has Android 6.0.1 and Android 7.1.1

Whereas when I deploy the same application on an emulator which is (Nexus 5X API 26) and runs Android 8.0 I don't face any problem. The app loads smoothly.

Build.gradle (app) file has

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "de.pfiva.mobile.voiceassistant"
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

I have included a dependency from local maven. This dependency basically have plain java classes (POJO). In some of the classes there are fields of type java.time.LocalDateTime

How can I solve this issue. Looking for suggestions.

Thanks.

Exception :

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: de.pfiva.mobile.voiceassistant, PID: 25245
                  java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/LocalDateTime;
                      at java.lang.Class.getDeclaredFields(Native Method)
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:150)
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                      at com.google.gson.Gson.getAdapter(Gson.java:423)
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
                      at com.google.gson.Gson.getAdapter(Gson.java:423)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
                      at com.google.gson.Gson.getAdapter(Gson.java:423)
                      at retrofit2.converter.gson.GsonConverterFactory.responseBodyConverter(GsonConverterFactory.java:64)
                      at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
                      at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
                      at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:739)
                      at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:172)
                      at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
                      at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
                      at java.lang.reflect.Proxy.invoke(Proxy.java:813)
                      at $Proxy0.getNLUData(Unknown Source)
                      at de.pfiva.mobile.voiceassistant.activities.MainActivity.onCreate(MainActivity.java:41)
                      at android.app.Activity.performCreate(Activity.java:6826)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1121)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2656)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2764)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6173)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
                   Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.LocalDateTime" on path: DexPathList[[zip file "/data/app/de.pfiva.mobile.voiceassistant-1/base.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_dependencies_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_0_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_1_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_2_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_3_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_4_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_5_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_6_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_7_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_8_apk.apk", zip file "/data/app/de.pfiva.mobile.voiceassistant-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/de.pfiva.mobile.voiceassistant-1/lib/arm64, /system/lib64, /vendor/lib64]]
                      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                      at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                      at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                      at java.lang.Class.getDeclaredFields(Native Method) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:150) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) 
                      at com.google.gson.Gson.getAdapter(Gson.java:423) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164) 
                      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100) 
                      at com.google.gson.Gson.getAdapter(Gson.java:423) 
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53) 
                      at com.google.gson.Gson.getAdapter(Gson.java:423) 
                      at retrofit2.converter.gson.GsonConverterFactory.responseBodyConverter(GsonConverterFactory.java:64) 
                      at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330) 
                      at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313) 
                      at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:739) 
                      at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:172) 
                      at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) 
                      at retrofit2.Retrofit$1.invoke(Retrofit.java:147) 
                      at java.lang.reflect.Proxy.invoke(Proxy.java:813) 
                      at $Proxy0.getNLUData(Unknown Source) 
                      at de.pfiva.mobile.voiceassistant.activities.MainActivity.onCreate(MainActivity.java:41) 
                      at android.app.Activity.performCreate(Activity.java:6826) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1121) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2656) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2764) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6173) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
Loui
  • 533
  • 17
  • 33
  • 2
    Unfortunately older Android versions don't have `LocalDateTime`. You'll need a workaround [as described here](https://stackoverflow.com/questions/38922754/how-to-use-threetenabp-in-android-project). – Markus Kauppinen Aug 17 '18 at 14:20

1 Answers1

8

As stated here java.time package is available in API 26 (Android O) and on.

Marco Pierucci
  • 1,125
  • 8
  • 23
  • As Markus Kauppinen already said in a comment, java.time is available for older Android versions through [the ThreeTenABP library](https://github.com/JakeWharton/ThreeTenABP). – Ole V.V. Aug 20 '18 at 12:34
  • 1
    Yea so? He is asking about the crash he is having, which occurs do to the fact that he is using an API not available in that version. Im well aware of your statement but I don't see the reason of commenting on my answer. (More over if a solution is already suggested in a comment as you are clearing stating) – Marco Pierucci Aug 20 '18 at 12:43