首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制类Koin org.koin和io.in-KOIN

复制类Koin org.koin和io.in-KOIN
EN

Stack Overflow用户
提问于 2021-06-23 19:16:01
回答 2查看 2.2K关注 0票数 4

我正在使用两个库,它们依赖于两个不同版本的Koin。

其中一个库具有org.koin:koin-android:2.0.1,另一个库具有io.insert-koin:koin-core-jvm:3.0.1依赖项。

在编译时,我得到了大量的重复类错误,如下所示,

代码语言:javascript
复制
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)
...

当我试图把其中一个排除在下面,

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.koin.core.component.KoinComponent" on path: DexPathList[[zip file "/data/app/...

如何使用这两个库?

EN

回答 2

Stack Overflow用户

发布于 2021-06-27 17:42:22

Koin 3.x.x没有向后兼容性。如果在使用Koin 2.x.x版本的sdk上没有更新,也许您最好为相反的库找到一个旧版本,后者使用Koin 2.x.x。但是请注意,Koin版本2.2.3也有与其他版本不同的路径(由于jcenter的限制)

票数 3
EN

Stack Overflow用户

发布于 2022-07-14 09:22:34

如何使用这两个库?

您不能同时使用两个版本的Koin,但可以告诉Gradle在编译时将一个版本替换为另一个版本。请注意,这与完全排除其中一个版本不一样,但实际上是由另一个版本代替的。

下面是一个例子:

代码语言:javascript
复制
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中,那应该是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68105926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档