当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] Android Lint是在ADT 16(和 Tools 16)引入的一个新工具,可以扫描Android 项目源码中潜在的bug 。它可同时作为一个命令行工具,以及集??成在Eclipse(如下所述),和Intell

 Android Lint是在ADT 16(和 Tools 16)引入的一个新工具,可以扫描Android 项目源码中潜在的bug 。它可同时作为一个命令行工具,以及集??成在Eclipse(如下所述),和IntelliJ(详细信息)中。这个架构是有意独立于IDE的,因此它有希望与其他的IDE,其他的构建工具和持续集成系统集成。

以下是它进行扫描的一些错误类型的例子:

缺少翻译(和未使用的翻译)

布局性能问题(老的layoutopt工具会用于查找所有这样的问题,和除此之外更多的问题)

未使用的资源

不一致的数组大小(当在多个配置中定义数组)

可访问性和国际化问题(硬编码字符串,缺少contentDescription等)

图标问题 (如丢失密度、 重复图标、 错误尺寸等)

可用性问题 (如不在文本字段上指定输入的类型)

清单错误 以及其他更多的问题。

请参阅此文档以了解当前 lint 检查的问题的完整列表。 有关如何取消显示(suppress)特定的 lint 警告信息,请参阅取消警告显示的文档.

如果你对编写自定义的lint 检查有兴趣,可以参阅编写新的 Lint 检查和编写自定义 Lint 规则。

命令行用法

在 SDK 工具目录有一个命令行工具叫做 lint。 如果在你的path上已经配置了 SDK 的tools/ 目录,您可以使用“lint”来调用它。只需指向一个特定的 Android 项目目录。你也可以指向一个随机的目录,(如果它不是一个 Android 的项目)将以递归方式搜索,并将检查该目录下的所有项目。(你还可以指定通过空格分隔的多个项目)。

$ lint /src/astrid/

Scanning GreenDroid-GoogleAPIs: ..

Scanning stream: ...

Scanning api: ...........................

Scanning GDCatalog: .......................

Scanning GreenDroid: ...........................................................

Scanning tests: ...

Scanning filters: ....

Scanning tests: .....

Scanning astrid: ....................................................................................................................................................

Scanning simple: .......

api/res/values-ca: Error: Locale ca is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]

astrid/res/values-ca: Error: Locale ca is missing translations for: DLG_cancel, DLG_dismiss, DLG_ok, EPr_deactivated... (117 more) [MissingTranslation]

api/res/values-cs: Error: Locale cs is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]

(many lines omitted)

43 errors, 466 warnings

禁用检查

每种错误类型的“ID”都显示在错误消息后面的括号中,如上面的“MissingTranslation”。

您可以通过添加 --disable argument,禁用一个特定的检查,或一列的检查,例如:

$ lint --disable MissingTranslation,UnusedIds,Usability:Icons /src/astrid/

注意,您也可以列出类别,比如上面的“Usability:Icons”,就是用性类别的图标子类别。

有些检查默认情况下牌禁用状态。可以通过添加--enable标志启用它们。

最后,您可以通过--check标志指定运行哪些确切的检查。这让你可以在代码库中查找一个具体的问题,比如:

$ lint --check MissingPrefix /src/astrid/

如果要找出哪个 id 和类别是可用的,请运行

$ lint --list

Valid issue categories:

Correctness

Security

Performance

Usability

Usability:Icons

Accessibility

Internationalization

Valid issue id‘s:

ContentDescription: Ensures that image widgets provide a contentDescription

DuplicateIds: Checks for duplicate ids within a single layout

StateListReachable: Looks for unreachable states in a

InefficientWeight: Looks for inefficient weight declarations in LinearLayouts

ScrollViewSize: Checks that ScrollViews use wrap_content in scrolling dimension

MergeRootFrame: Checks whether a root can be replaced with atag

...

使用--show命令加上 id 列表或类别 (或不带参数查看全部)可以获取指定的问题的解释:

$ lint --show MissingPrefix

MissingPrefix

-------------

Summary: Detect XML attributes not using the Android namespace

Priority: 8 / 10

Severity: Warning

Category: Correctness

Most Android views have attributes in the Android namespace. When

referencing these attributes you *must* include the namespace prefix,

or your attribute will be interpreted by aapt as just a custom

attribute.

HTML 报表

这个命令行工具还可以生成HTML报告。这相比普通的 lint 输出有一定的优势:

它包含每个问题相关的更长的解释,并通过一个More info 的属性提供关于这个问题的更详细信息的链接。

它包含有错误的实际的源代码行 (上下各有三行代码的一个窗口)。

它可以包含关联到该源代码文件的链接

