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.** { *; }