Android执行gradlew assemble构建时processDebugResources任务失败 提示R$id类过大
构建失败问题排查方案
核心报错根因
执行gradlew tasks assemble时卡在Task :app:processDebugResources FAILED,抛出Class too large: sample/co/us/R$id的本质原因是:构建流程在生成R类字节码时,R$id类总大小超过JVM单类64KB常量池上限,被ASM框架拦截抛出ClassTooLargeException;该异常被Gradle Worker执行器包装为WorkerExecutorException,最终向上传递为任务执行失败的TaskExecutionException,全程不涉及业务代码逻辑错误。
构建同步提示的“已弃用Gradle特性、与Gradle 7.0不兼容”为独立问题,不会直接触发本次构建崩溃,但会在后续版本升级中形成硬性拦截。本次构建总耗时19秒,10个可执行任务中3个完成执行、7个复用最新缓存状态,与R类生成失败的触发点完全匹配。
R类超限问题处理方案
- 启用非传递R类生成:在app模块
build.gradle的android配置块中添加nonTransitiveRClass = true,关闭依赖库R类向主模块的传递生成,直接砍掉主R类中来自第三方库、子模块的冗余字段,大幅降低单R类体积。该配置为AGP 7.0及以上版本默认开启项,老版本可手动配置启用。 - 模块拆分降载:将主模块中独立的业务功能拆分为单独的Library模块或动态Feature模块,每个模块独立生成自身的R类,从结构上避免单模块内资源总量过高导致的R类超限问题。
- 冗余资源清理:扫描主模块下的无用布局、图片、raw资源,删除未被代码引用的资源条目,直接降低R类需要承载的资源id总量。
- 临时兜底方案:项目急需出包时,可接入资源混淆工具压缩资源id规模,作为短周期临时方案不推荐长期使用。
Gradle兼容性问题处理方案
- 对齐版本适配关系:检查当前项目的Gradle版本与Android Gradle Plugin版本的兼容范围,替换项目中已被弃用的Gradle配置(如将老的
compile依赖声明替换为implementation,移除已废弃的打包配置),消除与Gradle 7.0版本的不兼容提示。 - 清理构建缓存重试:执行
gradlew clean清空历史构建产物后重新执行assemble任务,避免旧缓存中损坏的R类生成产物导致任务异常。
内容的提问来源于stack exchange,提问作者Ray Ma
相关产品推荐
相关产品推荐

