使用Lint改进您的代码

除了测试Android应用以确保其符合功能要求外,还必须确保代码不存在结构问题。结构混乱的代码会影响Android应用的可靠性和效率,增大维护代码的难度。例如,如果XML资源文件包含未使用的命名空间,则不仅占用空间,还会导致不必要的处理。其他结构问题,例如使用目标API版本不支持的已弃用的元素或API调用等,可能导致代码无法正常运行。

概览

Android Studio提供一个名为Lint的代码扫描工具,可帮助您发现并纠正代码结构质量的问题,而无需实际执行该应用,也不必编写测试用例。该工具会报告其检测到的每个问题并提供该问题的描述消息和严重级别,以便您可以快速确定需要优先进行哪些关键改进。此外,您可以调低问题的严重级别,忽略与项目无关的问题,也可以调高严重级别,以突出特定问题。

Lint工具可检查您的Android项目源文件是否包含潜在错误,以及在正确性,安全性,性能,易用性,便利性和国际化方面是否需要优化改进。在使用Android Studio时,配置的Lint和IDE检查会在您每次构建应用时运行。不过,您可以手动运行检查或从命令行运行Lint。

注:在Android Studio中编译代码时,再运行IntelliJ代码检查可以简化代码检查。

图1显示了Lint工具如何处理应用源文件。
使用Lint改进您的代码_第1张图片
图1。Lint工具的代码扫描工作流

  • 应用源文件
    源文件包含组成Android项目的文件,包括Java和XML文件,图标和ProGuard配置文件等。
  • lint.xml 文件
    此配置文件可用于指定您希望排除的任何Lint检查以及自定义问题严重级别。
  • Lint工具
    您可以从命令行或在Android Studio中对Android项目运行此静态代码扫描工具(请参阅手动运行检查).Lint工具检查可能影响Android应用质量和​​性能的代码结构问题。强烈建议您先纠正Lint检测到的任何错误再发布应用。
  • Lint检查结果
    您可以在控制台或Android Studio的检查结果窗口中查看Lint检查结果。请参阅手动运行检查。

从命令行运行Lint

要对项目目录中的文件列表运行Lint,请使用以下命令:

lint [ flags ] < 项目目录> 

例如,你可以发出以下命令,扫描myproject目录及其子目录中的文件。问题ID 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:  tag appears after  tag [ManifestOrder]
  
  ^
AndroidManifest.xml:23: Warning:  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]
  
  ^
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

以上输出显示没有任何错误,但列出四个警告,其中三个警告(ManifestOrder,UsesMinSdkAttributes和UnusedResources)出现在项目的AndroidManifest.xml文件中,一个警告(IconMissingDensityFolder)出现在Preferences.xml布局文件中。

通过Gradle运行Lint
如果项目包含构建变体,您可以在项目的根目录下输入以下命令之一,使用Gradle包装器对所有变体调用lint任务:

  • 在Windows上:
    gradlew lint
  • 在Linux或Mac上:
  • ./ gradlew lint

然而,您如果只想为特定构建变行业释义体育运行lint任务,必须您变大写名称行业释义体育在并其前面加上lint前缀。

gradlew lintDebug

Lint工具完成其检查后,Lint报告会提供两个路径,分别指向该报告的XML和HTML版本。要了解有关从命令行运行Gradle任务的更多信息,请参见从命令行构建您的应用。

配置Lint

默认情况下,在运行Lint扫描时,该工具会检查Lint支持的所有问题。您也可以限定Lint要检查的问题并为这些问题分配严重级别。例如,您可以禁止Lint检查与项目无关的特定问题,也可以将Lint配置为在报告中降低非关键问题的严重级别。

您可以配置不同级别的Lint检查:

  • 全局(整个项目)
  • 项目模块
  • 生产模块
  • 测试模块
  • 打开的文件
  • 类层次结构
  • 版本控制系统(VCS)范围

在Android Studio中配置Lint

在您使用Android Studio时,内置的Lint工具会检查您的代码。您可以通过以下两种方式查看警告和错误:

  • 代码编辑器中的弹出文本.Lint发现问题后,会用黄色突出显示有问题的代码,而对于更严重的问题,则会在代码下面添加红色下划线。
  • 在Lint的Inspection Results 窗口中,点击 Analyze > Inspect Code。请参阅手动运行检查。

配置Lint文件

您可以在lint.xml文件中指定Lint检查首选项。如果您是手动创建此文件,请将其置于Android项目的根目录。

