我很好奇如何找到缺少默认值的android资源。例如,可以在corner_radius
中定义dimens-sw600dp.xml
,而无需在dimens.xml
中定义R.dimen.corner_radius
。这将导致任何最小宽度小于600 dp的设备发生运行时崩溃。
在上面的示例中,缺少默认值并不明显。在aapt运行之后,您可以在代码和xml中引用维度,尽管缺少默认值。 (通过@dimen/corner_radius
和grecaptcha.getResponse()
)。直到运行时才能发现错误。
Android Studio包含对缺少翻译的lint检查,但似乎没有检查其他资源类型。是否有一种简单的方法可以在构建时检查其他缺失的资源(维度,布局等)?
答案 0 :(得分:5)
您现在可以依靠required
棉绒规则(找到的here):
如果仅在带有-land或-en等限定符的文件夹中定义资源, 并且基本文件夹中没有默认声明(布局或值等), 那么如果在设备上访问了该资源的应用程序将崩溃 设备处于缺少给定限定符的配置中。
在特殊情况下,不必在基本文件夹中指定可绘制对象。 如果在密度文件夹(例如drawable-mdpi)中存在匹配的图像 将被使用和缩放。但是请注意,如果仅在 像drawable-en-hdpi这样的文件夹,该应用将在非英语语言环境中崩溃。
在某些情况下,您拥有资源,例如-fr drawable, 仅从其他具有相同限定词的资源中引用 (例如-fr样式)本身具有安全的后备。但是,这仍然 使某人可能意外引用了drawable和 崩溃,因此在基本文件夹中创建默认的虚拟后备更为安全。 或者,您可以通过添加来抑制此问题 元素上的tools:ignore =“ MissingDefaultResource”。
(这种情况经常发生在字符串翻译中,在这种情况下, 删除代码和相应的资源,但是忘记删除 翻译。该场景有一个专用的问题ID,该ID 额外翻译。)
答案 1 :(得分:1)
实际上,我找到了一种方法,而不是最好方法,但它正在发挥作用。
删除除主要文件之外的所有其他dimens.xml
文件(例如v19, w820dp
等)。
之后只需构建您的项目 - 您将获得现在缺少尺寸的错误列表 当您发现问题时,只需恢复删除。