前言

我们在进行代码优化的时候,往往是通过开发者的经验来判断哪些代码可能存在潜在问题,哪些资源的使用不合规范等。实际上Android SDK提供了一款功能非常强大的工具,来帮助开发者自动检测代码的质量及安全问题,这款工具就叫Android Lint。Lint提供了命令行方式以及与IDE集成的方式来执行,现在Android开发者基本上都使用Android Studio(后文简称AS,下同)来进行开发,强大的AS也集成了该工具,本文就基于AS3.2版本来介绍Lint。

一、Android Lint简介

Android Lint是SDK Tools 16(ADT16,当前笔者使用的ADT已经是26了,所以现在就不用担心自己所使用的SDK中不包含lint工具了)开始引入的一个代码扫描工具,路径为:Sdk\tools\bin\lint.bat。通过它对Android工程源代码进行扫描和检查,可发现潜在的问题,以便程序员及早修正这个问题。通过Lint,无需实际执行应用,也不必编写测试用例,就可以检查Android项目中源文件是否存潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。

二、Lint的工作原理

会使用Lint了,可以简单了解一下它的原理,即工作过程。Android Lint 的工作过程比较简单,一个基础的 Lint 过程由 Lint Tool(检测工具),Source Files(项目源文件) 和 lint.xml(配置文件) 三个部分组成,Lint Tool 读取 Source Files,根据 lint.xml 配置的规则(issue)输出结果(如下图)。

三、Lint在AS中的使用

由于现在Lint是直接集成到AS中的,所以可以直接使用,无需再安装。

1、Lint的启动

Lint在Android Studio中的使用步骤非常简单,有两条途径可以启动Lint:

(1)从主菜单栏中启动

点击主菜单 > Analyze > Inspect Code会弹出检查范围选择对话框

  

该对话框用于选择要检查的范围,根据实际需要选择即可。其中选择“Custom scope”时可以自定义检查范围,

选择好检查范围后,点击“OK”后,Lint就开始启动了,AS界面的底部会表示正在运行中,稍等一会儿就能看到检查结果了。

(2)通过右键菜单启动

在AS界面文件或编辑界面点击右键,在弹出的菜单中也可以看到“Analyze  > Inspect Code”选项,后面就和上面的方法一样了,这里不再赘述。

2、查看检查结果

检查完成后会可以看到如下界面板了:

在这个面板中,“Lint检查结果区”展示的就是通过Lint工具检查出来的结果。当点击这些结果中的问题项时,可以在右边看到该类问题或者具体问题的详情,然后自动完成修改或者根据对问题的描述手动修改。

3、结果面板功能说明

上述结果面板从左到右可以分为三个大区域:工具栏,结果区和问题详情区。

(1)工具栏

工具栏中提供了多个常用的功能,把鼠标移到图标上时会给出相应的提示,这里对部分按钮进行说明:

1)图中①处,Group By Serverity:检查结果按照问题严重程度分组。

2)图中②处,Group By Directory:检查结果按照目录分组。

3)图中③处,Filter resolved items:过滤掉已经解决的问题项。

4)图中④处,Export:导出为HTML或者XML文档。

5)图中⑤处,Edit Settings:编辑设置,通过这里可以对Lint进行设置,后面会详细介绍。

6)图中⑥处,Apply a quickfix:快速修复,点击这里可以直接对所选问题进行快速修复。

(2)检查结果区

由于这里检查代码不仅仅只有Lint在工作,还有很多其它插件也在执行,所以结果中有很多其它工具检查出来的问题,Android > Lint下面的目录就是Lint的结果区了。如果展开Lint的结果,会发现这些问题都是Android所特有的问题,比如布局文件、控件、AndroidManifest文件中的问题,可见Lint就是为Android而量身定做的。默认时这些结果是按照一定的分类来分组的,比如,Correctness、Performance、Security等,这问题类型是否需要检查,也是在设置中设置的,后面会详细介绍。当然通过这个结果区还可以看到Java、Kotlin、Spelling等的问题,也一样解决。