lint.xml由文件的封闭父标记组成,标记此所有游戏一个或多个子元素.Lint每个为定义唯一的id属性值。


    
        

您可以在标记中设置严重级别属性,以更改某个问题的严重级别或禁止Lint查看此问题。

提示:如需查看Lint支持的问题及其对应的问题ID的完整列表,请运行lint --list命令。

Lint.xml文件示例

例下显示了lint.xml文件的内容。



    
    




    




配置Lint对Java和XML源文件的检查

您可以禁止Lint检查Java和XML源文件。

提示:您可以在默认首选项对话框中管理Lint检查Java或XML源文件的功能。选择文件>其他设置 > 默认设置,然后在默认首选项对话框的左侧窗格中选择编辑器>检查。

配置Lint对Java的检查
要在Android项目中特别禁止Lint检查某个Java类或方法,请向此Java代码添加**@SuppressLint**注解。

下例说明了可以如何对onCreate方法中的NewApi问题关闭Lint检查.Lint工具会继续检查该类的其他方法中的NewApi问题。

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

下例说明了如何对FeedProvider类中的ParserError问题关闭Lint检查:

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

要禁止检查Java文件中的所有Lint问题,请使用如下all关键字:

@SuppressLint("all")

配置Lint对XML的检查
您可以使用tools:ignore属性禁止Lint检查XML文件的特定部分。在lint.xml文件中添加以下命名空间值,以便Lint工具能识别此属性:

namespace xmlns :tools = “http://schemas.android.com/tools”

下例说明了可以如何禁止Lint检查XML布局文件的元素中的UnusedResources问题。如果某个父元素声明了ignore属性,则该元素的子元素会继承此属性。在本例中,也会禁止Lint检查子元素。



    

要禁止检查多个问题,请使用以逗号分隔的字符串列出要禁止检查的问题例如:

tools:ignore="NewApi,StringFormatInvalid"

要禁止Lint检查XML元素中的所有问题,请使用如下all关键字:

tools:ignore="all"

通过Gradle配置Lint选项

通过适用于Gradle的Android插件,您可以使用模块级build.gradle文件中的块配置某些Lint选项,例如要执行或忽略哪些检查。以下代码段显示了您可以配置的部分属性: lintOptions {}

android {
  ...
  lintOptions {
    // Turns off checks for the issue IDs you specify.
    disable 'TypographyFractions','TypographyQuotes'
    // Turns on checks for the issue IDs you specify. These checks are in
    // addition to the default lint checks.
    enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
    // To enable checks for only a subset of issue IDs and ignore all others,
    // list the issue IDs with the 'check' property instead. This property overrides
    // any issue IDs you enable or disable using the properties above.
    check 'NewApi', 'InlinedApi'
    // If set to true, turns off analysis progress reporting by lint.
    quiet true
    // if set to true (default), stops the build if errors are found.
    abortOnError false
    // if true, only report errors.
    ignoreWarnings true
  }
}


手动运行检查
您可以选择Inspect Code> Analyze,手动运行已配置的Lint和其他IDE检查。检查结果显示在检查结果窗口中。

设置检查范围和配置文件
选择您要分析的文件(检查范围)和您要运行的检查(检查配置文件),具体操作如下:

在Android的视图中,打开项目并选择此项目以及您要分析的文件夹或文件。
从菜单栏选择Analyze> Inspect Code。
在指定检查范围对话框中查看设置。指定检查范围
图2.查看检查范围设置

取决于所选的是项目,文件夹还是文件,指定检查范围对话框中显示的选项组合可能不尽相同。您可以通过选择其他单选按钮之一,更改检查的内容。在指定检查范围对话框中查看指定检查范围对话框上可能出现的所有字段的描述。

在您选择一个项目,文件或目录时,指定检查范围对话框显示选定项目,文件或目录的路径。
在您选择多个项目,文件或目录时,指定检查范围对话框会在选中的文件旁边显示选中状态的单选按钮。
在Inspection Profile中,保留默认的配置文件(项目默认)。
点击OK以运行检查。图3显示了通过运行Inspect Code所生成的Lint和其他IDE检查结果:

图3.选择问题以查看其解决方法

在左侧窗格树形视图中,通过展开并选择错误类别,类型和问题,查看检查结果。
右侧窗格显示所选错误类别,类型或问题的检查报告,并提供错误的名称和位置。在适用情况下,检查报告会显示问题摘要等其他信息,以帮助您纠正问题。

