用 Lint 优化 Android 代码

519 查看

除了测试 Android 的应用程序是否满足功能要求外,确定你的代码没有结构问题也相当重要。代码架构不完善会影响 Android 应用程序的可靠性和运行效率,同时也会使代码更难维护。比如,如果你的XML资源包含未使用的命名文件,这不仅占用了空间,还会招致不必要的处理工作。其他的结构问题,如使用过时代码,或者使用了不被目标 API 版本支持的 API 调用,这都可能会导致代码无法正确运行。

概览

Android Studio 提供了一款名叫 Lint 的代码扫描工具,它可以帮助你轻松识别并纠正你的代码结构质量问题,而且并不需要运行app或编写测试用例。该工具检查到的每个问题都会生成一份包含描述信息和严重等级的报告,因此你可以快速优先处理需要做的紧急改进。你还可以配置一个问题的严重程度以忽略与你项目不相关的问题,或提升严重级别。这个工具有一个命令行接口,因此你可以轻易将它集成到你的自动测试进程中。

Lint 工具为潜在的bug和优化改进会检查你的Android项目代码文件中的正确性、安全性、性能、可用性、可访问性以及国际化。你可以从命令行或Android Studio中运行Lint。

注意:在Android Studio中,当你的代码在Android Studio中编译时额外的IntelliJ code inspections会运行以简化代码审查。

图1展示了Lint工具是如何处理应用程序的源代码文件的。

144525_6afh_2903254

图1、 Lint工具的代码扫描工作流程

  • 应用程序源代码文件
  • 源代码文件包含了那些构成你的Android工程的文件,包括 Java 和 XML文件,图标,以及 ProGuard 配置文件。
  • lint.xml 文件
  • 这是一个配置文件,你可以用它来指定任何你想要排除出去的Lint检查,还有就是对问题的严重级别进行自定义。
  • Lint 工具
  • 这是一个静态的代码扫描工具,你可以通过命令行或者 Android Studio来把它运行起来。Lint 工具会检查哪些可能会影响到Android应用程序质量及性能的结构方面的代码问题。我们强烈建议你在发布应用程序之前,先把Lint检测出来的错误修正。
  • Lint检查的结果
  • 你可以在控制台或者 Android Studio 的事件日志(Event Log)中查看来自Lint的运行结果。每一个问题都会以其在源代码文件中检测到错误的位置进行标识,并附上针对问题的描述信息。

Lint 工具是作为 Android SDK工具版本16或者更高版本的一部分,已经自动被安装好了的。

在 Android Studio 中运行Lint

在 Android Studio 中, 配置好的 Lint 及 IDE 检查会在你构建应用时自动运行。IDE检查是跟着 Lint 检查一起配置的,运行IntelliJ 代码检查就可以精简代码的审查工作。

注意: 要查看和修改检查的问题严重界别的话,可以使用 File > Settings > Editor > Inspections 菜单来打开检查配置(Inspection Configuration )页,里面有一个支持检查项的清单。

使用 Android Studio 的话, 你还可以针对特定的构建变量运行 Lint 检查, 或者也可以是来自 build.gradle 文件的所有变量。需要将 lintOptions 属性添加到构建文件的 android 设置中。下面这段代码来自于一个 Gradle 构建文件,它显示了如何将 quiet 选项设置成 true,将 abortOnError 选项设置成 false。

要在 Android Studio 中手动运行检查的话,可以从 application 或者 鼠标右键出现的菜单入手,选择 Analyze > Inspect Code 就可以了。这样会出现一个指定检查范围(Specify Inspections Scope)对话框,这样你就可以指定想要进行检查的范围和方面了。

每次检查的结果都会显示在检查工具窗口中。你可以通过将鼠标悬停在一个检查的错误上来显示内联的错误概要信息, 或者通过选定它来展示出错误完整的问题描述信息。

从命令行运行 lint

要针对一个工程目录中一系列文件运行 Lint,可以使用如下命令:

例如,你可以输入如下命令来扫面 myproject 路径及其子路径下的文件。问题ID MissingPrefix 会告诉 Lint 只扫描那些丢失了 Android 命名空间前缀的 XML 属性。

要查看工具所支持的标识和命令行参数清单,使用如下命令:

lint 输出示例

下面的示例展示了 Lint在针对一个叫做 Earthquake 的工程运行时,控制台的输出。