首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Caused by: org.gradle.workers.internal.DefaultWorkerExecutor

Caused by: org.gradle.workers.internal.DefaultWorkerExecutor

原创
作者头像
lichong951
发布2025-12-05 11:03:39
发布2025-12-05 11:03:39
1660
举报

这个错误:

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,导致构建失败。


✅ 快速定位重复类

方法 1:Gradle 自带报告(推荐)

代码语言:bash
复制
./gradlew app:assembleDebug --info \
| grep -i "duplicate"

代码语言:bash
复制
./gradlew app:assembleDebug --stacktrace

Build Output 面板里会打印出类似:

代码语言:bash
复制
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)

方法 2:用 Gradle 任务

代码语言:bash
复制
./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

excludepickFirsts 见下方代码。

自己 implementation project(':libA')libB 都含 com.foo.Bean

把公共部分抽成独立模块,或重命名包(jarjar / relocate)。


✅ 一键“先跑起来”的应急方案(不推荐长期)

app/build.gradle忽略重复类(仅本地调试,上架前必须根治):

代码语言:groovy
复制
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,务必后续排除真正的重复依赖。


✅ 根治模板(示例)

假设日志提示:

代码语言:bash
复制
Duplicate class okhttp3.internal.Util
in modules okhttp3-3.14.9 and okhttp-2.7.5

做法:

代码语言:groovy
复制
configurations.all {
exclude group: 'com.squareup.okhttp', module: 'okhttp' // 老版本
}
// 只保留 3.x
implementation 'com.squareup.okhttp3:okhttp:4.12.0'

✅ 步骤小结

  1. ./gradlew app:checkDebugDuplicateClasses 找出重复类。
  2. 根据坐标 exclude升级/统一 到同一个版本。
  3. 确认无重复后再 ./gradlew app:assembleDebug
  4. 别长期用 pickFirsts 当“万能膏药”,否则线上随时爆炸。

按以上操作,就能把 CheckDuplicatesRunnable 错误彻底消灭。祝你编译一路绿灯!


Android推荐阅读

Cannot fit requested classes in a single dex file (# methods: 93047 > 65536)

【Android】开发者模式启用

开发工具链推荐

API开发工具postman、国内xxapi和SmartApi的性能对比

健康杂谈

【论健康】怎么才算健康(健康的本质)

【论健康】健康的不可能三角

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ✅ 快速定位重复类
    • 方法 1:Gradle 自带报告(推荐)
    • 方法 2:用 Gradle 任务
  • ✅ 常见场景 & 解决清单
  • ✅ 一键“先跑起来”的应急方案(不推荐长期)
  • ✅ 根治模板(示例)
  • ✅ 步骤小结
  • Android推荐阅读
  • 开发工具链推荐
  • 健康杂谈
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档