除了测试 Android 的应用程序是否满足功能要求外,确定你的代码没有结构问题也相当重要。代码架构不完善会影响 Android 应用程序的可靠性和运行效率,同时也会使代码更难维护。比如, 如果你的XML资源包含未使用的命名文件,这不仅占用了空间,还会招致不必要的处理工作。其他的结构问题,如使用过时代码,或者使用了不被目标 API 版本支持的 API 调用,这都可能会导致代码无法正确运行。
|
概览Android Studio 提供了一款名叫 Lint 的代码扫描工具,它可以帮助你轻松识别并纠正你的代码结构质量问题,而且并不需要运行app或编写测试用例。该工具检查到的每个问题都会生成一份包含描述信息和严重等级的报告,因此你可以快速优先处理需要做的紧急改进。你还可以配置一个问题的严重程度以忽略与你项目不相关的问题,或提升严重级别。这个工具有一个命令行接口,因此你可以轻易将它集成到你的自动测试进程中。 Lint 工具为潜在的bug和优化改进会检查你的Android项目代码文件中的正确性、安全性、性能、可用性、可访问性以及国际化。你可以从命令行或Android Studio中运行Lint。 注意:在Android Studio中,当你的代码在Android Studio中编译时额外的IntelliJ code inspections会运行以简化代码审查。 |
图1展示了Lint工具是如何处理应用程序的源代码文件的。
图1、 Lint工具的代码扫描工作流程
Lint 工具是作为 Android SDK工具版本16或者更高版本的一部分,已经自动被安装好了的。 |
在 Android Studio 中运行Lint
|
1
2
3
4
5
6
7
8
9
10
11
|
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 中手动运行检查的话,可以从 application 或者 鼠标右键出现的菜单入手,选择 Analyze > Inspect Code 就可以了。这样会出现一个指定检查范围(Specify Inspections Scope)对话框,这样你就可以指定想要进行检查的范围和方面了。
每次检查的结果都会显示在检查工具窗口中。你可以通过将鼠标悬停在一个检查的错误上来显示内联的错误概要信息, 或者通过选定它来展示出错误完整的问题描述信息。
从命令行运行 lint
|
1
|
lint [flags] <project directory> |
例如,你可以输入如下命令来扫面 myproject 路径及其子路径下的文件。问题ID MissingPrefix 会告诉 Lint 只扫描那些丢失了 Android 命名空间前缀的 XML 属性。
1
|
lint --check MissingPrefix myproject |
要查看工具所支持的标识和命令行参数清单,使用如下命令:
1
|
lint --help |
lint 输出示例
下面的示例展示了 Lint在针对一个叫做 Earthquake 的工程运行时,控制台的输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ 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 |
上面的输出列明了这个工程有个四个警告,没有错误。三处警告(ManifestOrder, UsesMinSdkAttributes, and UnusedResources)是在工程的 AndroidManifest.xml文件中找到的。剩下的这处警告(IconMissingDensityFolder)是在 Preferences.xml 布局文件中找到的。
对 lint 进行配置
默认情况下,当你运行 Lint 扫描时,工具会检查所有 Lint 支持扫描的问题。你也可以限制 Lint 只对哪些问题进行检查,并制定这些问题的严重级别。例如,你可以不让 Lint 去检查哪些跟你的工程没多大关系的问题,还可以不让 Lint 报告那些严重级别较低的不怎么重要的问题。
你可以在不同的级别上对 Lint 检查进行配置:
-
全局地,针对整个工程
-
每个工程模块
-
每个生产模块
-
每个测试模块
-
每个打开的文件
-
每个类层级
-
每个版本控制系统(VCS)范围内
在 Android Studio 中对Lint进行配置在你使用的是Android Studio时,其内置的 Lint 工具会对你的代码进行检查。你可以使用两种方式来查看警告和错误信息:
要对默认的 Lint 检查进行设置的话:
要制作一份 Lint 检查的列表显示在检查结果(Inspection Results)窗口的话:
检查结果会按类型组织在一起显示在检查结果(Inspection Results)窗口中。 |
对 lint 文件进行配置
|
1
2
3
4
|
<? xml version = "1.0" encoding = "UTF-8" ?> < lint > <!-- list of issues to configure --> </ lint > |
通过在 <issue>标记中的severity 进行设置,你可以不让 Lint 对某个问题进行检查,或者修改一个问题的严重等级。
提示: 想要查看 Lint 工具所支持的问题的完整清单及其对应的问题ID的话,可以运行 lint --list 命令。
示例 lint.xml 文件
下面的示例显示了一个 lint.xml 文件的内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<? 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 功能来管理对 Java 和XML 源代码文件的 Lint 检查。
在 Java 中配置 lint 检查
要在 Android 工程中将针对一个 Java 类或者方法的 Lint 检查禁用的话,向 Java 代码添加 @SuppressLint 注解就行了。
下面的示例展示了你如何才能够将 onCreate 方法中针对 NewApi 问题的 Lint 检查关闭掉。Lint 工具还是会在这个类的其它方法中对 NewApi 问题进行检查。
1
2
3
|
@SuppressLint ( "NewApi" ) @Overridepublic void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); |
下面的示例显示了如何去关闭针对 FeedProvider类中的 ParserError 问题的 Lint 检查:
1
|
@SuppressLint ( "ParserError" ) public class FeedProvider extends ContentProvider { |
要限制在 Java 文件中针对所有 Lint 问题的检查,可以像下面这样使用 all 关键词:
1
|
@SuppressLint ( "all" ) |
在 XML 配置 lint 检查
你可以使用 tools:ignore 属性将针对 XML 文件特定区域的 Lint 检查禁用掉。为了让 Lint 工具认出这个属性,如下所示的命名空间必须被引入到你的 XML 文件中:
1
|
namespace xmlns:tools="http://schemas.android.com/tools" |
下面的示例展示了你如何才能够将针对一个 XML 布局文件中的 <LinearLayout>元素的 UnusedResources 问题的 Lint 检查禁用掉。ignore 属性会由在其中声明了该属性的父元素其下的子元素所继承。在这个实例中,对于子元素 <TextView> 而言, Lint 检查也是被禁用的。
1
2
3
4
5
6
|
< 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 > |
要禁用多个问题,可以在一个逗号分隔的字符串中把问题都列出来。例如:
1
|
tools:ignore="NewApi,StringFormatInvalid" |
要在一个XML元素中限制对所有 Lint 问题的检查,可以像下面这样使用 all 关键词:
1
|
tools:ignore="all |
本文转自:开源中国社区 [http://www.oschina.net]
本文标题:用 Lint 优化您的代码
本文地址:https://www.oschina.net/translate/improve-your-code-with-lint
参与翻译:leoxu, 达尔文, 局长, chengsu
英文原文:Improve Your Code with Lint