0

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 文件会导致问题消失,并且似乎不会导致按字母顺序排列的可绘制对象中断,但很难确定它是否解决了所有问题,并且“为什么”问题仍然存在。

4

1 回答 1

1

需要更多信息才能做出更有根据的猜测。一旦我遇到了类似的问题,这种问题发生在 GB 版本上,但不是更高版本,只有在 Mac 上编译;如果在 Windows 上编译,同样可以正常工作;问题是按钮没有显示背景图像。我的背景图片是 9-patch,最后我注意到这是由于没有将各自的图片放入所有 drawable-[m|h|x]dpi;我只在 drawable-xhdpi 目录中拥有它,因此修复了该问题。您可以检查这些类型的问题。例如,这个问题是否只出现在某些屏幕密度或某些 android 版本等上。正如另一个响应所说,40 xml 远非任何限制。

HTH,阿里。

于 2013-04-17T04:43:22.093 回答