KMM项目Android端添加最新版Kodein失败及依赖冲突问题
问题成因
- 依赖命名不匹配:Kodein从7.x版本开始废弃了
kodein-di-generic-jvm的构件命名,你沿用旧名称引入7.5.1版本的依赖,对应构件不存在,导致依赖未正常下载,因此IDE无法识别Kodein相关类。 - 仓库配置失效:项目级build.gradle中配置的Bintray仓库已于2021年正式停服,且你为
org.kodein组指定了从无效的Kotlin EAP Bintray仓库拉取依赖,进一步导致7.x版本的Kodein依赖无法正常拉取。 - 版本不统一冲突:降级后你使用的
kodein-di-generic-jvm:5.0.1和kodein-di-framework-android-x:5.2.0版本号不一致,两个不同版本的构件包含大量同名类,因此触发重复类编译报错;如果shared模块也引入了Kodein依赖,跨模块版本不同也会导致同类冲突。
解决方案
- 清理无效仓库配置:删除项目级build.gradle
allprojects.repositories块中两个Bintray相关的maven配置,Kodein 7.x版本已全部发布到Maven Central,无需额外配置私有仓库。修改后的仓库配置示例:
allprojects { repositories { google() mavenCentral() maven(url = "https://jitpack.io") } }
- 替换为正确的7.x版本依赖:在Android模块的build.gradle中替换旧的Kodein依赖配置,统一使用相同版本号的正确构件名:
implementation("org.kodein.di:kodein-di:7.5.1") implementation("org.kodein.di:kodein-di-framework-android-x:7.5.1")
- 跨模块版本统一(可选,若shared模块使用Kodein):在shared模块的
commonMain依赖中添加相同版本的Kodein通用依赖,保证全项目Kodein版本一致:
commonMain { dependencies { implementation("org.kodein.di:kodein-di:7.5.1") } }
- 强制锁定版本(可选,若仍有冲突):在Android模块的build.gradle中添加版本强制配置,避免依赖传递引入不同版本的Kodein:
configurations.all { resolutionStrategy { force("org.kodein.di:kodein-di:7.5.1") force("org.kodein.di:kodein-di-framework-android-x:7.5.1") } }
- 清理缓存重构:执行Android Studio的
File → Invalidate Caches,勾选清理文件系统缓存选项后重启IDE,再执行./gradlew clean build完成构建。
内容的提问来源于stack exchange,提问作者Sergei Mikhailovskii
相关产品推荐
相关产品推荐

