为了测试你的Android应用符合功能需求。最重要的是确保你的代码没有结构性问题。结构差的代码影响你的Android应用的可靠性,让你的代码难以维护。比如,如果你的XML资源文件包含未使用的明明空间,这会花费空间和不必要的进程。其他机构行问题,比如是哟个过时的API调用,如果设备API版本不兼容,可能导致运行失败。

概览

Android Studio提供了一个称为Lint的代码扫描工具,可以非常容易的帮你辨别和纠正代码的结构性质量问题,而无须你执行app或者编写测试用例。工具检测到的每个错误都会标明严重程度一个描述信息,这样你就可以迅速的确定优先级。你也可以将在你项目中无关紧要的错误进行忽略。这个工具有相应的命令行接口,所以你可以非常容易的整合到你的测试进程中。

Lint工具通过检测你的Android项目源代码来发现潜在的bug并提供代码优化建议。你可以从命令行或者Android Studio中运行Lint。

Application 源文件(Application source files)

源文件包含组成你的Android项目的文件,包含Java和XML文件、图标和ProGuard配置文件。

Lint.xml文件

配置文件,用于配置你想忽略的问题,或者更高问题的严重级别。

Lint工具

你可以通过命令行或者Android Studio运行在你的Android项目上的静态代码扫描工具。Lint工具检测影响你的Android应用的质量和性能的代码结构性问题。强烈建议在发布你的应用之前修复Lint检测到的任何问题

Lint检测结果

你可以在Android Studio的Event Log中来查看Lint的结果(或者在命令行中)。

Lint工具作为Android SDK工具的一部分(>=16)。

在Android Studio中运行Lint

在Android Studio中,当你构建你的app时,Lint自动运行。

在Android Studio中你可以在android设置中添加lintOptions属性。如下:

android {
lintOptions {
// 设置为true会关闭lint分析进度
quiet true
// 如果为true,则在发现错误时停止gradle构建
abortOnError false
// 如果为true,则只报告错误
ignoreWarnings true
}
}

命令行运行Lint

运行lint检测项目:

lint [flags] <project directory>

检测项目的某个错误,以下这个用于检测Android命名空间前缀:

lint --check MissingPrefix myproject

查看lint帮助,可用:

Lint输出示例

接下来展示lint检测一个Earthquake的项目输出的信息:

$ 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

配置lint

默认情况下,当你运行一个扫描的时候,会检测Lint支持的所有的issue。你可以禁止Lint检测某个issue或者设置issue的安全级别。

你可以在不同级别来配置Lint检测:

1、 全局,针对整个项目

2、 每个项目模块

3、 每个测试模块

等等。

在Android Studio中配置Lint

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

1、 代码编辑器中,当Lint发现错误之后,会黄色高翔显示问题代码。

2、 选择Analyze > Inspect Code,打开Lint Inspection Results。

设置默认Lint检测:

1、 在Android Studio中,打开你的项目。

2、 选择File > Other Settings > Default Settings

3、 选择Editor > Inspections,打开Default Preferences对话框。

4、 在Profile中,选择Default或者Project Default。

5、 根据需要更改Lint设置。

6、 点击OK。

将Lint检测显示在Inspection Results窗口:

1、 在Android Studio中,打开项目,选择你要测试的部分

2、 选择Analyze > Inspect Code

3、 在Specify Inspection Scope对话框中,选择需要测试的部分

4、 点击OK。

结构将根据分类显示在Inspection Results窗口。

配置Lint文件

你可以在lint.xml文件中声明Lint检测参数。如果你手动创建这个文件,将它放在你的Android项目的根目录。如果你在Android Studio中配置你的Lint参数,lint.xml自动生成并添加到你的项目中。

Lint.xml 文件包含一个父标签,包含一个或多个标签。如下:

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

通过设置标签,你可以禁用Lint检测某个issue或者更高某个issue的级别。

注意:查看lint支持的issue列表,可以运行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检测

在Java中配置lint检测

为了在你的Android项目中指定的类或方法中金庸Lint检测,在Java代码中添加@SupprewwLint注解。

接下来的示例显示在OnCreate方法中如何关闭Lint检测,Lint工具在其他方法中继续检测NewApi issue。

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

下面的示例显示如何关闭ParserError issue:

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

在Java文件中禁止所有Lint检测,如下:

@SuppressLint("all")

在XML中配置Lint检测

在XML文件中,你可以使用tools:ignore属性来金庸Lint检测。为了使相关属性被Lint工具识别,必须添加如下命名空间到你的XML文namespace xmlns:tools=http://schemas.android.com/tools下:

<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>

禁用多个issue,如下:

tools:ignore="NewApi,StringFormatInvalid"

禁用所有的issue 检测,如下:

tools:ignore="all"

本文作者:宋志辉

个人微博:点击进入

