Android mergeDebugResources任务失败:values.xml资源编译遇非法字符报错
嘿,看起来你碰到了Android资源编译时的路径非法字符问题,咱们一步步拆解解决它!
错误根源定位
从报错日志里能揪出核心问题:
java.nio.file.InvalidPathException: Illegal char <:> at index 45: cn.iso.product.projectname-mergeDebugResources-51:/values/values.xml
这里的资源路径里出现了冒号(:),而Windows系统的文件路径不允许冒号出现在文件名/路径中间(盘符后的冒号除外),直接导致AAPT2资源编译工具无法正确识别文件路径,最终触发mergeDebugResources任务失败。
排查与解决步骤
检查资源文件中的特殊字符
虽然你提供的values.xml片段看起来都是正常的@string引用,但得仔细排查:- 所有string、drawable、layout等资源的名称里,有没有包含冒号、斜杠这类特殊字符?比如有没有定义类似
<string name="abc:def">...</string>的资源? - 检查所有资源文件名,比如drawable的图片名、layout的xml文件名,有没有带冒号或其他非法字符。
- 所有string、drawable、layout等资源的名称里,有没有包含冒号、斜杠这类特殊字符?比如有没有定义类似
清理缓存后重新构建
有时候缓存的中间文件会出现异常,执行以下操作试试:./gradlew clean之后手动删除项目根目录的
.gradle文件夹、app模块下的build文件夹,再重新执行构建命令:./gradlew assembleDebug检查gradle配置的命名合法性
报错路径里出现了cn.iso.product.projectname,去检查模块级build.gradle里的applicationId、模块名称有没有包含特殊字符,确保它们是合法的标识符(无冒号、空格等)。查看合并后的临时values.xml文件
日志里明确指出编译失败的文件是D:\android\app\build\intermediates\incremental\debug\mergeDebugResources\merged.dir\values\values.xml,你可以打开这个临时文件,对比你提供的代码片段,看看里面有没有新增的异常资源引用或非法字符(比如其他依赖模块带过来的问题资源)。
额外提醒
如果是多模块项目,别忘了检查依赖的其他模块的资源文件,因为合并资源时会整合所有模块的内容,其他模块的非法资源命名也会导致主模块编译失败。
内容来源于stack exchange