(3)问题详情区

如果鼠标在结果区选择的是某一类问题,这部分显示了所选问题的详情,解决建议,以及快速修复等功能。其中“Run inspection on”按钮,点击后会弹出如下对话框:

这里选择在哪个范围内检查同类问题。

如果在结果区选择的是具体的问题项,那么右边显示的就是对问题所在的位置进行预览。如下图所示:

通过上面的介绍,可以看到Lint的基本使用还是比较简单的。

四、对Lint进行设置

1、进入设置界面的两种方式

有两种途径可以进入到Lint的设置界面:

(1)File > Settings > Editor > Inspections;

(2)Lint控制面板工具栏的设置按钮,即第二节中的按钮⑤。

2、设置面板预览

3、设置项功能介绍

设置界面中的各个区域和按钮的功能都在图中标注了,这里再对按钮①和按钮②进行说明。

(1)筛选按钮

这是一个下拉框,通过该处可以筛选要显示的功能项。

(2) 问题严重等级设置

 

下拉列表,会显示可以自定义的等级及对应颜色,可以通过此处编辑选择项的严重等级。点击“Edit severities”可以添加新的严重等级,以及编辑各等级德颜色和字体。当然,系统默认的问题严重性等级和这里略有区别,系统默认的严重等级由高到低依次为:Fatal、Error、Warning、Information、Ignore 5个等级。

五、Lint问题种类

从设置面板中可以看到,问题可以分为如下几个大类:

(1)Accessibility 辅助选项,比如ImageView的contentDescription往往建议在属性中定义等。

(2)Compliance 合规性,违反了Google Play的要求,比如使用了过期的库版本,性能、安全性、API等级等没有遵循新系统的要求等。

(3)Correctness 不够完美的编码,比如硬编码、使用过时API等。

(4)Internationalization 国际化,直接使用汉字,没有使用资源引用等

(5)Interoperability 互操作性,比如和Kotln的交互等。

(6)Performanc 对性能有影响的编码,比如:静态引用,循环引用等

(7)Security 不安全的编码,比如在 WebView 中允许使用 JavaScriptInterface等

(8)Usability 可用的,有更好的替换的 比如排版、图标格式建议.png格式等

六、根据规则名称来检查

有时候我们需要明确检查某一类问题,比如查找项目中没有使用的资源,并将它们删除,它们会耗性能。可以通过如下的方式来找到这些没有使用的资源:点击Analyze > Run Inspection By Name,会弹出对话框

输入该规则的名称,按“Enter”键,提示选择检查范围:

点击“OK”按钮,结果中只会显示“Unused resoures”的问题项目:

该功能能帮我们明确定位某一类问题。

七、自定义Lint

对于多数情况,默认的Lint已经足够使用了,但总有一些需求是Lint自带规则不能满足的,这个时候就需要自定义Lint规则了。当然,限于笔者对Liint的使用经验有限,对自定义Lint还不太熟悉,这里推荐一篇文章,有兴趣的可以深入研究:

自定义Lint实践https://blog.csdn.net/ouyang_peng/article/details/80374867

参考:

https://blog.csdn.net/luzhenyuxfcy/article/details/79398761

http://tools.android.com/tips/lint

https://developer.android.google.cn/studio/write/lint

https://blog.csdn.net/hudashi/article/details/8333349

https://www.jianshu.com/p/9eaf7c0eee67

结语

本文只介绍了Android Lint常见的一些使用方法,一定还有很多很牛的功能,希望读者们多多探索,多多交流,共同进步,谢谢!

