API指南之使用lint来改善你的代码

官方文档地址:Improve Your Code with Lint
Github地址:https://github.com/UserWang/Android-Notes

虽然不能测试你的应用程序是否符合你的功能需求,但是lint可以确保你的代码没有结构上的问题。糟糕的代码结构会影响你的应用程序的健壮性和效率,而且让你的代码很难去维护。例如,如果你的xml资源文件中有没有用到的命名空间,它不但占用空间,还会造成无意义的渲染。还有其他问题,比如使用过时的组件或调用targetAPI版本不支持的API,有可能会造成代码运行失败。

综述

Android studio 自带的静态代码检查工具Lint能够很容易的帮你识别代码中存在的一些问题,而不需要运行应用程序或写任何测试用例。lint检测出的每一个问题都有描述信息和重要级别,你可以按照这个级别来确定需要修改的代码优先级。你也可以通过降低问题的优先级来忽略跟你的项目无关的问题,同样你也可以提高问题的优先级。你可以使用lint的命令行接口来把它集成到你的自动化测试流程中。

lint通过检测你的代码来发现潜在的bug或是关于正确性、安全性、性能、可用性、可访问性以及国际化方面的最优改进。你可以使用命令行或是直接通过android studio 来运行lint。

注意:当你使用android studio编译代码的时候,额外的 IntelliJ code inspections会运行来提升代码检查效率

图1展示了lint的工作流程。

图1. lint的代码检查工作流程

程序资源文件

  android程序的资源文件,包括Java类、xml文件、图标和混淆配置文件等。

lint.xml文件

  一个配置文件,可以用它指定lint检查是你要排除的文件以及自定义问题级别

lint工具

  一个静态代码检查工具,你可以通过命令行或者直接通过android studio来运行。lint工具可以检查影响你应用程序质量和性能的代码结构问题,在你发布你的应用程序之前,强烈建议你先把lint工具检测出来的问题解决掉。

lint检查的结果

  你可以在android studio的控制台或Event Log中查看lint检查的结果。每一个问题都可以通过它在资源文件的位置和问题的描述来区分。

在版本大于16(包括16)的Android SDK Tools中都自动安装了lint工具。

通过android studio运行lint

当你构建你的app的时候,android studio 会自动运行配置好的lint和IDE检查。IDE检查和lint一起运行IntelliJ 代码检查来提升代码审查的效率。

注意:要查看和修改检查的级别,可以通过 File > Settings > Editor > Inspections来打开支持了检查列表的Inspection Configuration页。

使用android studio,你可以针对build.gradle文件中的一个构建版本或是所有的构建版本来运行lint检查。把lintOptions属性添加到build文件的* android 设置中。 这个Gradle构建文件的代码片段显示了如何设置 quiet 选项为 true 和 abortOnError *选项为 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。你可以通过弹出的对话框中指定你要检查的范围和属性。
检查结果会展示在检查工具窗口,把鼠标放在上面你可以看到这个问题的大概,单机它就可以看到这个问题的一个全部描述。

通过命令行运行lint

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

lint [flags] <project directory>

比如,你可以通过下面这条命令来检查 myproject 目录和它的子目录。
MissingPrefix 是告诉lint只扫描缺少了命名空间的xml文件。

lint --check MissingPrefix myproject 

查看lint支持的所以命令标记

 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个错误。其中有三个警告(ManifestOrder,UsesMinSdkAttributesUnusedResource)发生在AndroidManifest.xml文件中.剩下的这个警告(IconMissingDensityFolder)发生在布局文件Preferences.xml中。

配置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工具来检查你的代码。你可以通过两种方式来查看警告和错误:

  • 代码编辑器窗口的弹出式的文字。如果lint发现了一个问题,它会把有问题的代码黄色高亮显示,如果是更严重的问题会在代码下边有红色下划线。

  • 当你使用Analyze > Inspect Code后,可以在lint的检查结果窗口看到。

设置默认lint检查:


  1. 使用android studio 打开你的工程
  2. 选择 File > Other Settings > Default Settings
  3. 在默认配置对话框中选择Editor > Inspections
  4. 在Profile中选择Default或Project Default来分别设置检查范围是Android studio 还是当前工程
  5. 如果需要的话可以展开种类来选择lint配置。

你可以选择是检查某一项还是检查全部类型

  • 点击“确定”。

  • 在检查结果窗口展示lint检查的结果:


    1. 在Android Studio中打开你的工程,选择你想要测试的部分
    2. 选择Analyze > Inspect Code
    3. 在“选择检查范围”对话框中选择要检查的范围和模块。

    指定的范围是你想要检查的文件,而指定的模块(profile)是lint检查执行的模块(对应上文”设置默认lint检查”中的第4条,译者注)

  • 如果你想要更改lint设置,点击“…”按钮,在“Inspection”对话框中,点击 Manager 按钮去定义一个新的模块,指定你想要的lint设置,然后点击确定。
    在“Inspection”对话框中你可以通过查找字符串来找到lint检查。注意在“Inspection”对话框中改变lint检查的模块并不会改变上文说到的默认设置,它只是改变当前这次检查的模块。
  • 点击确定。
    结果展示在“Inspection Result”窗口,并按照类型分类展示。

  • 配置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>
    

    通过设置中的severity属性,你就可以禁止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 工程里的某一个类或方法禁用lint检查,可以在Java代码中添加 @SuppressLint 注解。

    下面的例子展示了如何禁止lint检查onCreate方法中的NewApi问题。而它会继续检查该类的其他的方法的 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 {
    

    如果想要禁止lint检查Java文件的所有问题,可以使用关键字“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"
    

    如果想要禁止lint检查XML文件的全部问题,使用关键字“all”

    tools:ignore="all"
    

    猜你喜欢

    转载自blog.csdn.net/mattdong0106/article/details/51614502