在左侧窗格树形视图中,右键点击某个类别,类型或问题,显示上下文菜单。
取决于上下文,您可以执行以下全部或部分操作:跳到源文件,排除和包含选定项,消除问题,编辑设置,管理检查警报和重新运行检查。

如需左侧工具栏按钮,上下文菜单项和检查报告字段的描述,请参阅检查工具窗口。

使用自定义范围
您可以按如下方法使用Android Studio中提供的自定义范围之一:

在指定检查范围对话框中,点击自定义范围。
点击自定义范围下拉列表,以显示选项。
选择检查范围

图4.选择您要使用的自定义范围

Project Files:当前项目中的所有文件。
Project Production Files:仅限当前项目中的生产文件。
Project Test Files:仅限当前项目中的测试文件。请参阅测试类型和位置。
打开文件:仅限当前项目中已打开的文件。
Module :仅限当前项目中对应模块文件夹中的文件。
当前文件:仅限当前项目中的当前文件。在您已选择文件或文件夹时显示。
Class Hierarchy:选择此选项并点击OK,会出现一个对话框,其中显示当前项目中的所有类。使用此对话框中的按名称搜索字段过滤并选择要检查的类。如果未过滤类列表,代码检查将检查所有类。
点击确定。
创建自定义范围
如果您要检查的部分文件和目录不在当前可用的任何自定义范围内,您可以创建自定义范围。

在指定检查范围对话框中,选择自定义范围。
点击自定义范围下拉列表后面的三个点。

图5. “指定检查范围”对话框

此时将显示作用域对话框。

图6.创建自定义范围

点击添加 定义新的范围。
在随之弹出的Add Scope下拉列表中,选择Local。
本地范围和共享范围可在项目内部用于Inspect Code功能。共享范围还可用于其他具有范围字段的项目功能。例如,在您点击编辑设置 更改查找用法的设置时,随之弹出的对话框会显示一个范围字段,您可以在其中选择共享范围。

图7.从查找用法对话框选择共享范围

为范围命名并点击OK。
作用域对话框的右侧窗格包含可用于定义自定义范围的选项。

从下拉列表中选择项目。
此时将显示可用的项目列表。

注:您可以为项目或软件包创建自定义范围它们的步骤相同。

展开项目文件夹,选择您要添加到自定义范围中的项,然后点击右侧的按钮之一。

图8.定义自定义范围

包括:包含此文件夹及其文件,但不包含其子文件夹中的任何文件。
包括递归:包含此文件夹及其所有文件,以及子文件夹及其中的文件。
排除:排除此文件夹及其文件,但不排除其子文件夹中的任何文件。
递归排除:排除此文件夹及其所有文件,以及子文件夹及其中的文件。
图9显示包含主要文件夹,并且递归包含java文件夹。蓝色表示部分包含的文件夹,而绿色表示递归包含的文件夹和文件。

图9.自定义范围的示例图

如果您选择java文件夹并点击排除递归,java文件夹及其中的所有子文件夹和文件将不再用绿色突出显示。
相反,如果选择您绿色用突出显示的MainActivity.java文件并点击“排除”,MainActivity.java将不再用绿色突出显示,而Java的文件夹中的其他所有项目则用绿色突出显示。
点击OK。自定义范围显示在下拉列表的底部。
查看和编辑检查配置文件
Android Studio附带多种Lint及其他检查配置文件,可通过Android更新来更新此类配置文件。您可以原封不动地使用这些配置文件,也可以编辑它们的名称,描述,严重级别和范围。可以激活和停用全部配置文件组或一组配置文件中的个别配置文件。

要访问检查对话框,请:

选择分析>检查代码。
在指定范围对话框中的检查配置文件下面,点击更多。
此时将显示检查对话框,其中列出了一系列支持的检查及其描述。

图10.支持的检查及其描述

选择配置文件下拉列表,在默认(Android Studio)和项目默认(活动项目)检查项目之间切换。如需了解详细信息,请参阅此IntelliJ 指定检查范围对话框页面。
在左侧窗格的检查对话框中,选择最上面的配置文件类别,或展开一个组,选择特定配置文件。选择一种配置文件类别后,您可以将此类别中的所有检查项目当作一个检查项目进行编辑。
选择管理下拉列表,以复制,重命名,将描述添加至,导出和导入检查项目。
操作完成后点击确定。

你可能感兴趣的:(使用Lint改进您的代码)