我想将 Firebase 中的 VertexAI 添加到我的 Android 项目中。我有一个现有的 Firebase 项目,我已在其中遵循并完成了启用 vertexAi 的所有步骤。
我已经导入了 firebase 依赖项:
implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
implementation("com.google.firebase:firebase-vertexai")
当我打电话时
val gemini = Firebase.vertexAI.generativeModel("gemini-1.5-flash")
我在运行时遇到错误 java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/plugins/HttpTimeout;
是的,这是真的,我有另一个库,它正在使用
io.ktor:ktor-client-android:3.0.2
,所以我也将其包含在我的依赖项中。我尝试添加其他 ktor,例如插件、核心 ec...但总是遇到相同的错误。
我尝试删除 orher 库并仅使用 firebase 和 vertex 进行清理/构建,但仍然遇到相同的错误。
当我运行顶点示例应用程序时,它工作正常,没有任何问题。我尝试与最后一个符号进行比较示例应用程序和我的应用程序之间的差异,发现与 ktor 无关。
无论我在哪里看,每个人都提到 Firebase 上的 Vertex ai 正在使用 ktor。但是当我登录 app:dependencies
时,我在 firebase 下的树中看不到它。我发现一个 github 问题提到将 ktor 降级到 2.x.x,我这样做了并且结果相同。
我必须在我的项目中包含一些有趣的小东西,这可以帮助我解决这个问题?是否有一些完全脱离上下文的插件/库,我需要包含它们?
使用 ktor 3.0.2 时出现异常:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/plugins/HttpTimeout;
at com.google.firebase.vertexai.common.APIController$client$1.invoke(APIController.kt:101)
使用 ktor 2.3.2 时出现异常:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/plugins/HttpTimeout;
at io.ktor.client.engine.okhttp.OkHttpEngine.<init>(OkHttpEngine.kt:40)
at io.ktor.client.engine.okhttp.OkHttp.create(OkHttp.kt:31)
...正在调用 HttpTimeout,我在应用程序代码中使用它没有问题。异常总是在 vertexai 内部抛出。
就我而言,解决方案是将以下代码添加到 build.gradle.kts:
configurations.all {
resolutionStrategy.force(libs.ktor.client.core)
}
在 libs.versions.toml 中:
ktor = "3.0.3"
...
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }