Android 项目编译报错 kotlin-stdio库版本冲突

Duplicate class [kotlin.collections.jdk8.Co](https://kotlin.collections.jdk8.co/)llectionsJDK8Kt found in modules kotlin-stdlib-1.8.22.jar -> kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and kotlin-stdlib-jdk8-1.6.21.jar -> kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) 
Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations found in modules kotlin-stdlib-1.8.22.jar -> kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and kotlin-stdlib-jdk7-1.6.21.jar -> kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21)
 Duplicate class kotlin.internal.jdk7.JDK7PlatformImplementations$ReflectSdkVersion found in modules kotlin-stdlib-1.8.22.jar -> kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and kotlin-stdlib-jdk7-1.6.21.jar -> kotlin-stdlib-jdk7-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21) 
Duplicate class kotlin.internal.jdk8.JDK8PlatformImplementations found in modules kotlin-stdlib-1.8.22.jar -> kotlin-stdlib-1.8.22 (org.jetbrains.kotlin:kotlin-stdlib:1.8.22) and kotlin-stdlib-jdk8-1.6.21.jar -> kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21)

版本目录几乎一样,看看它主模块实际引了哪些依赖:

Thought for 57s, searched for 2 patterns, read 6 files (ctrl+o to expand)

● 对比两个项目后,结论很清晰:


唯一的实质差异:minifyEnabled

┌───────────────────────┬───────────────────────────────┬──────────────────┐
│ 配置项 │ Moonlight │ NetStreamProject │
├───────────────────────┼───────────────────────────────┼──────────────────┤
│ debug minifyEnabled │ true ✅ (R8) │ false ❌ (D8) │
├───────────────────────┼───────────────────────────────┼──────────────────┤
│ release minifyEnabled │ true ✅ (R8) │ false ❌ (D8) │
├───────────────────────┼───────────────────────────────┼──────────────────┤
│ ProGuard 优化文件 │ proguard-android-optimize.txt │ 无 │
├───────────────────────┼───────────────────────────────┼──────────────────┤
│ 自定义 proguard-rules │ proguard-rules.pro │ 无 │
└───────────────────────┴───────────────────────────────┴──────────────────┘

其他的都一样 — appcompat 1.7.0、AGP 8.5.1、Java 1.8、gradle.properties。


为什么会这样?

kotlin-stdlib 被 androidx.appcompat:1.7.0 传递依赖进来(不关 Kotlin 插件的事,appcompat 本身是用 Kotlin 编译的,运行时需要 kotlin-stdlib)。

关键在 DEX 转换阶段:

NetStreamProject (minifyEnabled false):
依赖解析 → kotlin-stdlib x 多个版本
→ D8 处理 → 遇到重复类 → 保留第一个 → 静默通过 ✅

Moonlight (minifyEnabled true):
依赖解析 → kotlin-stdlib x 多个版本
→ R8 处理 → 开启优化 (proguard-android-optimize.txt)
→ 遇到重复类 → 报错 💥

D8 宽松,R8 严格。proguard-android-optimize.txt 开启了字节码优化和内联,kotlin-stdlib 的不同模块之间如果有类重叠(如 kotlin-stdlib-common 被两个不同版本同时拉入),R8 直接报冲突。


三种修复方式(选其一)

① 最简单 — debug 关掉 minify(和 NetStreamProject 一致)

// app/build.gradle — debug buildTypes 块
debug {
minifyEnabled false // D8 不报 Kotlin 冲突
}

② 强制统一 Kotlin 版本

// app/build.gradle — dependencies 块
configurations.all {
resolutionStrategy {
force 'org.jetbrains.kotlin:kotlin-stdlib:1.9.24'
force 'org.jetbrains.kotlin:kotlin-stdlib-common:1.9.24'
}
}

③ ProGuard 规则忽略冲突

proguard

proguard-rules.pro 中加:

-dontwarn kotlin.**
-keep class kotlin.** { *; }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容