Android Lint是在ADT 16(和 Tools 16)引入的1个新工具,可以扫描Android 项目源码中潜伏的bug 。它可同时作为1个命令行工具,和集??成在Eclipse(以下所述),和IntelliJ(详细信息)中。这个架构是成心独立于IDE的,因此它有希望与其他的IDE,其他的构建工具和延续集成系统集成。
以下是它进行扫描的1些毛病类型的例子:
- 缺少翻译(和未使用的翻译)
- 布局性能问题(老的
layoutopt
工具会用于查找所有这样的问题,和除此以外更多的问题) - 未使用的资源
- 不1致的数组大小(当在多个配置中定义数组)
- 可访问性和国际化问题(硬编码字符串,缺少contentDescription等)
- 图标问题 (如丢失密度、 重复图标、 毛病尺寸等)
- 可用性问题 (如不在文本字段上指定输入的类型)
- 清单毛病
和其他更多的问题。
请参阅此文档以了解当前 lint 检查的问题的完全列表。
有关如何取消显示(suppress)特定的 lint 正告信息,请参阅取消正告显示的文档.
如果你对编写自定义的lint 检查有兴趣,可以参阅编写新的 Lint 检查和编写自定义
Lint 规则。
命令行用法
在 SDK 工具目录有1个命令行工具叫做
如果在你的path上已配置了 SDK 的lint
。tools/
目录,您可使用“lint
”来调用它。只需指向1个特定的 Android 项目目录。你也能够指向1个随机的目录,(如果它不是1个 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,禁用1个特定的检查,或1列的检查,例如:
注意,您也能够列出种别,比如上面的“Usability:Icons”,就是用性种别的图标子种别。
您可以通过添加 --disable argument,禁用1个特定的检查,或1列的检查,例如:
$ lint --disable MissingTranslation,UnusedIds,Usability:Icons /src/astrid/
注意,您也能够列出种别,比如上面的“Usability:Icons”,就是用性种别的图标子种别。
有些检查默许情况下牌禁用状态。可以通过添加
最后,您可以通过
如果要找出哪一个 id 和种别是可用的,请运行
使用
--enable
标志启用它们。最后,您可以通过
--check
标志指定运行哪些确切的检查。这让你可以在代码库中查找1个具体的问题,比如: $ 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 <selector>
"InefficientWeight": Looks for inefficient weight declarations in LinearLayouts
"ScrollViewSize": Checks that ScrollViews use wrap_content in scrolling dimension
"MergeRootFrame": Checks whether a root <FrameLayout> can be replaced with a <merge> tag
...
使用
--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 输出有1定的优势:
默许情况下,链接到源代码文件将只使用本地的 file:// 路径资源。您可以通过 --url 选项把 URL 重新映照向不同的前缀。例如:
- 它包括每一个问题相干的更长的解释,并通过1个More info 的属性提供关于这个问题的更详细信息的链接。
- 它包括有毛病的实际的源代码行 (上下各有3行代码的1个窗口)。
- 它可以包括关联到该源代码文件的链接
- 对毛病图标,为能够比较起见,在报告中会显示图标本身
--html 文件名
作为参数:$ 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 规则),并且结果将显示在1个特别的 lint 窗口(当发现毛病时它可以从显示在布局编辑器的右上角的毛病标记中打开)。
Lint 窗口
要在1个项目上运行 Lint,请在包阅读器当选择项目,然后单击 Lint 工具栏上的功能(见下面的图片)。
或您可以在项目上右击,在 Android Tools 子菜单中,有1个“运行 Lint”的功能。它将打开1个 Lint 窗口,其中包括各种毛病。选择1个毛病将会在右边的文本区显示相干联的解释。
如果 lint 视图上有任何毛病,你可以在毛病上双击,来跳转到相干联的源代码位置。每一个正告图标将显示其严重程度,并具对已修复的正告(见下1节)会有1个小灯泡堆叠。
该窗口也有1个操作栏(在右上角),它可让你
- 再次运行 lint 检查以刷新结果 (在刷新期间它会变成1个 Stop 按钮,用于中断检查)
- 如果有毛病,运行与此毛病相干联的修复
- 疏忽此修复
- 删除正告标记
- 删除所有的正告标记
快速修复
许多 lint 正告有自动修复功能。例如,各种 layoutopt 修复的替换提示 (如替换 wrap_content 为 0dp)。
- 从 lint 视图中,单击灯泡来调用1个修复程序。
- 从布局编辑器正告摘要中,单击修复按钮来修复。
- 从 XML 代码编辑器中,调用快速修复 (Ctrl+1 或Command+1)并选择与该正告关联的快速修复。
取消毛病正告的显示
从编辑器快速修复菜单中,你也能够选择
(如果你在 quickfix 列表找不到 lint 的修复操作,请参阅 已知 Bug 章节)
这些选择都存储项目里名为
- 仅疏忽此文件中的这个正告
- 疏忽此项目中的这个正告
- 在此期间疏忽此正告。
- 通过添加注解或属性疏忽此广告, 此处有解释。
这些选择都存储项目里名为
lint.xml
的文件中,可以通过命令行工具读取。因此,您可以在 UI 中疏忽正告,并在你的源项目关联的lint.xml
文件中进行记录,其他运行着的lint将不会看到你已疏忽的正告(大概是由于已手动验证了)。选项
要编辑用于所有项目备用选项的 lint 全局选项,可以调用正常的 Eclipse 选项对话框,并选择 Android > Lint Options:
如果你选择了1个问题,您可以在右下角的下拉列表中编辑其严重程度。这使您可以把某些问题指定为 Error(即会在启用了靠近顶部的对话框中的选项的情况下中断导出 APK)。
要完全关闭问题检查,请选择“Ignore”作为严重程度。
请注意此操作不会编辑每一个项目的 lint 设置
。打开项目设置对话框 (右击该项目),你将在这里找到 Android Lint 的属性页。在选项对话框中手动严重性编辑也会与取消显示的毛病1起被记录在
lint.xml
文件中,所以您的团队中的其他人将会取得你对这个项目编辑的相同的严重性设置。