Improving Your Code with lint——使用lint改进你的代码

Improving Your Code with lint——使用lint改善你的代码

要进一步测试你的Android应用是否满足功能需求,确保你的代码没有结构上的错误是很重要的。糟糕的结构代码会影响你的Android应用的可靠性和效率,让你的代码难以维护。例如,如果你的XML资源文件包含了未使用的命名空间,这会占用空间并带来不必要的处理。其它结构性问题,例如使用废弃的元素或调用目标API版本不支持的API,会导致不能正确运行代码。

概述

Android SDK提供了一个叫做 lint 的代码扫描工具,可以帮助你很轻松地识别和纠正代码的结构质量问题,而不用执行应用程序或写任何测试用例。每一个被工具发现的问题都用一个描述信息和一个严重级别报告出来,因此你可以快速确定哪些重要提升需要去做。你也可以配置问题严重级别来忽略与项目无关的问题,或者提升严重级别。这个工具有一个命令行界面,因此你可以很容易地将它集成到你的自动化测试程序中。

lint 工具检查你的Android项目源文件的潜在问题,以及优化提升正确性,安全性,性能,可用性,可访问性和国际化。你可以从命令行或从Android Studio运行lint。

注意:在Android Studio中,当你的代码在Android Studio被编译,额外的IntelliJ代码检查会运行来提升代码检查的效率。

下图展示了 lint 工具如何处理应用源文件。
Improving Your Code with lint——使用lint改进你的代码
注:lint工具的代码扫描工作流

应用源文件
源文件由组成Android项目的文件组成,包括Java文件,XML文件,图标和混淆配置文件。

lint.xml 文件
一个配置文件你可以用来指定lint检查哪些你想排除和自定义问题严重级别。

lint工具
一个静态代码扫描工具你可以从命令行或Android Studio运行在你的Android项目上。lint工具检查哪些影响Android应用质量和性能的结构代码问题。强烈建议你在发布应用前纠正lint发现的问题。

lint检查的结果
你可以在控制台或Android Studio的Event Log中查看 lint 的结果。每一个问题都通过它发生的源文件位置和这个问题的描述指出。

在版本16或更高,lint工具作为Android SDK Tools的部分自动安装。

在Android Studio中运行lint

在Android Studio中,无论什么时候构建应用,配置的lint和IDE检查自动运行。IDE检查配置与lint检查一起运行IntelliJ代码检查来提升代码检查的效率。

记住:要查看和修改检查验证级别,使用File > Settings > Project Settings菜单来打开显示了支持检查的列表的Inspection Configuration页。

使用Android Studio,你可以针对 builde.gradel 文件中的一个特定构建版本或所有构建版本运行 lint 检查。在构建文件中添加 lintOptions 属性到 android 设置。这个Gradle构建文件的代码片段显示了如何设置 quiet 选项为 trueabortOnError 选项为 false

android {
    lintOptions {
    // set to true to turn off analysis progress reporting by lint
    quiet true
    // if true, stop the gradle build if errors are found
    abortOnError false
    // if true, only report errors
    ignoreWarnings true
    }
    ...
}

要在Android Studio中手动运行检查,从应用或右键菜单,选择Analyze > Inspect code。出现 Specify Inspections Scope 对话框,你可以指定需要检查的范围和属性。

在命令行中运行lint

对一个项目目录的文件列表运行 lint

lint [flags] <project directory>

例如,你可以发出下面的命令来扫描 myproject 目录下及其子目录下的文件。 MissingPrefix 告诉 lint 只扫描缺少Android命名空间前缀的XML属性。

lint --check MissingPrefix myproject 

要查看所有工具支持的标志列表和命令行参数:

lint --help

lint输出例子

下面的例子显示了当对一个叫做Earthquake的项目运行 lint 命令时的控制台输出。

$ lint Earthquake

Scanning Earthquake: ...............................................................................................................................
Scanning Earthquake (Phase 2): .......
AndroidManifest.xml:23: Warning: <uses-sdk> tag appears after <application> tag [ManifestOrder]
  <uses-sdk android:minSdkVersion="7" />
  ^
AndroidManifest.xml:23: Warning: <uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?" [UsesMinSdkAttributes]
  <uses-sdk android:minSdkVersion="7" />
  ^
res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]
res: Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]
0 errors, 4 warnings

上面的输出列出了这个项目中的4个警告和0个错误。3个警告( ManifestOrder , UsesMinSdkAttributesUsesMinSdkAttributes )在项目的 AndroidManifest.xml 中发现。剩下的1个警告( IconMissingDensityFolder )在 Preferences.xml 布局文件中发现。

配置lint

