我很好奇如何找到缺少默认值的 Android 资源。例如,可以定义corner_radius
in dimens-sw600dp.xml
,没有定义它dimens.xml
。这将导致最小宽度小于 600 dp 的任何设备上运行时崩溃。
在上面的例子中,默认值缺失并不明显。 aapt 运行后,您可以在代码和 xml 中引用维度,尽管缺少默认值。 (通过R.dimen.corner_radius
and @dimen/corner_radius
)。该错误直到运行时才被发现。
Android Studio 包含对缺少翻译的 lint 检查,但似乎没有检查其他资源类型。有没有一种简单的方法可以在构建时检查其他缺失的资源(尺寸、布局等)?
您现在可以依赖MissingDefaultResource
lint 规则(发现here http://tools.android.com/tips/lint-checks):
如果资源仅在带有 -land 或 -en 等限定符的文件夹中定义,
并且基本文件夹中没有默认声明(布局或值等),
那么如果在设备上访问该资源,应用程序将崩溃
设备的配置缺少给定的限定符。
作为一种特殊情况,不必在基本文件夹中指定可绘制对象;
如果密度文件夹(例如drawable-mdpi)中有匹配的图像
将被使用和扩展。但请注意,如果您仅在中指定一个可绘制对象
像drawable-en-hdpi这样的文件夹,应用程序将在非英语语言环境中崩溃。
在某些情况下,您可能拥有资源,例如 -fr 可绘制对象,
仅从具有相同限定符的其他资源引用
(例如 -fr 样式),其本身具有安全后备。然而,这仍然
使某人有可能意外引用可绘制对象并
崩溃,因此在基本文件夹中创建默认的虚拟后备会更安全。
或者,您可以通过添加来抑制该问题
元素上的 tools:ignore="MissingDefaultResource"。
(这种情况经常发生在字符串翻译中,您可能会
删除代码和对应的资源,但是忘记删除一个
翻译。该场景有一个专用的问题 ID,其 id
额外翻译。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)