本文译自androd官方技术文档《Android Lint》,原文地址:http://tools.android.com/tips/lint。

本文地址:http://blog.csdn.net/maosidiaoxian/article/details/41592783。转载请注明出处。翻译如有错讹,敬请指正。



Android Lint

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 <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 输出有一定的优势:

  • 它包含每个问题相关的更长的解释,并通过一个More info 的属性提供关于这个问题的更详细信息的链接。
  • 它包含有错误的实际的源代码行 (上下各有三行代码的一个窗口)。
  • 它可以包含关联到该源代码文件的链接
  • 对于错误图标,为能够比较起见,在报告中会显示图标本身

要生成 HTML 报告,只需要添加--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 在 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文件中,所以您的团队中的其他人将会获得你对这个项目编辑的相同的严重性设置。 

android官方技术文档翻译——Android Lint的更多相关文章

  1. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  2. Android官方技术文档翻译——Gradle 插件用户指南(4)

    最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...

  3. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  4. Android官方技术文档翻译——Gradle 插件用户指南(6)

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  6. Android官方技术文档翻译——新构建系统概述

    本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. ...

  7. Android官方技术文档翻译——开发工具的构建概述

    本文译自Android官方技术文档<Build Overview>,原文地址:http://tools.android.com/build. 因为<Android Lint Chec ...

  8. Android官方技术文档翻译——Ant 任务

    本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 由于是抽着时间译的.所以这篇 ...

  9. Android官方技术文档翻译——IntelliJ 项目迁移

    本文译自Android官方技术文档<Migrating from IntelliJ Projects>,原文地址:http://tools.android.com/tech-docs/ne ...

随机推荐

  1. Ubuntu安装与配置KVM

    事前检查 查看一下linux是32位还是64位 file /bin/ls 确认一下 CPU支持硬件虚拟化(不支持也没关系,可以继续) egrep -o '(vmx|svm)' /proc/cpuinf ...

  2. Tarjan笔记1

    Tarjan 2822 爱在心中 ** 时间限制: 1 s ** 空间限制: 128000 KB ** 题目等级 : 钻石 Diamond 题解 题目描述 Description"每个人都拥 ...

  3. How To determine DDIC Check Table, Domain and Get Table Field Text Data For Value?

     How To determineDDIC Check Table, Domain and Get Table Field Text Data For Value? 1.Get Table Fie ...

  4. Android 开发环境的搭建(新环境)

    最近想往Android 转型,所以又重新捡起Android学习.看了一下各位大神的文章,说的比较乱,因为版本不一样所以搭建过程也不一样,我在这里说一下最简单快捷的方式.(PS:那时候搭建环境好复杂啊, ...

  5. 程序员的自我修养-----Java开发的必须知道的几个注意点

    1. 将一些需要变动的配置写在属性文件中 比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置.那么你的程序无论在DEV环境中,还是TEST环境中,都可以顺畅无阻地运行,但是一旦部署在P ...

  6. Hibernate通过SQL查询常量时只能返回第一个字符的解决方法

    在Hibernate中如果通过 [java] view plaincopy session.createSQLQuery("select '合计' as name from dual&quo ...

  7. 第一行代码阅读笔记----显示隐式Intent的基本用法

    1.显示Intent意图明显,通过Intent启动另外一个活动,这是安卓中各组件进行交互的一种重要方式.一般用于启动活动,启动服务,发送广播等场景. 实现方法,这里我只说思路,实践还是要自己实操才能明 ...

  8. FFmpeg源代码简单分析:结构体成员管理系统-AVOption

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  9. ubunut系统清理系统根目录下缓存文件夹.cache超大导致磁盘不足

    在使用中突然发现系统超慢,没有做什么特别的操作. 只好重启下电脑,重启后提示系统空间不足1G.挨个查看文件夹大小,没有发现问题,然后就用Ctrl + H显示隐藏文件夹后再继续逐个查看大小,发现.cac ...

  10. 2.7、Android Studio使用翻译编辑器本地化UI

    如果你的应用支持多语言,你需要合理的管理你的翻译的string资源.Android Studio 提供了翻译编辑器来使查看和管理翻译的资源更加容易. 关于翻译编辑器 翻译后的资源在你的项目里保存在不同 ...