2.1、Android Studio通过Lint提升你的代码的更多相关文章

  1. Android studio Debug效率提升

    Android studio Debug效率提升,可以在控制台打印log的同时而不暂停程序的运行,尤其是当遇到复杂交互的时候,比如滑动,拖动,这时候程序暂停执行是特别恶心的.其实你可以更新打印信息而不 ...

  2. Android课程---Android Studio使用小技巧:提取方法代码片段

    这篇文章主要介绍了Android Studio使用小技巧:提取方法代码片段,本文分享了一个快速复制粘贴方法代码片段的小技巧,并用GIF图演示,需要的朋友可以参考下 今天来给大家介绍一个非常有用的Stu ...

  3. 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)

    上篇文章:如何将Android Studio与华为软件开发云代码仓库无缝对接(一) 上一章讲了,如何用Android Studio以软件开发云代码仓库为基础,新建一个项目.接下来,这一章继续讲建好项目 ...

  4. 2.2、Android Studio通过注解提升代码检测

    使用像Lint这样的代码检测工具可以帮助你发现问题和提升代码,但是代码检测在有些地方很难应用.例如,Android的资源ID,使用一个int类型来表示字符.图像.颜色或者其他资源类型所以代码检测工具不 ...

  5. Android Studio使用Lint进行代码检查

    Android Studio目前已经更新到1.4版本,它作为Google官方推荐的IDE,功能非常强大,其中提供了一套静态代码分析工具,它可以帮助我们检查项目中存在的问题,让我们更有规范性的开发App ...

  6. android studio学习---Lint工具

    对代码进行测试是一回事,但同样重要的是.我们还需要在编写代码的同时引入各种最佳实践.这不仅能够显著改进性能表现,也能增加应用程序的整体稳定性.另外,经过合理结构调整的项目在维护方面也更为轻松. And ...

  7. Android Studio如何设置自己主动提示代码

    同Eclipse时间,您可以设置,无论你是设置输入不管什么信,可以提示码,在Android Studio也可以 设置.并且比Eclipse设置来的简单. 当然假设你认为代码自己主动提示会减少你的代码水 ...

  8. Android Studio发布项目到jcenter,一行代码引入Module

    前面我们使用自己封装的okhttp项目时候,只需要app/build.gradle文件中加一行代码就能使用项目. compile 'com.ansen.http:okhttpencapsulation ...

  9. Android Studio 之 项目瘦身、代码检查

    项目瘦身, 一.删除没有用到的资源(图片,string 等等) 先看怎么样找到没有用到的资源,注意:注释掉的 也属于没有用到的. 1.进行代码分析操作 2.查看分析结果 3.选择 Unused res ...

随机推荐

  1. bzoj 2594: [Wc2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  2. hdu 5115(2014北京—dp)

    题意: 有一排狼,每只狼有一个伤害A,还有一个伤害B.杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和.如果某位置的狼被杀,那么杀它左边的狼时就会收到来自右边狼的B,因为这两只狼是相 ...

  3. Tenka1 Programmer Contest D - IntegerotS

    Problem Statement Seisu-ya, a store specializing in non-negative integers, sells N non-negative inte ...

  4. glusterfs 4.0.1 rpc 分析笔记1

    Jimmy的文档:Glusterfs的rpc模块分析 第一节.rpc服务器端实现原理及代码分析 第二节.rpc客户端实现原理及代码分析 第三节.rpc通信过程分析 经过阅读源码对比之前提及的文档,我个 ...

  5. 清空dataset中的某行某列的数据

    string tempSFZH = ""; foreach (DataRow rs in ds.Tables[0].Rows) {     tempSFZH = rs[ht[&qu ...

  6. ASP.NET Core部署到Windows IIS

    网上已经有许多ASP.NET Core关于Widows IIS部署的文章,在部署到服务器时遇到了一些问题,在这里我就不再对原理进行阐释(复制)了,只写下一些关键环节,想看原理的同学请参考官网,此文章作 ...

  7. PLSQL(1)

      PLSQLl编程                       plsql是Oracle在标准的sql语言上的扩展 特点:可以在数据库中定义变量,常量,还可以使用条件语句和判断语句以及异常等   P ...

  8. SSM框架原理,作用及使用方法(非原创)

    原帖:地址https://blog.csdn.net/bieleyang/article/details/77862042 如有侵权请联系删除 作用: SSM框架是spring MVC ,spring ...

  9. php序列化漏洞理解

    0x01什么是序列化 序列化就是将我们的 对象转变成一个字符串,保存对象的值方便之后的传递与使用. 0x02为什么要序列化 如果为一个脚本中想要调用之前一个脚本的变量,但是前一个脚本已经执行完毕,所有 ...

  10. 【kmp】 剪花布条 HDU - 2087

    [题意概述] [解题思路] 从左往右找,看有几个匹配的字符串,但要注意例如 aaaaaa  aa的输出是3 而不是5,可以这样理解:画布需要减去,一旦减去也就没有了的 [AC] #include< ...