对于错误图标,为能够比较起见,在报告中会显示图标本身 要生成 HTML 报告,只需要添加--html 文件名 作为参数:[!--empirenews.page--]

$ lint --html /tmp/report.html

默认情况下,链接到源代码文件将只使用本地的 file:// 路径资源。您可以通过 --url 选项把 URL 重新映射向不同的前缀。例如:

$ lint --html /tmp/report.html --url /src/MyProj=http://buildserver/src/MyProj

其他命令行选项

运行lint --help以获取可用参数的相关信息。

Eclipse 中的用法

注: 此文档是在 lint 首次发布时编写的。Eclipse 集成已经有了显著的提高。欲了解更多最新的详细信息,请参阅新的Eclipse Lint UI(New Eclipse Lint UI), 布局编辑器 Lint 反馈(Layout Editor Lint Feedback) 和 Lint 保存(Lint On Save).

Lint 在 ADT 16及更高的版本上集成。该集成 提供了上述 Lint 命令行版本的几个功能:

自动修复许多警告

Lint 可以在各种编辑器操作中自动运行

屏幕某些错误类型及特定的错误实例

配置问题检查严重程度

从 lint 视图直接跳转到问题源码

Lint 自动化

在以下情况时 lint 会自动运行:

导出 APK。在这种情况下,会以特殊模式运行 lint,它将只查找致命错误 (这样会更快),并且如果发现了任何错误的时候会中止导出。你可以在 Lint 选项中关闭它。

编辑并保存和 XML 文件,例如布局文件或清单文件。在这种情况下,所有适用于给定文件的文件范围检查都会运行,并且会为任何已发现的问题加上编辑器的标记。

使用布局编辑器。每个 UI 操作后,在布局文件上会运行文件范围检查 (如各种 layoutopt 规则),并且结果将显示在一个特别的 lint 窗口(当发现错误时它可以从显示在布局编辑器的右上角的错误标记中打开)。

Lint 窗口

要在一个项目上运行 Lint,请在包浏览器中选择项目,然后单击 Lint 工具栏上的功能(见下面的图片)。

或者您可以在项目上右击,在 Android Tools 子菜单中,有一个“运行 Lint”的功能。它将打开一个 Lint 窗口,其中包含各种错误。选择一个错误将会在右侧的文本区显示相关联的解释。

如果 lint 视图上有任何错误,你可以在错误上双击,来跳转到相关联的源代码位置。每个警告图标将显示其严重程度,并具对于已修复的警告(见下一节)会有一个小灯泡重叠。

该窗口也有一个操作栏(在右上角),它可以让你

再次运行 lint 检查以刷新结果 (在刷新期间它会变成一个 Stop 按钮,用于中止检查)

如果有错误,运行与此错误相关联的修复

忽略此修复

删除警告标记

删除所有的警告标记

快速修复

许多 lint 警告有自动修复功能。例如,各种 layoutopt 修复的替换提示 (如替换 wrap_content 为 0dp)。

从 lint 视图中,单击灯泡来调用一个修复程序。

从布局编辑器警告摘要中,单击修复按钮来修复。

从 XML 代码编辑器中,调用快速修复 (Ctrl+1 或Command+1)并选择与该警告关联的快速修复。

取消错误警告的显示

从编辑器快速修复菜单中,你也可以选择

仅忽略此文件中的这个警告

忽略此项目中的这个警告

在此期间忽略此警告。

通过添加注解或属性忽略此广告, 此处有解释。

(如果你在 quickfix 列表找不到 lint 的修复操作,请参阅 已知 Bug 章节)

这些选择都存储项目里名为lint.xml的文件中,可以通过命令行工具读取。因此,您可以在 UI 中忽略警告,并在你的源项目关联的lint.xml文件中进行记录,其他运行着的lint将不会看到你已经忽略的警告(大概是因为已经手动验证了)。

选项

要编辑用于所有项目备用选项的 lint 全局选项,可以调用正常的 Eclipse 选项对话框,并选择 Android > Lint Options:

如果你选择了一个问题,您可以在右下角的下拉列表中编辑其严重程度。这使您可以把某些问题指定为 Error(即会在启用了靠近顶部的对话框中的选项的情况下中止导出 APK)。

要完全关闭问题检查,请选择“Ignore”作为严重程度。

请注意此操作不会编辑每个项目的 lint 设置

。打开项目设置对话框 (右击该项目),你将在这里找到 Android Lint 的属性页。在选项对话框中手动严重性编辑也会与取消显示的错误一起被记录在lint.xml文件中,所以您的团队中的其他人将会获得你对这个项目编辑的相同的严重性设置。 子页 (2): 取消 Lint 警告的显示(Suppressing Lint Warnings) 编写一个 Lint 检查(Writing a Lint Check)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