AGP升级后R8混淆打包失败:Attempt to enqueue错误求助
R8打包错误:Attempt to enqueue an action in a non pushable enqueuer work list 解决建议
问题背景
环境信息
Android Gradle Plugin版本:7.4.0(7.3.1版本也出现相同问题)R8版本:4.0.48(AGP自带版本)
打包配置
build.gradle.kts中的release构建配置:
getByName("release") { isDebuggable = false isShrinkResources = true isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") }
问题现象
之前可正常生成签名release包,升级AGP、Compose compiler等依赖后,打包失败,核心报错:
> Task :app:minifyReleaseWithR8 AGPBI: {"kind":"error","text":"com.android.tools.r8.internal.e50: Attempt to enqueue an action in a non pushable enqueuer work list.","sources":[{}],"tool":"R8"} > Task :app:minifyReleaseWithR8 FAILED com.android.tools.r8.internal.e50: Attempt to enqueue an action in a non pushable enqueuer work list.
已尝试清理构建、重启Android Studio、清除缓存等操作,均无效,无法逐步回滚依赖排查。
完整堆栈信息
> Task :app:minifyReleaseWithR8 AGPBI: {"kind":"error","text":"com.android.tools.r8.internal.e50: Attempt to enqueue an action in a non pushable enqueuer work list.","sources":[{}],"tool":"R8"} > Task :app:minifyReleaseWithR8 FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:minifyReleaseWithR8'. > A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable > Compilation failed to complete * Try: > Run with --info or --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:minifyReleaseWithR8'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:142) ...(省略重复堆栈内容)
解决建议
1. 升级R8版本(优先尝试)
AGP 7.4.0自带的R8 4.0.48存在已知内部逻辑错误,手动指定更高兼容版本可修复:
在项目根目录的build.gradle.kts中添加:
buildscript { dependencies { classpath("com.android.tools:r8:7.4.6") // AGP 7.4.x推荐搭配R8 7.4.x系列,或更高兼容版本 } }
注意:R8版本需与AGP版本匹配,避免兼容性问题。
2. 切换基础ProGuard规则
临时替换优化版规则为基础版,绕过可能的优化冲突:
修改打包配置中的proguard文件路径:
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
若打包成功,再逐步复用优化规则,排查触发错误的具体优化项。
3. 补充Compose相关R8规则
升级Compose Compiler后,需确保规则覆盖完整,在proguard-rules.pro中添加:
# Compose核心类保留 -keep class androidx.compose.** { *; } -keep interface androidx.compose.** { *; } -dontwarn androidx.compose.** # Compose Compiler依赖的元数据类 -keep class kotlinx.metadata.** { *; } -dontwarn kotlinx.metadata.** # 保留Compose注解相关 -keep @androidx.compose.runtime.Composable class * { *; } -keep class * implements androidx.compose.runtime.Composable
4. 生成详细日志定位根源
执行打包命令时启用debug日志,查看R8处理到哪个类时触发错误:
./gradlew assembleRelease --debug
从日志中找到错误前的类处理记录,针对性添加-keep规则。
5. 临时禁用资源收缩
关闭资源收缩功能,排查是否与R8优化冲突:
isShrinkResources = false
若打包成功,再单独排查资源文件或资源收缩规则的问题。
内容的提问来源于stack exchange,提问作者tasjapr
相关产品推荐
相关产品推荐

