如何检查 Android 资源是否缺少默认值?

2024-01-16

我很好奇如何找到缺少默认值的 Android 资源。例如,可以定义corner_radius in dimens-sw600dp.xml,没有定义它dimens.xml。这将导致最小宽度小于 600 dp 的任何设备上运行时崩溃。

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

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


您现在可以依赖MissingDefaultResourcelint 规则(发现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(使用前将#替换为@)

如何检查 Android 资源是否缺少默认值? 的相关文章

  • BLE 外设支持 Android-L 示例 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我希望有一个适用于 Android L 的 BLE 外设模式的示例 我的代码给了我奇怪的错误 即广告商太多 这没有任何意
  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的
  • 在名称中使用时间戳时,Android Studio 在构建后无法启动应用程序

    我遇到了 gradle 和 Android Studio 的问题 该问题仅在 Android Studio 中构建时出现 BuildServer 和 Commandline 工作正常 applicationVariants all vari
  • startActivity overridePendingTransition 只显示进入动画

    基本上 我遇到的问题是只显示输入幻灯片动画 调用 Activity 不会产生动画 startActivity intent overridePendingTransition R anim right in partly R anim le
  • Android向后兼容技术

    我现在在开发基于最新 API 15 ICS 的 15 项活动 Android 应用程序方面取得了进展 现在我发现应用程序的主要功能主义者即使支持 android v4 也不向后兼容 例如 1 fragment事务动画 2 将StringSe
  • 毕加索磁盘缓存

    我正在使用 Picasso 从 URL 加载图像 Picasso with getApplicationContext load product getImageUrl into imageView 据我所知 每次都会访问该网址 而不是缓存
  • Android ListView 自定义适配器 ImageButton

    这可能不是正确的方法 如果有更好的方法请告诉我 我创建了一个自定义适配器类 在我的 getView 方法中我膨胀了我想要使用的视图 public View getView int position View convertView View
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 如何通过 AppCompatActivity 使用 YouTube Android 播放器 API

    为了在我的应用程序中播放视频 我决定扩展 YouTube Android Player API 但问题是我的菜单消失了 因为我没有从 AppCompatActivity 扩展 问题是 如何使用 YouTube Android Player
  • 改造方法调用可能会产生“java.lang.NullPointerException”

    使用 Retrofit 2 3 0 我在 Android Studio 中收到以下消息 有关如何删除此 IDE 错误消息的任何建议 谢谢 来自Response文档 http square github io retrofit 2 x ret
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

  • 在C++中重载operator[],但要防止a[i]=one_special_specific_value

    我正在实现 Spare Vector ADT 并且想要重载运算符 我有一个 int 和 double 对的列表 我想通过例如创建新节点 5 3 5 a 5 3 5 但我想让它不可能为其中一个节点分配 0 值 因为它应该是一个备用向量 所以当
  • Android 设备:“new ServerSocket(6000)”上的权限被拒绝异常

    我收到 权限被拒绝 异常new ServerSocket 6000 在 Android 设备中 我读过很多帖子 其中说你必须把android permission INTERNET清单中的许可 我已经获得了此许可 并且仍然收到此消息 Non
  • 级联类型.ALL 不起作用

    我已在实体关系中设置了 CascadeType ALL 但每当我保留实体时 它都会部分起作用 前任 会员实体 OneToMany mappedBy member cascade CascadeType ALL private List
  • 对许多 PostgreSQL 查询进行基准测试

    在复杂的网页上会执行数百个查询 我正在寻找一种方法来对这些查询进行基准测试 我尝试嵌入解释分析进入查询resp 进入 psql 函数 选择每个查询的执行时间并进行比较 但解释分析似乎无法以任何方式嵌入 是否有其他解决方案来比较某些查询的执行
  • 从 .txt 中读取单词,并对每个单词进行计数

    我想知道如何像 fscanf 那样读取字符串 我需要在 all txt 中逐字阅读 我需要对每个单词进行计数 collectwords collections defaultdict int with open DatoSO txt r a
  • 正则表达式捕获分隔符之间的字符串

    In this https stackoverflow com questions 1454913 regular expression to find a string included between two characters wh
  • 使用什么数据库来存储和操作大数据?

    我必须决定为我的下一个项目使用哪个数据库服务器 但是像我所做的几乎所有项目一样使用 MySQL 的简单决定现在变得更加困难 因为我期望非常多的记录 数据库会存储一个用户列表 一些其他不相关的表 最后一个是一些用户收集的数据 比方说 如果我有
  • 使用 eXist-db 中的范围索引提高查询性能

    阅读文档http exist db org exist apps doc indexing xml http exist db org exist apps doc indexing xml我发现很难理解如何以及是否可以提高 读取 查询的性
  • 变换scaleX并保持固定的右侧位置

    使用jquery缩放一些文本mousemove但不知道如何使右侧的单词 h2 从固定的右侧位置向左侧扩展 相反 它总是从单词的左边缘开始缩放 我希望这两个单词组合起来始终填充窗口的宽度 当光标向左移动时 左侧单词 h1 缩小 右侧单词 h2
  • Delphi Pascal - 使用 SetFilePointerEx 和 GetFileSizeEx,在读取文件时获取物理媒体的确切大小

    我不知道如何使用 RTL 之外的任何 API 我一直在使用 SetFilePointer 和 GetFileSize 将物理磁盘读入缓冲区并将其转储到文件中 这样的循环可以完成 2GB 以下闪存卡的工作 SetFilePointer PD
  • 在 SQL Server 2008 中创建日期

    有没有类似的东西DATEFROMPARTS year month day 在 SQL Server 2008 中 我想使用当前年份和月份创建日期 但使用我自己的月份日期 这需要在一行中完成 以便在计算列公式中使用 例如 我不确定它是否有效
  • 确定监听某个端口的进程pid

    正如标题所示 我正在运行多个游戏服务器 并且每个服务器都有相同的name但不同PID和port数字 我想匹配PID正在监听某个端口的服务器 然后我想终止这个进程 我需要它来完成我的 bash 脚本 这可能吗 因为在网上还没有找到解决方案 您
  • 如何在Lumen中使用多个数据库

    我们已经使用 Lumen 来构建 API 现在我们需要访问多个数据库 目前使用 env对于数据库配置 但无法找到多个数据库的方法 env 我们需要在哪里读取第二个连接 首先 您需要配置连接 如果您还没有 则需要创建一个config项目目录中
  • 我怎样才能让 onclick 函数只提交我的 form.php

    下面是我试图覆盖的代码 var conf isVip false isMem false var sinaSSOConfig entry mail loginType 0 setDomain true pageCharset UTF 8 t
  • 如何在 Windows 上使用 CMake 进行非交互式构建?

    我想在 Windows 上使用 CMake 设置自动构建 我使用的是 Visual Studio 2005 Update 这是我正在使用的 我将 devenv exe 设置为我的 PATH 然后运行下面的命令来构建 我正在使用 Hudson
  • C# 空合并 (??) 运算符的运算符优先级是什么?

    我刚刚尝试了以下操作 其想法是连接两个字符串 用空字符串替换空值 string a Hello string b World 调试 有趣的是 是打印 并不完全有助于可读性 a b gt 你好 正确的是 a b Hello World 我有点
  • 轮式拾取器的制作方法

    我正在尝试制作一个像这样的轮式拾取器this https code google com p android wheel 我尝试下载该项目 但 zip 下载中包含的唯一文件是wheel demo apk 和notes txt Notes t
  • 为什么数组插入的时间复杂度是 O(n) 而不是 O(n+1)? [复制]

    这个问题在这里已经有答案了 我刚刚开始学习数据结构 在进行数组插入时 我想知道为什么数组插入的时间复杂度是 O n 而不是 O n 1 在最好的情况下 当插入在最后一个地方时 时间复杂度是O 1 我想我们正在考虑 1 插入元素 因为没有元素
  • Windows 上有 /dev/null 吗?

    相当于什么 dev null在 Windows 上 我想你想要NUL 至少在命令提示符或批处理文件中 例如 type c autoexec bat gt NUL 不创建文件 I believe如果您尝试以编程方式创建文件 情况也是如此 但我
  • 如何检查 Android 资源是否缺少默认值?

    我很好奇如何找到缺少默认值的 Android 资源 例如 可以定义corner radius in dimens sw600dp xml 没有定义它dimens xml 这将导致最小宽度小于 600 dp 的任何设备上运行时崩溃 在上面的例