Android 代码优化工具 —— Lint Checks

一. Android Lint Checks 简介

作为一个 Android Developer,难免会面临这样的困扰:随着产品需求的反复更改和App版本的不停迭代,Android 项目工程中出现了越来越多的警告性代码(Warnings),四处遍布着无用的Java类和图片等资源(Unused),Manifest.xml 文件中会不会定义了一些兼容性以及安全性的标签呢(Security),打包发布的Apk文件体积越来越大,潜在性的异常问题越来越多!

其实,你缺少的只是一款代码检查工具,譬如 Lint。Android Lint Checks,在 SDK Tools 16(ADT 16)才引入的一款静态代码分析工具,能够对 Android 源代码进行扫描和检查,并发现可优化的代码和潜在性的异常,从而方便开发人员尽早地予以处理。

二. Android Lint Checks 作用

Lint 工具能够解决工程中存在的很多问题,具体可以参考官方介绍(需翻墙访问):Android Lint Checks,如图所示:

Android Lint Checks.png

而在实际使用过程中,我们通常会使用 Lint 工具帮助解决如下一些主要问题:

  1. Layout performance problems
    布局性能问题。比如布局内容和层级嵌套过多;

  2. Unused resources
    未使用到的资源。冗余资源让Apk文件体积更大,编译更慢;

  3. Inconsistent array sizes
    不一致的数组大小。一个数组经过转化配置形成多个数组后,当某一个数组发生add或者remove操作导致该数组大小发生变化时,我们很容易忘记修改其他数组的大小,导致发生未知的错误;

  4. Accessibility and Internationalization problems
    访问权限和国际化问题。诸如硬编码的字符串,缺失的 contentDescription 等;

  5. Icon Problems
    图标问题。比如重复的图标,错误的大小;

  6. Usability problems
    可用性问题。如在文本输入框中没有指定输入类型;

  7. Manifest errors
    AndroidManifest.xml 文件错误。

三. Eclipse插件集成使用

Android Lint 是一个命令行工具,提供了命令执行方式,同时也集中在如 Eclipse 、Android Studio 等集中开发环境(IDE)中,提供插件执行方式,也可以选择将分析结果以html等形式输入到文件中。自动分析,使用简单,这里以 Eclipse 为例,介绍一下 Android Lint 工具的使用。

在 Eclipse 中使用 Lint 工具有两种方式,选择工具栏中的对勾标识或者直接右键工程名称 --> Android Tools --> Run Lint: Check for Common Errors 。

Eclipse Lint.jpg

运行之后,经过一段短暂时间的自动化分析之后,一份完整的分析结果便呈现于 Lint Warnings 视图中。通过点击标签,也可以实现排序功能,方便集中处理。

Lint Warnings.jpg

如图所示,分析结果中包含了工程中的潜在性错误和一些常见警告,也给出了问题的描述、类型和位置。双击单项描述,可以快速定位至问题的出处。

同时,在工程结构目录中,也会以红叉和感叹号的形式将这些错误和警告显示出来,而这些,在开发时的编译过程中不会显现。

project dirs.jpg

根据这些提示信息,我们就可以逐一修改和优化工程的源代码了。

关于 Android Studio 插件和 命令行的使用,以及更多 Android Lint 的信息,可参考官方介绍(需翻墙访问):

http://developer.android.com/tools/help/lint.html

四. 注意事项

对于 Android Lint 检查出的未使用的资源,需要逐一分析有选择性的删除。比如对于图片资源,Android Lint 只能检测到在这些图片是否在其他资源文件(如 xml 布局文件)中有没有引用到,并不能检查 Java 代码或第三方库中是否引用,所以,如果你使用批量脚本代码等工具不经任何分析的删除,很容易造成误删,导致程序编译报错。建议配合 Ctrl + H 快捷键进行全局检索确认无误后,再行删除。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,653评论 24 698
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 13,604评论 2 43
  • 1 背景 一个项目开发必然会涉及团队协作,而工程质量就需要团队去保证。一般我们期望的代码:无潜在风险、无重复逻辑、...
    zyl06阅读 2,757评论 5 15
  • 在时间和空间上拿捏的不太好,这两次去郑州是已经证明了的事情了吧。。 我想在态度上能够做到恰如其分,似乎也是很难以把...
    追风的口罩阅读 91评论 0 0
  • 孩子的童年是可贵的,不要因为您的忙碌,错过了美好的亲子时光。二胎家庭中,老大同样需要关心和呵护。 我很容易伤心,每...
    蕊妈说阅读 489评论 0 0