Android-Lint使用说明

    • 概述
    • 常用知识
      • 问题描述 Issue
      • 常见问题描述
        • Correctness
        • CorrectnessMesseges
        • Security
        • Performance
        • UsabilityTypography
        • UsabilityIcons
        • Usability
        • Accessibility
        • Internationalization
    • 基本使用
      • 命令行
      • eclipse
      • Android studio
    • Lint规则定制
      • eclipse
      • 命令行

概述

Android-Lint 一个静态的代码分析器.可以用来检查项目的一些潜在bug和一些结构性问题。Android-Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。主要检查的问题包括:

  • 翻译缺失问题
  • 布局性能问题
  • 未使用的资源问题
  • 国际化问题
  • Manifest 错误
  • 可用性问题(如对于text字段没有指明输入类型)
  • 图标问题(重复的图标,错误的大小)

当然Android-Lint远远不止检查以上的错误,更多规则请查看lint-checks或者通过命令行$lint –show来获得所要扫描问题的详细列表。

常用知识

问题描述– Issue

Android-Lint所要检查的问题以Issue来描述。

Issue分9类(Category):Correctness/ Correctness: Messages / Security / Performance / Usability: Typography /Usability: Icons / Usability / Accessibility / Internationalization。

Issue以一个文本短语来作为id,对Issue的定制等操作都是基于id的。

Issue以Severity来标识该Issue的危害程度:Fatal / Error / Warning/ Information / Ignore。对Issue的忽略操作其实也就是降低它的Severity为Ignore。

常见问题描述

Correctness

  • DuplicatedIds

    Layout中id应该唯一

  • NewApi

    代码中使用的某些API高于Manifest中的minSdkVersion

  • InconsistentArrays

    字符串国际化中,同一名字的的String-Array对应的item值不相同

  • Registered

    Activity/Service/ContentProvider没有通过AndroidManifest注册

  • Deprecated

    使用已经废弃的API

  • PxUsage

    避免使用px,应该使用dp

Correctness:Messeges

  • MissingTranslation

    字符串国际化不完全

  • ExtraTranslation

    国际化的字符串,在默认位置(defaultlocale),没有定义

Security

  • SetJavaScriptEnabled

    不确定你的程序中确实需要JavaScript就不要执行SetJavaScriptEnabled。

  • ExportedContentProvider/ExportedReceiver/ExportedService/ExportedActivity

    ContentProvider/Receiver/Service/Activity的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。

  • HardcodedDebugMode

    不要在manifest中设置android:debuggable。
    设置它,编译的任何版本都要采用指定的debug模式。不设置,编译Eng版本采用debug模式;编译User版本采用release模式。

Performance

  • DrawAllocation

    避免在绘制或者解析布局(draw/layout)时分配对象。E.g.Ondraw()中实例化Paint对象。

  • ObsoleteLayoutParam

    Layout中无用的参数。

  • UseCompoundDrawables

    可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。

  • UseSparseArrays

    尽量用Android的SparseArray代替Hashmap

  • DisableBaselineAlignment

    如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算。

  • FloatMath

    使用FloatMath代替Math。

  • NestedWeights

    避免嵌套weight,那将拖累执行效率

  • UnusedResources/UnusedIds

    未被使用的资源会是程序变大,并且编译速度降低。

  • Overdraw

    如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。
    可以设置theme的background为null来避免。

  • UselessLeaf/UselessParent

    View或view的父亲没有用

Usability:Typography

  • TypographyDashes

    特殊字符需用编码代替:“–”需要用“– ;”;“—”需要用“— ;”

  • TypographyEllipsis

    特殊字符需用编码代替:“…”需要用“… ;”

Usability:Icons

  • IconNoDpi

    Icon在nodpi和指定dpi的目录下都出现。

  • GifUsage

    Image不要用GIF,最好用PNG,可以用JPG。

Usability

  • TextFields

    text字段缺失inputType,如果你确定想用一般的inputType,你可以设置inputType=”text”

Accessibility

  • ContentDescription

    ImageView和ImageButton应该提供contentDescription

Internationalization

  • HardcodeText

    硬编码的字符串应该在资源里定义

  • EnforceUTF8

    所有XML资源文件都应该以UTF-8编码

基本使用

命令行

lint [flags] <project directory>

lint --check MissingPrefix <project directory>

表示只进行issue id为MissingPrefix的检查。

更多命令可以参考lint-tips

eclipse

右键点击Eclipse中的Runs Android Lint的按钮,选择需要执行lint检查的项目,最后一个选项是过滤掉依赖的Library

可以得到对应第一张图的结果,然后就可以分析处理

Android studio

可以参考improving-w-lint

Lint规则定制

对Android-Lint发现的问题,我们需要进一步的处理:确实存在的我们自己的设计问题,要解决它;对无关紧要或者是我们特别设计的问题,要在Android-Lint中忽略掉。譬如说:国际化问题,项目可能不需要做国际化,那么我们就可以忽略这个问题。定制Android-Lint,可以通过IDE或者命令行处理

eclipse

可以通过propreties选项定制处理

命令行

需要在项目根目录生成lint.xml,内容如:

<lint>
      <issue id="OldTargetApi" severity="ignore" />
lint>

然后命令行运行

lint --html lint_result.html <project directory>

可以生成html格式的检查文件

注意:有时候,隐患恰恰就是被忽略过去的,所以在要忽略某个issue之前一定要确保你已经明白它们的含义,以及确切知道忽略不会带来隐患。
建议:定制lint规则要由团队负责人执行,每次验收时,用大家讨论认可的Lint规则做统一的执行检查

你可能感兴趣的:(android那些事)