Android Studio报Can not extract resource资源编译失败如何解决
问题根因
该报错属于AAPT2资源合并阶段的解析异常,核心触发原因是values类资源在合并过程中出现无法解析的条目,常见场景包括:
- 项目自身values目录下的资源存在不合法写法:比如资源名含大写/特殊字符、资源值含未转义的特殊符号、空资源值、XML标签语法错误
- 项目资源和第三方依赖的values资源重名冲突,values资源无命名空间隔离,重名合并时会触发解析逻辑异常
- 增量编译缓存损坏,build目录下生成的中间合并资源文件是残缺/旧版本损坏文件
- Android Gradle插件(AGP)、Gradle、Build Tools版本不匹配,导致AAPT2资源解析逻辑运行异常
排查修复步骤
按从易到难顺序操作即可:
- 优先排除编译缓存问题
- 依次点击Android Studio顶部菜单
Build -> Clean Project,执行完成后再点击Build -> Rebuild Project,缓存损坏导致的问题这一步可直接修复 - 若操作后仍报错,完全关闭Android Studio,手动删除项目根目录下的
.gradle文件夹、app/build文件夹,重新打开项目等待Gradle同步完成后再次尝试编译
- 定位项目内非法资源
- 不要直接查看报错路径下build目录内的merged values.xml,该文件是自动生成的中间产物,直接检查项目源码路径
app/src/main/res/values/下的所有XML文件:- 校验所有资源命名:仅允许使用小写英文字母、数字、下划线,不能包含大写字母、中文、特殊符号,不能以数字开头
- 校验资源值:字符串、颜色等资源值中如果包含
&、<、'、"这类特殊字符必须按XML规则转义,例如&需写为&、<需写为<,字符串内的双引号需加反斜杠转义 - 排查是否存在空值资源、标签未闭合、属性写错的条目,例如空的string节点、style节点下item属性名写错的问题
- 若近期新增过大量资源,可通过逐段注释新增资源、每次注释后编译的二分法快速定位出错的资源条目
- 排查资源冲突与构建配置问题
- 打开Android Studio右侧Gradle面板,执行
app -> Tasks -> android -> androidDependencies查看依赖树,排查是否存在重复引入、版本冲突的第三方依赖,冲突依赖可通过exclude规则排除重复的资源项 - 若开启了资源压缩,可临时在app层级的build.gradle中把
shrinkResources设为false,排查是否为资源压缩阶段误删必要资源导致的异常 - 校验构建版本匹配性:确认AGP版本和Gradle版本为官方适配的组合,无需手动指定buildToolsVersion,使用AGP默认绑定的Build Tools版本即可,避免手动指定过旧/过新的版本导致兼容问题
- 获取精准错误日志
- 若以上步骤都未定位问题,在项目根目录打开终端,Windows系统执行
gradlew.bat assembleDebug --stacktrace,Mac/Linux系统执行./gradlew assembleDebug --stacktrace,全量编译日志会直接打印触发解析异常的具体资源条目,根据日志提示对应修复即可。
内容的提问来源于stack exchange,提问作者shivam singh
相关产品推荐
相关产品推荐

