首页 > 解决方案 > 无法将序列化库依赖项编译到我的 AAR 中

问题描述

我正在导入一个我在 iOS 上工作的 kotlin mpp 项目,但在 android 上我得到一个类未找到异常

2020-03-19 17:08:59.905 25271-25387/com.test.testE/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-2
    Process: com.test.test, PID: 25271
    java.lang.NoClassDefFoundError: Failed resolution of: Lkotlinx/serialization/internal/GeneratedSerializer;

我的依赖是

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.61")
    implementation("io.ktor:ktor-client-android:$ktorVersion")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")
    implementation("io.ktor:ktor-client-json-jvm:$ktorVersion")
    implementation("io.ktor:ktor-client-serialization-jvm:$ktorVersion")
    implementation("io.ktor:ktor-client-android:$ktorVersion")
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serializationVersion")
}

它也适用于我在库项目中对 android 的单元测试。但是当我作为 aar 导入时,它找不到类。我没有使用 proguard 任何想法有什么问题?

debugCompileClasspath - Dependencies for compilation
+--- io.ktor:ktor-client-core:1.2.6@jar
+--- io.ktor:ktor-client-serialization-jvm:1.2.6@jar
+--- io.ktor:ktor-client-json-jvm:1.2.6@jar
+--- io.ktor:ktor-http-cio:1.2.6@jar
+--- io.ktor:ktor-http:1.2.6@jar
+--- io.ktor:ktor-client-android:1.2.6@jar
+--- io.ktor:ktor-client-core-jvm:1.2.6@jar
+--- io.ktor:ktor-http-cio-jvm:1.2.6@jar
+--- io.ktor:ktor-network:1.2.6@jar
+--- io.ktor:ktor-http-jvm:1.2.6@jar
+--- io.ktor:ktor-utils-jvm:1.2.6@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-io-jvm:0.1.16@jar
+--- io.ktor:ktor-utils:1.2.6@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-io:0.1.16@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.3@jar
+--- org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3@jar
+--- org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.3.2-1.3.60@jar
+--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3@jar
+--- org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16@jar
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60@jar
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.60@jar
+--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61@jar
+--- org.jetbrains.kotlinx:kotlinx-io:0.1.16@jar
+--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61@jar
+--- org.jetbrains.kotlinx:atomicfu-common:0.14.1@jar
+--- org.jetbrains.kotlinx:atomicfu:0.14.1@jar
+--- org.jetbrains:annotations:13.0@jar
+--- org.slf4j:slf4j-api:1.7.26@jar
\--- com.typesafe:config:1.3.1@jar

环境

Kotlin version: 1.3.61
Library version: 0.14.0
Kotlin platforms: android,ios
Gradle version: 3.6.0

标签: androidkotlinkotlin-multiplatform

解决方案


编辑:问题是 AAR 文件从 pom 文件中获取它们的依赖项。导入 AAR 文件时,它没有对正确库的引用。使用 maven-publish 解决了我的问题,而无需复制使用的存储库。

我遇到了同样的问题,我在我的应用程序的 build.gradle 中导入了缺少的依赖项。它解决了这个问题。我的猜测是依赖项没有完全包含在 aar 文件中。所以让我们说这更像是一个黑客而不是一个实际的解决方案。对于其他依赖项,我不得不这样做,我现在正在寻找它的原因。

dependencies {
//other dependencies for build.gradle (app)
implementation "io.ktor:ktor-client-android:$ktor_version"
implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"
}

更多信息: https ://github.com/ktorio/ktor/issues/1039#issuecomment-517660157


推荐阅读