如何检查缺少默认值的android资源?

时间:2017-08-13 16:17:12

标签: android lint

我很好奇如何找到缺少默认值的android资源。例如,可以在corner_radius中定义dimens-sw600dp.xml,而无需在dimens.xml中定义R.dimen.corner_radius。这将导致任何最小宽度小于600 dp的设备发生运行时崩溃。

在上面的示例中,缺少默认值并不明显。在aapt运行之后,您可以在代码和xml中引用维度,尽管缺少默认值。 (通过@dimen/corner_radiusgrecaptcha.getResponse())。直到运行时才能发现错误。

Android Studio包含对缺少翻译的lint检查,但似乎没有检查其他资源类型。是否有一种简单的方法可以在构建时检查其他缺失的资源(维度,布局等)?

2 个答案:

答案 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等)。

之后只需构建您的项目 - 您将获得现在缺少尺寸的错误列表 当您发现问题时,只需恢复删除。