【工利其器】Android Lint篇——为Android量身定做的静态代码审查工具

前言

我们在进行代码优化的时候,往往是通过开发者的经验来判断哪些代码可能存在潜在问题,哪些资源的使用不合规范等。实际上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常见的一些使用方法,一定还有很多很牛的功能,希望读者们多多探索,多多交流,共同进步,谢谢!

原文地址:https://www.cnblogs.com/andy-songwei/p/11832280.html

时间: 2024-11-05 19:37:11

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

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

近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的学习,知识杂乱无章,没有条理和总结.因此,想想我是否可以尝试的写些文章,来对自己之前学过的知识和工作经验进行归纳和整理,整理出自己的知识体系呢.所以,就有这篇文章的诞生,如果其中理解不到位的地方,望园里的兄弟姐妹给予指出错误,我们共同讨论,一起进步.我一直相信一句话,好东西要分享,不断地分享,直至温暖整个世界

Android系统篇之----Android中的智能指针

一.前言 今天我们开启Android系统篇的文章了,其实一直想弄,只是之前一直没有太多深入的了解,最近又把这块拿出来好好看了一下,所以想从新梳理一下,来看看Android中的这块知识,首先我们今天来看一下:Android中的智能指针的概念,为什么说先看一下智能指针这个知识呢?因为我们在看Android源码的时候,会发现几乎好多地方都用到了这个东东,所以我们在介绍后面的知识点,先来看看这个吧. 二.问题 那么Android中的智能指针是个什么东西呢?我们知道Android用的Java语言开发的,J

An internal error occured durring:&quot; running android lint&quot;——我的android 入门阶梯

前段时间刚开始学Android时遇到这个问题,每次打开.运行Android project 都会跳出这个提示: 无视它程序可以运行,但总是觉得有点不爽 网上已有一些解决方案: 1.打开项目的AndroidManifest.xml文件,android:targetSdkVersion="21"改为“20”或以下的值.由于Android L为预览版本,版本号还是使用“20”的原因导致了此问题.修改完后,再Project -> Context Menu -> Android To

Android基础篇之Android快速入门--你必须要知道的基础

Android快速入门 1. 搭建开发环境 >解压压缩文件,得到:①Android SDK   (类似于JDK)② Eclipse  ③ADT >配置两个path环境变量:D:\adt-bundle-windows-x86\sdk\platform-tools:D:\adt-bundle-windows-x86\sdk\tools >配置基本的Eclipse的设置: 调整字体大小,字符集,配置android sdk的位置 >创建模拟器: 2. 创建第一个Android项目: Hel

【工利其器】工具使用之(四)Android System Trace篇(1)官网翻译

前言 Android 开发者官网中对该工具有专门的介绍,本篇文章作为System Trace系列的开头,笔者先不做任何介绍,仅仅翻译一下官网的介绍.在后续的文章中再整理一份学习教程,以及笔者的实践经历.官网中对System Trace的介绍文档路径为[https://developer.android.google.cn/studio/command-line/systrace?hl=en#java].或者在进入到官网的首页后,按照Android Studio > USER GUIDE > C

【工利其器】工具使用之(三)Android System Trace篇

systrace工具打开路径 以AndroidStudio(后面简写为AS),在顶部菜单栏中 Tools>Android>Android Device Monitor 打开后看到如下界面,鼠标停在红框图标上,会显示“Capture system wide trace using Android systrace”,这个图标即Android systrace的入口. 或者点击下图的倒三角,会显示下拉列表,红框中“Capture System Wide Trace"这一项,和上面一样,也

【工利其器】必会工具之(八)PMD篇——代码分析工具基本使用介绍

如今,使用代码分析工具来代替人工进行代码审查,已经是大势所趋了.用于Java代码检测的工具中,不乏许许多多的佼佼者,其中PMD就是其中一款.PMD既可以独立运行,也可以以命令行的形式运行,还可以作为插件在IDE中运行,本文将基于在Android Studio中的使用来介绍PMD的基本使用. 一.PMD简介 对于PMD名称含义,有个有趣的现象,PMD不存在一个准确的名称,在官网上你可以发现很有有趣的名称 ,比如:Pretty Much Done,Project Meets Deadline等.PM

Android系统篇之----Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)

一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题就搁浅没有解决,用了其他一个曲线救国的方式去解决的.那么咋们今天闲来说说Android中的run-as命令吧. 二.遇到的问题&解决问题 Android中我们知道如果设备没有root,我们想看一个应用的沙盒数据(/data/data/目录内容),在以前的方式很难办到,一般人都是选择root之后,去查

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

第二就是: 如果要国内镜像的话: 3.大连东软信息学院镜像服务器地址: http://mirrors.neusoft.edu.cn  端口:80 随便选择一个就行啦.这里我选择的是第三个站点,即大连东软的镜像,使用方法如下: 首先,点击菜单中的"Tools",然后选择下拉中的"Options-", 然后在弹出的对话框中,填写HTTP Proxy Server为mirrors.neusoft.edu.cn(镜像服务器的地址,注意前面不要加http),然后填写HTTP