Kotlin / kotlinx-datetime

KotlinX multiplatform date/time library
Apache License 2.0
2.39k stars 99 forks source link

NoClassDefFoundError In Android 6 NoClassDefFoundError: Failed resolution of: Ljava/time/Instant; #283

Closed crowforkotlin closed 1 year ago

crowforkotlin commented 1 year ago

Dev tools:AndroidStudio 2023.1.1 Canary 1 GradleVersion : 8.0 AndroidPluginGradleVersion : 8.0.1 Language:Kotlin1.8.21 kotlinx.datetime Version 0.4.0

Device Android 6.0 Pixel XL API 23 | x86

Happend in this code

import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTimeimport kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime

    fun getTime(): String {
        val time = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).time
        return "  ${time.hour}:${time.minute}"
    }

Also I import this Library in gradle like this image

// error at ("val time = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).time")

Strangely I executed this code successfully with a higher version of Android, Android 12,

no release, just run in debug env.

01:35:50.885 E ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 01:35:50.885 E │ Thread: main 01:35:50.885 E ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 01:35:50.885 E │ BaseAppException.uncaughtException (BaseAppException.kt:15) 01:35:50.885 E │ TipExtKt.logError (TipExt.kt:25) 01:35:50.885 E ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 01:35:50.885 E │ java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/Instant; 01:35:50.885 E │ at kotlinx.datetime.Instant.(Instant.kt:96) 01:35:50.885 E │ at kotlinx.datetime.Clock$System.now(Clock.kt:25) 01:35:50.885 E │ at com.crow.module_book.ui.view.PageBadgeView.getTime(PageBadgeView.kt:30) 01:35:50.886 E │ at com.crow.module_book.ui.view.PageBadgeView.(PageBadgeView.kt:26) 01:35:50.886 E │ at com.crow.module_book.ui.activity.ComicActivity.initView(ComicActivity.kt:78) 01:35:50.886 E │ at com.crow.base.ui.activity.BaseActivityImpl.onCreate(BaseActivityImpl.kt:59) 01:35:50.886 E │ at com.crow.base.ui.activity.BaseMviActivity.onCreate(BaseMviActivity.kt:40) 01:35:50.886 E │ at android.app.Activity.performCreate(Activity.java:6237) 01:35:50.886 E │ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 01:35:50.886 E │ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 01:35:50.886 E │ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 01:35:50.886 E │ at android.app.ActivityThread.-wrap11(ActivityThread.java) 01:35:50.886 E │ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 01:35:50.886 E │ at android.os.Handler.dispatchMessage(Handler.java:102) 01:35:50.886 E │ at android.os.Looper.loop(Looper.java:148) 01:35:50.886 E │ at android.app.ActivityThread.main(ActivityThread.java:5417) 01:35:50.886 E │ at java.lang.reflect.Method.invoke(Native Method) 01:35:50.886 E │ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 01:35:50.886 E │ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 01:35:50.886 E │ Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.Instant" on path: DexPathList[[zip file "/data/app/com.crow.copymanga.dev-2/base.apk"],nativeLibraryDirectories=[/data/app/com.crow.copymanga.dev-2/lib/x86, /vendor/lib, /system/lib]] 01:35:50.886 E │ at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 01:35:50.886 E │ at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 01:35:50.886 E │ at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 01:35:50.886 E │ ... 19 more 01:35:50.887 E │ Suppressed: java.lang.ClassNotFoundException: java.time.Instant 01:35:50.887 E │ at java.lang.Class.classForName(Native Method) 01:35:50.887 E │ at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 01:35:50.887 E │ at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 01:35:50.887 E │ at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 01:35:50.887 E │ ... 20 more 01:35:50.887 E │ Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 01:35:50.887 E └────────────────────────────────────────────────────────────────────────────────────────────────────────────────

dkhalanskyjb commented 1 year ago

https://github.com/Kotlin/kotlinx-datetime#using-in-your-projects

If you target Android devices running below API 26, you need to use Android Gradle plugin 4.0 or newer and enable core library desugaring.

Please use Stack Overflow for usage questions, the issue tracker is for discussing the issues in the library.