默认,当你运行一个 lint 扫描,工具检查 lint 所支持的所有问题。你可以限制 lint 检查的问题以及给这些问题分配严重级别。例如,你可以禁止 lint 检查那些与你的项目无关的问题,以及配置 lint 用一个低严重级别报告非关键问题。

你可以配置 lint 检查的不同级别:

  • Globally,for the entire project
  • Per project module
  • Per production module
  • Per test module
  • Per open files
  • Per class hierarchy
  • Per Version Control System(VCS) scopes

在Android Studio中配置lint

Android Studio允许你启用或禁用个别检查,并对 lint 配置项目全局,指定目录和指定文件设置。

你可以在Android Studio中使用File > Setting > Project Setting菜单打开Inspections页管理检查属性和配置检查严重等级,它列出了支持的属性和检查。

Improving Your Code with lint——使用lint改进你的代码
注:检查配置

全局偏好设置

  1. 要指定全局项目设置,在Project视图中选中项目文件夹,选择Analyze > Inspect Code
  2. 指定你的检查范围和属性,然后点击OK

配置好的设置运行指定的 lint 检查。无论何时你构建和运行你的Android项目和模块, lint 检查也会运行。

模块和指定文件偏好设置

  1. 右击在Project视图中的模块文件夹或文件,然后选择Analyze > Inspect Code来在你的模块运行 lint 工具。这个会用 lint 在你的模块中发现的问题列表显示lint检查结果。
  2. Lint Warning视图中,使用工具栏选项来配置单独模块和文件的 lint 偏好设置,并设置问题显示属性。

配置lint文件

你可以在 lint.xml 文件中指定你的 lint 检查偏好设置。如果你手动地创建这个文件,将它放置到你的Android项目的根目录。如果你在Android Studio配置 lint 偏好设置, lint.xml 文件会自动地创建并添加到你的Android项目中。

lint.xml 文件由一个包含一个或多个子元素 的封闭父标签 组成。每一个都通过 lint 定义的唯一id属性值标识。

<?xml version="1.0" encoding="UTF-8"?>
    <lint>
    <!-- list of issues to configure -->

通过设置 标签中的严重级别属性值,你可以禁止 lint 检查某个问题或改变某个问题的严重级别。

小贴士:查看 lint 工具支持的所有问题列表和它们对应的问题ID,运行 lint —list 命令。

lint.xml文件例子

下面的例子显示了一个 lint.xml 文件内容。

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the given check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore" />

    <!-- Ignore the ObsoleteLayoutParam issue in the specified files -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml" />
        <ignore path="res/layout-xlarge/activation.xml" />
    </issue>

    <!-- Ignore the UselessLeaf issue in the specified file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>

    <!-- Change the severity of hardcoded strings to "error" -->
    <issue id="HardcodedText" severity="error" />
</lint>

在Java和XML源文件中配置lint检查

你可以在你的Java和XML源文件中禁用 lint 检查。

小贴士:如果你使用Android Studio,你可以使用File > Settings > Project Settings > Inspections特性来管理 lint 检查你的Java或XML源文件。

在Java中配置lint检查

要对你的Android项目中的指定的一个Java类或方法禁用 lint 检查,添加 @suppressLint 注解到该Java代码上。

下面的例子显示了你如何关掉 lint 检查在 onCreate 方法中的 NewApi 问题。 lint 工具会继续检查这个类的其他方法中的 NewApi 问题。

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

下面的例子显示你如何关掉 lint 检查在 FeedProvider 类中的 ParseError 问题:

@SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {

要压制在Java文件中的所有 lint 问题,使用 all 关键字,像这样:

@SuppressLint("all")

在XML中配置lint检查

你可以使用 tools:ignore 属性来禁用 lint 检查你的XML文件的指定部分。为了让这个属性被 lint 工具识别,下面的命名空间必须包含在你的XML文件中:

namespace xmlns:tools="http://schemas.android.com/tools"

下面的例子显示了你如何关掉 lint 检查一个XML布局文件中的 元素的 UnusedResources 问题。 ignore 属性被声明这个属性的父元素的子元素继承。在这个例子中, lint 检查也被子元素 禁用。

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="UnusedResources" >

    <TextView
        android:text="@string/auto_update_prompt" />
</LinearLayout>

要禁用不止一个问题,用逗号分隔的字符串列出问题并禁用。例如:

tools:ignore="NewApi,StringFormatInvalid"

要压制在XML元素的所有 lint 问题检查,使用 all 关键字,像这样:

tools:ignore="all"

原文链接:
http://developer.android.com/tools/debugging/improving-w-lint.html
Android调试系列教程:
http://blog.csdn.net/doandkeep/article/details/45173475