这个错误:
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
不是 multidex 问题,而是 AGP 8.x 默认开启了“检查重复类”,你的 APK 里出现了 完全相同的类(全限定名一致)来自不同 JAR/AAR,导致构建失败。
./gradlew app:assembleDebug --info \ | grep -i "duplicate"
或
./gradlew app:assembleDebug --stacktrace
在 Build Output 面板里会打印出类似:
Duplicate class kotlin.collections.ArraysKt found in modules kotlin-stdlib-1.9.10 (org.jetbrains.kotlin:kotlin-stdlib:1.9.10) kotlin-stdlib-jdk8-1.9.10 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10)
./gradlew app:checkDebugDuplicateClasses
失败时会列出所有冲突坐标。
| 场景 | 解决方式 |
|---|---|
| Kotlin 重复 | 只保留
kotlin-stdlib-jdk8,把老的
kotlin-stdlib 排除掉:
implementation('xxx') { exclude group:'org.jetbrains.kotlin', module:'kotlin-stdlib' } |
| AndroidX / Support 混用 | 全部迁移到 AndroidX,禁止再依赖任何
com.android.support:* 库。 |
| 三方 SDK 内部打包了 support | 用
exclude 或
pickFirsts 见下方代码。 |
自己
implementation project(':libA') 和
libB 都含
com.foo.Bean |
把公共部分抽成独立模块,或重命名包(jarjar / relocate)。 |
在
app/build.gradle 里
忽略重复类(仅本地调试,上架前必须根治):
android {
packagingOptions {
pickFirsts += [
'META-INF/DEPENDENCIES',
'META-INF/LICENSE',
'META-INF/LICENSE.txt',
'META-INF/NOTICE',
'META-INF/NOTICE.txt'
]
// 把具体重复类也 pickFirst(按日志里名字写)
pickFirsts += 'kotlin/annotations/JvmPlatformAnnotationsKt.class'
}
}
⚠️ 这只能让构建通过,运行时仍可能
NoSuchMethodError或ClassCastException, 务必后续排除真正的重复依赖。
假设日志提示:
Duplicate class okhttp3.internal.Util in modules okhttp3-3.14.9 and okhttp-2.7.5
做法:
configurations.all {
exclude group: 'com.squareup.okhttp', module: 'okhttp' // 老版本
}
// 只保留 3.x
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
./gradlew app:checkDebugDuplicateClasses 找出重复类。./gradlew app:assembleDebug。pickFirsts 当“救命膏药”,否则线上随时爆炸。按以上操作,就能把
CheckDuplicatesRunnable 错误彻底消灭。祝你编译一路绿灯!
Cannot fit requested classes in a single dex file (# methods: 93047 > 65536) 【Android】开发者模式启用
API开发工具postman、国内xxapi和SmartApi的性能对比
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048520/viewspace-3104473/ ,如需转载,请注明出处,否则将追究法律责任。