
当 android 项目中同时引入多个 kotlin 标准库变体(如 kotlin-stdlib 和 kotlin-stdlib-jdk8)且版本不一致时,会因类重复导致构建失败;通过统一关键依赖(如 androidx.fragment)的版本可有效规避该冲突。
当 android 项目中同时引入多个 kotlin 标准库变体(如 kotlin-stdlib 和 kotlin-stdlib-jdk8)且版本不一致时,会因类重复导致构建失败;通过统一关键依赖(如 androidx.fragment)的版本可有效规避该冲突。
在使用 Gradle 构建 Android 应用时,出现 Duplicate classes 错误(例如 org.jetbrains.kotlin:kotlin-stdlib:1.8.20 与 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21 中同名类重复)是一个典型的依赖传递冲突问题。虽然你的项目代码为 Java 编写,但所依赖的 AndroidX 库(如 androidx.fragment:fragment)内部可能间接拉入了不同版本的 Kotlin 标准库——尤其当不同库声明了不同版本的 kotlin-stdlib-jdk8 时,Gradle 无法自动对齐,最终触发编译期类重复校验失败。
根本原因在于:
- androidx.fragment:fragment:1.6.0 依赖较新版本的 Kotlin 工具链(如 1.8+),而 androidx.documentfile:documentfile:1.0.1 或其他旧版依赖可能仍绑定 kotlin-stdlib-jdk8:1.6.21;
- Gradle 默认采用“最近优先”(nearest definition)策略解析依赖,若未显式约束,不同路径引入的 kotlin-stdlib 与 kotlin-stdlib-jdk8 可能被同时保留,造成 java.lang.ClassFormatError 或 Duplicate class 报错。
✅ 推荐解决方案(已验证有效):
将 androidx.fragment:fragment 降级至 1.5.7(该版本与 kotlin-stdlib-jdk8:1.6.21 兼容性更稳定):
// app/build.gradle
dependencies {
implementation 'androidx.fragment:fragment:1.5.7' // ✅ 替换为 1.5.7
implementation 'androidx.documentfile:documentfile:1.0.1'
}⚠️ 注意事项:
- 不建议直接 exclude Kotlin 相关模块(如 exclude group: 'org.jetbrains.kotlin'),这可能导致运行时 NoClassDefFoundError;
- 升级 Kotlin 版本(如统一设为 1.8.20)也是一种方案,但需同步检查所有 AndroidX 组件是否兼容——可参考 AndroidX Release Notes;
- 使用 ./gradlew app:dependencies --configuration releaseRuntimeClasspath 可可视化依赖树,定位具体冲突来源;
- 若后续需升级 Fragment,请同步升级 Kotlin 插件及标准库,并确保 kotlin-stdlib-jdk8 被 kotlin-stdlib 1.8+ 的 JDK 增强功能替代(Kotlin 1.8+ 已将 jdk8 功能合并进主标准库)。
总结:依赖冲突本质是版本碎片化问题。优先选择经验证的稳定组合(如 Fragment 1.5.7 + Kotlin 1.6.x),比盲目升级更可靠;长期建议启用 Gradle 的依赖约束(constraints)或 platform BOM 管理,从源头统一版本语义。


















