Skip to content

Class from Ktor not found exception when add firebase-ai to android module in KMP project, when use library with Ktor 3.3.1 in shared module #7061

Closed as duplicate of#6737
@hieuwu

Description

@hieuwu

[READ] Step 1: Are you in the right place?

Issues filed here should be about bugs in the code in this repository.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

  • For general technical questions, post a question on StackOverflow
    with the firebase tag.
  • For general Firebase discussion, use the firebase-talk
    google group.
  • For help troubleshooting your application that does not fall under one
    of the above categories, reach out to the personalized
    Firebase support channel.

[REQUIRED] Step 2: Describe your environment

  • Android Studio version: Android Studio Meerkat | 2024.3.1 Patch 1
  • Firebase Component: firebase-ai
  • Component version: Uses from com.google.firebase:firebase-bom:33.15.0

[REQUIRED] Step 3: Describe the problem

Steps to reproduce:

  1. In project that uses ktor
    In shared/build.gradle.ktx
implementation(project.dependencies.platform("io.github.jan-tennert.supabase:bom:3.1.3"))
implementation(libs.auth)
implementation(libs.postgrest)
implementation(libs.storage)
// Added to simulate the issue
implementation("io.ktor:ktor-client-plugins:3.1.1")
implementation("io.ktor:ktor-client-core:3.1.3")
implementation("io.ktor:ktor-client-okhttp:3.1.3")
implementation("io.ktor:ktor-client-content-negotiation:3.1.3")
implementation("io.ktor:ktor-serialization-kotlinx-json:3.1.3")
  1. Add firebase-ai as
    In android/build.gradle.ktx
implementation(platform("com.google.firebase:firebase-bom:33.15.0"))
implementation("com.google.firebase:firebase-ai") 
  1. Create a method that run through the code below:
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
  .generativeModel("gemini-2.5-flash")
  1. It throws this exception as below
 Caused by: java.lang.ClassNotFoundException: Didn't find class "io.ktor.client.plugins.HttpTimeout" on path: DexPathList[[dex file "/data/data/com.crafted.kudossnap.android/code_cache/.overlay/base.apk/classes18.dex", zip file "/data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/base.apk"],nativeLibraryDirectories=[/data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/lib/arm64, /data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
 	... 74 more

What happened? How can we make the problem occur?
This could be a description, log/console output, etc.

Relevant Code:

Below is full of log

23:32:01.660  E  FATAL EXCEPTION: main (Ask Gemini)
 Process: com.crafted.kudossnap.android, PID: 22877
 java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/plugins/HttpTimeout;
 	at com.google.firebase.ai.common.APIController$client$1.invoke(APIController.kt:127)
 	at com.google.firebase.ai.common.APIController$client$1.invoke(APIController.kt:126)
 	at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:972)
 	at com.google.firebase.ai.common.APIController.<init>(APIController.kt:126)
 	at com.google.firebase.ai.common.APIController.<init>(APIController.kt:111)
 	at com.google.firebase.ai.GenerativeModel.<init>(GenerativeModel.kt:85)
 	at com.google.firebase.ai.FirebaseAI.generativeModel(FirebaseAI.kt:91)
 	at com.google.firebase.ai.FirebaseAI.generativeModel$default(FirebaseAI.kt:66)
 	at com.crafted.kudossnap.ui.feature.createkudos.CreateKudosViewModel.onSendKudos(CreateKudosViewModel.kt:75)
 	at com.crafted.kudossnap.ui.feature.createkudos.CreateKudosScreenKt.CreateKudosScreen$lambda$16$lambda$9$lambda$8(CreateKudosScreen.kt:123)
 	at com.crafted.kudossnap.ui.feature.createkudos.CreateKudosScreenKt.$r8$lambda$NRZqB2ACvu793NpuReLkZpu4oAo(Unknown Source:0)
 	at com.crafted.kudossnap.ui.feature.createkudos.CreateKudosScreenKt$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
 	at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke-k-4lQ0M(Clickable.kt:639)
 	at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke(Clickable.kt:633)
 	at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
 	at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:163)
 	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:152)
 	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:470)
 	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core(CancellableContinuationImpl.kt:504)
 	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core$default(CancellableContinuationImpl.kt:493)
 	at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:359)
 	at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:719)
 	at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:598)
 	at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:620)
 	at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:1044)
 	at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:387)
 	at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373)
 	at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373)
 	at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:229)
 	at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:144)
 	at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:120)
 	at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1999)
 	at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1950)
 	at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1834)
 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
23:32:01.664  E  	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122) (Ask Gemini)
 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
 	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
 	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
 	at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:458)
 	at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1980)
 	at android.app.Dialog.dispatchTouchEvent(Dialog.java:935)
 	at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:416)
 	at android.view.View.dispatchPointerEvent(View.java:16729)
 	at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7947)
 	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7710)
 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7106)
 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
 	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7295)
 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
 	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7352)
 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
 	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
 	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
 	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
 	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
 	at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10214)
 	at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10165)
 	at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10134)
 	at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10356)
 	at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:295)
 	at android.os.MessageQueue.nativePollOnce(Native Method)
 	at android.os.MessageQueue.next(MessageQueue.java:346)
 	at android.os.Looper.loopOnce(Looper.java:189)
 	at android.os.Looper.loop(Looper.java:317)
 	at android.app.ActivityThread.main(ActivityThread.java:8705)
 	at java.lang.reflect.Method.invoke(Native Method)
 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
 	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@67b2340, androidx.compose.runtime.BroadcastFrameClock@aabb279, StandaloneCoroutine{Cancelling}@e120bbe, AndroidUiDispatcher@37141f]
 Caused by: java.lang.ClassNotFoundException: Didn't find class "io.ktor.client.plugins.HttpTimeout" on path: DexPathList[[dex file "/data/data/com.crafted.kudossnap.android/code_cache/.overlay/base.apk/classes18.dex", zip file "/data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/base.apk"],nativeLibraryDirectories=[/data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/lib/arm64, /data/app/~~BvP7CvDXbLXuQRD-J_BTAQ==/com.crafted.kudossnap.android-rmxprQRWauSMBmDF_djPyA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
 	at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
 	... 74 more

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions