今天在项目编译中遇到如下问题 -- Failed to compile values file.,环境是在AndroidStudio的Bumblebee,CompileSdk 31
image.png
通过BuildOutput没有明确的错误信息定位,网上也找了相关的解决方案,都没有能解决这个问题。这里记录一下问题排查的过程,如果想看解决方案,可以直接跳转到文章尾部。
回顾问题出现的流程
- 之前编译都是OK,在移植了原来项目中的部分代码后出现此问题。
- 问题大致可以定位到资源文件中
排查方案:
- 由于自己项目比较复杂,干扰因素较多,所以建了一个新的空项目
- 拷贝自己项目中的新增的资源文件到新项目中直接编译,果然还是报错
- 注释全部新增文件中内容,编译通过。
-
逐步释放注释,直到再次报错
image.png -
最后定位到下面这行导致报错
image.png
分析:
这里是自定义属性的属性名,在老版本中运行都是OK的,为何在此会突然报错呢?
回想之前移植自定义View的时候也遇到过由于自定义属性的命名与系统中其他组件的属性名相同时也导致过报错,于是修改了一下改属性名
image.png
OK,编译通过!
总结:
出现这个问题的原因应该是由于AndroidStudio和CompileSdk升级,导致系统在处理自定义属性的属性名与系统已使用的属性名相同时,会无法通过校验,导致编译不通过,这种错误不会指明冲突的位置,所以,在出现此类问题的时候,可以优先 检查自定义属性的命名,最好不要使用抽象通用的命名,以避免与系统属性名发生冲突。