如何解决Android项目的:app:mergeDebugResources资源合并错误?
针对你遇到的java.lang.IllegalStateException:无法从com.android.aaptcompiler.ParsedResource提取资源导致values.xml编译失败的问题,可以按以下步骤排查解决:
检查values.xml语法与内容错误
直接打开项目中所有values.xml文件(包括多语言、不同分辨率目录下的),重点排查:- 标签是否完整闭合,比如
<string>有没有对应的</string> - 资源引用是否正确,比如
@string/xxx是否拼写错误,或者引用了不存在的资源 - 字符串里的特殊字符是否转义,比如双引号要写成
\" - 是否存在重复的资源ID,比如两个
<string name="test">
- 标签是否完整闭合,比如
清理构建缓存后重新构建
执行命令清理缓存再构建:./gradlew clean ./gradlew assembleDebug也可以通过Android Studio操作:
File -> Invalidate Caches...,勾选Clear file system cache and local history后点击Invalidate and Restart。排查依赖与资源冲突
- 用
./gradlew app:dependencies打印依赖树,检查是否有重复依赖的库,这类库可能会带来同名资源冲突 - 如果发现冲突,通过
exclude语法排除重复模块,或者调整依赖版本
- 用
调整AGP版本
这个异常常和Android Gradle Plugin版本兼容性有关,尝试降级或升级AGP版本(修改项目根目录的build.gradle或settings.gradle中的AGP版本号),注意要和当前Gradle版本保持官方兼容。检查资源文件编码
确保所有values.xml都是UTF-8编码,在Android Studio的File -> Settings -> Editor -> File Encodings中统一设置编码格式,避免因编码问题导致解析失败。禁用第三方插件排查
如果项目用了自定义Gradle插件、特殊的资源压缩配置,暂时禁用这些插件后重新构建,逐步定位是否是插件导致的资源解析异常。
如果以上方法无效,重点看堆栈日志里的具体行号信息,通常日志会指向出错的具体资源文件和行,根据这个精准定位错误项。
内容的提问来源于stack exchange,提问作者Eva

