我很好奇如何找到缺少默认值的android资源。例如,可以定义corner_radius在dimens-sw600dp.xml,在不定义它dimens.xml。这将在最小宽度小于600 dp的任何设备上导致运行时崩溃。
在上面的示例中,默认值丢失并不明显。运行aapt后,尽管缺少默认值,您仍可以在代码和xml中引用维度。(通过R.dimen.corner_radius和@dimen/corner_radius)。该错误只有在运行时才能发现。
Android Studio包含了一次皮棉检查,检查是否缺少翻译,但似乎并未检查其他资源类型。有没有一种简便的方法可以在构建时检查其他丢失的资源(尺寸,布局等)?
现在,您可以依靠MissingDefaultResourcelint规则(在此处找到):
如果仅在带有-land或-en等限定符的文件夹中定义资源,并且基本文件夹中没有默认声明(布局或值等),则如果在设备上访问该资源的设备上的应用程序将崩溃在配置中缺少给定的限定词。
在特殊情况下,不必在基本文件夹中指定可绘制对象。如果在密度文件夹(例如drawable-mdpi)中存在匹配项,则将使用该图像并进行缩放。但是请注意,如果仅在诸如drawable-en-hdpi之类的文件夹中指定一个drawable,则该应用程序将在非英语语言环境中崩溃。
在某些情况下,您拥有一个资源(例如-fr drawable),该资源仅从具有相同限定符(例如-fr样式)的某些其他资源中引用,该资源本身具有安全的后备。但是,这仍然使某些人可能意外引用了drawable并崩溃,因此在基本文件夹中创建默认的虚拟后备更为安全。另外,您可以通过在元素上添加tools:ignore =“ MissingDefaultResource”来抑制此问题。
(这种情况经常发生在字符串翻译中,您可能会删除代码和相应的资源,但是忘记删除翻译。该情形有专门的问题ID,其ID为ExtraTranslation。)
| 归档时间: |
|
| 查看次数: |
6808 次 |
| 最近记录: |