我正在使用两个库,它们依赖于两个不同版本的Koin。
其中一个库具有org.koin:koin-android:2.0.1,另一个库具有io.insert-koin:koin-core-jvm:3.0.1依赖项。
在编译时,我得到了大量的重复类错误,如下所示,
Duplicate class org.koin.android.BuildConfig found in modules jetified-koin-android-2.0.1-runtime (org.koin:koin-android:2.0.1) and jetified-koin-android-3.0.1-runtime (io.insert-koin:koin-android:3.0.1)
Duplicate class org.koin.android.ext.koin.KoinExtKt$androidContext$1 found in modules jetified-koin-android-2.0.1-runtime (org.koin:koin-android:2.0.1) and jetified-koin-android-3.0.1-runtime (io.insert-koin:koin-android:3.0.1)
Duplicate class org.koin.core.scope.Scope$injectOrNull$1 found in modules jetified-koin-core-2.0.1 (org.koin:koin-core:2.0.1) and jetified-koin-core-jvm-3.0.1 (io.insert-koin:koin-core-jvm:3.0.1)
Duplicate class org.koin.java.KoinJavaComponent$inject$1 found in modules jetified-koin-core-jvm-3.0.1 (io.insert-koin:koin-core-jvm:3.0.1) and jetified-koin-java-2.0.1 (org.koin:koin-java:2.0.1)
...当我试图把其中一个排除在下面,
configurations {
all {
exclude group: "io.insert-koin", module: "koin-android"
exclude group: "io.insert-koin", module: "koin-core-jvm"
}
}我在运行时获得了相关的NoClassDefFoundError。
排除org.koin:koin-android:2.0.1时
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.koin.core.KoinComponent" on path: DexPathList[[zip file "/data/app/...排除io.insert-koin:koin-core-jvm:3.0.1时
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.koin.core.component.KoinComponent" on path: DexPathList[[zip file "/data/app/...如何使用这两个库?
发布于 2021-06-27 17:42:22
Koin 3.x.x没有向后兼容性。如果在使用Koin 2.x.x版本的sdk上没有更新,也许您最好为相反的库找到一个旧版本,后者使用Koin 2.x.x。但是请注意,Koin版本2.2.3也有与其他版本不同的路径(由于jcenter的限制)
发布于 2022-07-14 09:22:34
如何使用这两个库?
您不能同时使用两个版本的Koin,但可以告诉Gradle在编译时将一个版本替换为另一个版本。请注意,这与完全排除其中一个版本不一样,但实际上是由另一个版本代替的。
下面是一个例子:
eachDependency { details ->
// change org.koin:koin-androidx-viewmodel into io.insert-koin:koin-android
if (details.requested.group == 'org.koin' && details.requested.name == 'koin-androidx-viewmodel') {
details.useTarget group: 'io.insert-koin', name: 'koin-android', version: details.requested.version
}
}您可以在Gradle的doc https://docs.gradle.org/current/userguide/resolution_rules.html中阅读更多内容
不过,它只是一个部分解决方案(也是一个黑客解决方案),因为我们仍然受到KOIN2.x和3.x之间API不兼容的限制。但是,如果你从Koin 2.x中使用的东西还在Koin 3.x中,那应该是可行的。
https://stackoverflow.com/questions/68105926
复制相似问题