You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle升级至8.7后minifyDebugWithR8任务出现ConcurrentModificationException

Gradle 8.7升级后R8混淆任务出现ConcurrentModificationException的解决思路

问题描述

升级Gradle到8.7版本后,执行minifyDebugWithR8任务时随机抛出java.util.ConcurrentModificationException,无法定位具体代码位置。尝试隔离可疑代码后编译正常,但新增常规代码后异常再次出现,无明显规律。

异常信息

* Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my_app:minifyDebugWithR8'.        
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130)        
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)        
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128)        
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)        
    at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)        
    at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)        
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)        
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)        
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)        
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)        
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)        
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)        
    at
....
org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) 
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete        
    at Version.fakeStackEntry(Version_8.5.10.java:0)        
    at com.android.tools.r8.T.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:5)        
    at com.android.tools.r8.internal.so.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:82)        
    at com.android.tools.r8.internal.so.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:32)        
    at com.android.tools.r8.internal.so.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:31)        
    at com.android.tools.r8.R8.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:79)        
    at com.android.tools.r8.R8.run(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:3)        
    at com.android.builder.dexing.R8Tool.runR8(r8Tool.kt:332)        
    at com.android.build.gradle.internal.tasks.R8Task$Companion.shrink(R8Task.kt:782)        
    at com.android.build.gradle.internal.tasks.R8Task$R8Runnable.execute(R8Task.kt:856)        
    at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)        
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)        
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)        
    at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)        
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)        
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)        
    at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)        
    at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)        
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)        
    at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)        
    at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)        
    at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)        
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:187)        
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:120)        
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:162)        
    at org.gradle.internal.Factories$1.create(Factories.java:31)        
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:264)        
    at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:128)        
    at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:133)        
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:157)        
    at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126)        
    ... 2 more 
Caused by: java.util.ConcurrentModificationException        
    at com.android.tools.r8.shaking.M.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:748)        
    at com.android.tools.r8.shaking.M.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:2135)        
    at com.android.tools.r8.shaking.M.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:1593)        
    at com.android.tools.r8.R8.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:1471)        
    at com.android.tools.r8.R8.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:233)        
    at com.android.tools.r8.R8.b(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:1)        
    at com.android.tools.r8.internal.so.a(R8_8.5.10_22aedce5751c5724ec7f9ababa2e0e8592ff733648b0ef6249782cbca92180e8:28)        
    ... 34 more

解决思路

  • 升级R8/AGP版本:从异常栈看出当前R8版本为8.5.10,Gradle 8.7对应AGP 8.3.x版本,升级AGP会自动匹配兼容的R8版本,修复已知的并发处理bug。
  • 禁用R8并行处理:在gradle.properties中添加android.enableR8Parallel=false,强制R8单线程执行,规避多线程下的集合并发修改问题。
  • 排查自定义混淆规则:检查proguard-rules.pro等自定义规则,避免使用可能触发R8内部集合遍历修改的不当配置,比如错误的-keep或-assumenosideeffects规则。
  • 清理编译缓存:执行./gradlew clean build --no-build-cache,清除Gradle和R8的缓存文件,排除旧缓存导致的异常。
  • 排查第三方依赖:临时移除或更新最近新增的第三方依赖,部分旧版本依赖可能与新版R8存在兼容性问题。
  • 启用R8调试日志:在gradle.properties中添加android.r8.debug=true,获取更详细的R8执行日志,定位具体触发异常的混淆步骤。

内容的提问来源于stack exchange,提问作者user1428852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:10:52