【工利其器】Android Lint篇——为Android量身定做的静态代码审查工具的更多相关文章

  1. "浅谈Android"第一篇:Android系统简介

    近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

  2. 【工利其器】必会工具之(二)Android开发者官网篇

    前言 当刚开始踏入Android程序员这个行业的时候,想必绝大多数的人都和笔者一样,热血沸腾,激情四射,买了很多讲解Android开发的书籍.当开发某个功能需要学习某方面知识的时候,大家又成了“面向百 ...

  3. 【工利其器】必会工具之(三)systrace篇(1)官网翻译

    前言 Android 开发者官网中对systrace(Android System Trace)有专门的介绍,本篇文章作为systrace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续 ...

  4. 【工利其器】必会工具之(三)systrace篇(2)

    systrace工具打开路径 以AndroidStudio(后面简写为AS),在顶部菜单栏中 Tools>Android>Android Device Monitor 打开后看到如下界面, ...

  5. 【工利其器】必会工具之(一)Source Insight篇

    前言         “Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”,所以不敢说SI是最好的,但是 ...

  6. [android开发篇]安装android sdk的时候请注意

    第二就是: 如果要国内镜像的话: 3.大连东软信息学院镜像服务器地址: http://mirrors.neusoft.edu.cn  端口:80 随便选择一个就行啦.这里我选择的是第三个站点,即大连东 ...

  7. 【入门篇】ANDROID开发之BUG专讲

    话说诸葛亮是一个优秀的程序员,每个锦囊都是应对不同的case而编写的.可是优秀的程序员也敌只是更优秀的bug.六出祈山.七进中原,鞠躬尽瘁,死而后已的诸葛亮仅仅由于有一个错误的case-马谡,整个结构 ...

  8. Android代码优化工具——Android lint

    作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常 ...

  9. Android Lint——内嵌于Android Studio的代码优化工具

    Android Lint工具是Android Studio 自带的静态代码工模具,Android Lint是专门针对Android 定制的检查规则,因此可以检查出很多Android特有的代码缺陷.建议 ...

随机推荐

  1. Android NDK(一) ndk-build构建工具进行NDK开发

    本文目录 一.androidstudio环境 二.快捷键配置 三.新建项目 四.NDK开发 五.so文件编译 一. androidstudio的环境 在SDK Tools中安装NDK开发环境(File ...

  2. asp.net core learn

    .NET Core WebApi RESTful规范 RESTful API 最佳实践 理解RESTful架构 接口版本控制 Support multiple versions of ASP.NET ...

  3. 02-13 Softmax回归

    目录 Softmax回归 一.Softmax回归详解 1.1 让步比 1.2 不同类之间的概率分布 1.3 目标函数 1.4 目标函数最大化 二.Softmax回归优缺点 2.1 优点 2.2 缺点 ...

  4. hihoCode 1075 : 开锁魔法III

    时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅 ...

  5. 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

    在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中.之所以 ...

  6. C#刷遍Leetcode面试题系列连载(4) No.633 - 平方数之和

    上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetCode 中的另一道数学题吧~ 今天要给大家分析的面试题是 LeetCode 上第 633 号问题, Leetcode 633 - 平方数 ...

  7. Jenkins部署(基于Linux)

    1.安装JDK  我不列出来了,自行百度 java -version 2.安装tomcat (1)创建目录tomcat8 (2)导入tomcat文件到tomcat8目录中并解压 (3)启动tomcat ...

  8. CSRF漏洞实战靶场笔记

    记录下自己写的CSRF漏洞靶场的write up,包括了大部分的CSRF实战场景,做个笔记. 0x01 无防护GET类型csrf(伪造添加成员请求) 这一关没有任何csrf访问措施 首先我们登录tes ...

  9. PHP array_fill_keys

    1.函数的作用:将一个数组的元素分别作为键值和一个指定的值组成新的数组: 2.函数的参数: @params array  $array @params mixed $values 3.例子: < ...

  10. 【Java必修课】ArrayList与HashSet的contains方法性能比较(JMH性能测试)

    1 简介 在日常开发中,ArrayList和HashSet都是Java中很常用的集合类. ArrayList是List接口最常用的实现类: HashSet则是保存唯一元素Set的实现. 本文主要对两者 ...