Android项目/编译工具链中的某个点是否有一些XML/布局/资源限制?向我的 Android 项目添加单个(未使用的,任何内容)XML 布局文件会导致应用程序其他地方出现渲染错误。删除它可以修复它。这是编译工具链某些部分的错误,我该如何诊断/修复它?
一些额外的上下文:
我有一个比较大的Android项目。今天我在添加一个功能时遇到了一个问题:一个按钮的背景可绘制在我旋转应用程序之前没有呈现。其他背景/样式/样式按钮仍在工作,但这一个背景非常破碎,在应用程序中无处不在。旋转会修复它所在的屏幕以及按钮的每个后续实例,直到重新启动应用程序的进程。
经过大量的试验和错误,以及对分和实验,我得到了某种程度的完全可靠的最小复制:向我当前的项目添加另外两个 XML 布局文件会触发错误。具体来说,在唯一的 /res/layout 文件夹中添加第 40 个 XML 文件。删除它可以让按钮正确呈现,添加它会破坏它。
这些文件可以完全不使用,完全从头开始,具有任何内容和任何名称。没有其他项目更改。我正在运行最新版本的 Eclipse 和 Android SDK - 如果需要,我可以获得特定的版本号。它已在具有类似设置的同事机器上与该项目一起复制。我已经清理、重建、手动删除构建产品,重新启动计算机,错误仍然存在。
一定有更具体的原因导致它,我很乐意提供帮助缩小范围的建议。不幸的是,它超出了我对 Android 构建系统的了解,而且似乎不是我直接造成的。任何人都可以帮忙吗?或者指向我一些进一步的资源?
更多详情:
- (不敢相信我忘记了这一点)这似乎只发生在我拥有的 2.3.6 设备上。它可能发生在其他 2.x 版本上,但 4.2.2 始终正确呈现按钮(尽管我没有/不能排除另一个位置的错误)。我今天将尝试模拟器。
- 发生在多个 Android 设备上,尽管它们基本上都是库存的(没有自定义主题等)。
- 当前的应用程序设置是一个核心应用程序项目,其他三个项目使用该核心项目通过清单合并生成不同的构建(开发、生产等)。
- 该特定的可绘制资源具有应有的唯一 R id,因此它似乎不会在那里发生冲突。我没有将它与系统 R 值进行比较 - 有没有好的方法?
- 目标 SDK = 17,最小值 = 8
也很有趣:将可绘制文件从“rounded_teal_button_normal”重命名为“rounded_teal_button_nrml”不会改变任何东西,但将其更改为“rounded_teal_button_aargh”会。我能看到的唯一重要区别是“nrml”不会改变文件的字母顺序,而“aargh”会改变(有一个“_disabled”文件和“_pressed”)。但是,这确实会导致现在处于“正常”位置的可绘制对象停止绘制。
更改按钮状态选择器的项目顺序或哪个状态获得哪个可绘制(甚至删除所有其他样式)没有任何效果。
添加第三个XML 文件会导致问题消失,并且似乎不会导致按字母顺序排列的可绘制对象中断,但很难确定它是否解决了所有问题,并且“为什么”问题仍然存在。