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 工具如何处理应用源文件。

注: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页管理检查属性和配置检查严重等级,它列出了支持的属性和检查。

注:检查配置

全局偏好设置

  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

时间: 2024-11-01 17:34:20

Improving Your Code with lint——使用lint改善你的代码的相关文章

《重构——改善既有代码的设计》读书笔记

重构--改善既有代码的设计 1 重构概述 1.1 重构的概念(What) Refactoring 名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本. 动词:使用一系列重构方法,在不改变软件可观察行为的前提下,调整其结构. 1.2 为什么要重构(Why) 改进软件设计 提高代码质量和可读性,使软件系统更易理解和维护 帮助尽早的发现缺陷 提高编程速度 1.3 何时重构(When) 何时重构: 1)随时随地进行. 2)三次法则:第一次做某件事只管去做:

【转】PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

原文地址: PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数 思维导图 点击下图,可以看大图. 介绍 我把我比较喜欢的和比较关注的地方写下来和大家分享.上次我写了篇<php 跟老大的对话>.还是有很多疑问,这书帮了我不少的忙. 如果你比较繁忙,或者懒得看文字,建议你直接看截图,也会有很大的收获的.你可以通过比较截图中的代码就能知道孰优孰劣了. 代码部分我为什么用图呢?因为我经常用手机看代码,博客园的代码在手机里乱七八糟的,还是看图比较舒服. 专业术语 我们毕竟是用英文

Supporting Python 3(支持python3)——使用现代的风格改善你的代码

使用现代的风格来改善你的代码 一旦你已经添加了Python 3的支持,你将改成使用Python的新的函数来改进的代码.Once you have added Python 3 support you have a chance to use the newer features of Python to improve your code. Many of the things mentioned in this chapter are in fact possible to do even b

《重构:改善既有代码的设计》——关于代码注释的唠叨

这几天在看<重构:改善既有代码的设计>英文评注版这本书,以前简单看过这本书,但并不是看的特别深入.经过了一段时间的"磨练",现在回来重新看这本书,又很多想法. 首先,这本书是一本好书,我感觉是软件工程师必看的一本书,而且如果有大量的编码经验看这本书会收获很大.这本书主要内容是代码重构. 在书中第3章中有这样一段话是用来描述代码注释的: A good time to use a comment is when you don't know what to do. In add

《重构&mdash;&mdash;改善既有代码的设计》【PDF】下载

<重构--改善既有代码的设计>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196358 编辑推荐 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码.多年前,正是<重构:改善既有代码的设计>原版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分.<重构:改善既有代码的设计>也因此成为与<设计模式>齐名的经典著作,被译为中.德.俄.日等众多语言,

重构改善既有代码

重构改善既有代码 第一次做某件事情的时候尽管去做,第二次做类似的事会产生反感,第三次再做类似的事,你就应该重构. 小型函数优美动人 一个类最好是常量类,任何的改变都是调用该类本身的接口实现. 0 坏代码的味道 1.重复代码 Duplicated Code 同一类中的两个函数含有相同的表达式,提取到方法 互为兄弟的子类含有相同表达式,将两个子类的相同代码提取方法推入超类 如果有相似代码,通过提炼方法将相似和差异部分分割开,并使用疏凿模板方法,并将模板方法上移到超类中. 如果两个毫不相关的类出现重复

每周一书-编写高质量代码:改善C程序代码的125个建议

首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10余年开发经验的资深C语言专家全面从C语法和C11标准两大方面深入探讨编写高质量C代码的技巧.禁忌和实践 C语言因为既具有高级语言特性,又具有汇编语言特性,所以它是近二十几年来使用较为广泛.生命力较强的编程语言.无论是操作系统.嵌入式系统.普通应用软件,还是移动智能设备开发,它都能够很好地胜任,是公认的强大的语

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作.减少bug处理.降低维护成本,对程序员自身的成长也是至关重要的.很难想象一个参考<如何编写无法维护的代码>写代码的程序员技术成长的上限有多么低.为了写出高质量的代码,我们需要听取过来人的改善代码质量的经验,<编写高质量代码:改善c程序代码的125个建议>就是一本能让人写出高质量代码的好书. 本书的第三章<程序控制语句应该保持简洁高效>首先用简练的语言介绍了流程控制结构的概念,然后提供了对if.else.for.do-while.swit

01重构_改善既有代码的设计阅读笔记之一

<重构_改善既有代码的设计>这本书介绍了重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善,每个重构都介绍了一种经过验证的代码变换手法的动机和技术. 重构,绝对是写程序过程中最重要的事之一.在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了.更何况,我们很少有机会从头到尾完成一个项目,基本上都是接手别人的代码,即使这个项目是从头参与的,也有可能接手其他组员的代码.我们都有过这样的经验,看到别人