[Android Memory] Android Lint简介(转载)

简介:

英文原文:http://tools.android.com/tips/lint  参照文章:http://blog.csdn.net/thl789/article/details/8037473

转载地址:http://blog.csdn.net/hudashi/article/details/8333349

一、简介
Android Lint 是SDK Tools 16 (ADT 16)之后才引入的工具,通过它对Android工程源代码进行扫描和检查,可发现潜在的问题,以便程序员及早修正这个问题。Android Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。
由于Android Lint在最初设计时就考虑到了independent于IDE,所以它可以很方便的与项目中的其他自动系统(配置/ Build / 测试等)集成.
Android Lint主要用于检查以下这些错误:
1、Missing translations (and unused translations)没有翻译的文本
2、Layout performance problems (all the issues the old layoutopt tool used to find, and more)
3、Unused resources未使用的冗余资源
4、Inconsistent array sizes (when arrays are defined in multiple configurations)在多个配置中的数组大小不一致文件
5、Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
6、Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
7、Usability problems (like not specifying an input type on a text field)
8、Manifest errors
当然 Android Lint远远不至检查以上的错误,更多的内容请参考《 Android Lint 检查规则列表
在Eclipse中可以在菜单Window->Preference->“ Lint Eerro checking ”中设置规则的检查级别,如 图1 所示。
检查级别可以是:
Default
Fatal
Errro
Waring
Information
Ingore(即不检查)

图1
Android Lint 检查规则列表 - hubingforever - 民主与科学
 

如果你只是想对lint的检查规则做些简单的定制,请参考《 Android Lint 检查规则的定制(基本篇) 或英文 官方文档
如果你想对lint的检查规则做些高级的定制,请参考官方文档   Writing New Lint Checks  and  Writing Custom Lint Rules .
二、命令行中使用Lint
2.1、基本使用
There is a command line tool in the SDK tools/ directory called  lint.
If you have the SDK  tools/  directory on your path, you can invoke it as “ lint ”. Just point to a specific Android project directory. You can also point to a random directory, which (if it is not an Android project) will be searched recursively and all projects under that directory will be checked. (And you can also specify multiple projects separated by spaces)
在Android SDK的tools下有个叫lint.bat的文件,它就是lint的命令行工具。
lint命令后可以带一个或多个参数,参数之间用空格隔开, 参数表示的是需要使用lint进行扫描的 Android项目的目录
示例1
linux命令行
 lint  / src / astrid /
Scanning GreenDroid - GoogleAPIs : ..
Scanning  stream : ...
Scanning  api : ...........................
Scanning GDCatalog : .......................
Scanning GreenDroid : ...........................................................
Scanning  tests : ...
Scanning  filters : ....
Scanning  tests : .....
Scanning astrid : ....................................................................................................................................................
Scanning  simple : .......
api / res / values - ca : Error : Locale  ca  is  missing translations  for :  sync_SPr_bgwifi_key ,  sync_SPr_forget_key , sync_SPr_interval_values ,  sync_SPr_logged_in_prefix ... ( 2  more ) [ MissingTranslation ]
astrid / res / values - ca : Error : Locale  ca  is  missing translations  for :  DLG_cancel ,  DLG_dismiss , DLG_ok , EPr_deactivated ... ( 117  more ) [ MissingTranslation ]
api / res / values - cs : Error : Locale  cs  is  missing translations  for :  sync_SPr_bgwifi_key ,  sync_SPr_forget_key , sync_SPr_interval_values ,  sync_SPr_logged_in_prefix ... ( 2  more ) [ MissingTranslation ]
( many lines omitted )
43  errors , 466  warnings
示例2
Window命令行
C : \Documents  and Settings \Administrator > lint D : \workspace\Test Scanning Test : ......................................................................................................... ........................................................................................................................  ................... Scanning Test ( Phase 2 ): ......  res\layout\internet_image_demo . xml : 9 : Warning : The  id  "button1" is not  referring to any views  in this  layout  [ UnknownIdI  nLayout ]  android : layout_alignLeft = "@+id/button1"  ^ res\layout\internet_image_demo . xml : 10 : Warning : The  id  "textView1" is not  referring to any views  in this  layout [ Unknown  IdInLayout ]  android : layout_below = "@+id/textView1"  ^  AndroidManifest . xml : 52 : Warning : Exported receiver does  not require  permission  [ ExportedReceiver ]  < receiver android : name = ".AlarmReceiver" >  ^ res\menu\activity_main . xml : Warning : The  resource R . menu . activity_main appears to be unused [ UnusedResources ]  res\drawable - hdpi\ic_action_search . png : Warning : The  resource R . drawable . ic_action_search appears to be unused  [ UnusedRe  sources ] res\values\strings . xml : 7 : Warning : The  resource R . string . hello appears to be unused  [ UnusedResources ] < string  name = "hello" >你好!</ string >  ^  res\drawable - mdpi : Warning : Missing  the following drawables  in drawable - mdpi :  icon . png ,  icon2 . png  [ IconDensities ]  res\drawable - xhdpi : Warning : Missing  the following drawables  in  drawable - xhdpi :  icon . png ,  icon2 . png  [ IconDensities ] res\layout\internet_image_demo . xml : 5 : Warning : [ Accessibility ] Missing  contentDescription attribute on image [ ContentDes  cription ]  < ImageView  ^  res\layout\activity_main . xml : 17 : Warning : [ I18N ] Hardcoded string "go Hello" , should  use @string  resource  [ HardcodedText  ]  android : text = "go Hello"  ^ res\layout\activity_main . xml : 23 : Warning : [ I18N ] Hardcoded string "打印所有任务栈信息" ,  should  use @string resource  [ Har  dcodedText ]  android : text = "打印所有任务栈信息"  ^  res\layout\activity_main . xml : 29 : Warning : [ I18N ] Hardcoded string "打印所有服务信息" ,  should  use @string  resource  [ Hardc  odedText ]  android : text = "打印所有服务信息"  ^  res\layout\activity_main . xml : 35 : Warning : [ I18N ] Hardcoded string "打印进程信息" ,  should use @string  resource  [ Hardcoded  Text ]  android : text = "打印进程信息"  ^  res\layout\hello . xml : 23 : Warning : [ I18N ] Hardcoded string "please click me" ,  should  use @string  resource  [ HardcodedText ]  android : text = "please click me"  ^  0  errors , 14  warnings
2.2、Disabling Checks( --disable
在执行 lint 命令时可以通过 --disable 选项要指定关闭的检查规则项。 --disable选项后接要关闭的 检查规则项的id(比如示例3中的 MissingTranslation )或 检查规则项的类别(比如示例3中的 Usability:Icons 示例4 Internationalization )。
关于lint检查项的 id 类别 Category )等信息请参考《 Android Lint 检查规则列表
示例3

$ lint --disable MissingTranslation,UnusedIds,Usability:Icons/src/astrid/

示例4
C : \Documents  and Settings \Administrator > lint  -- disable  Internationalization  D : \workspace\Test
 
Scanning Test : .........................................................................................................
........................................................................................................................
...................
Scanning Test ( Phase 2 ): ......
res\layout\internet_image_demo . xml : 9 : Warning : The  id  "button1" is not  referring to any views  in this  layout [ UnknownIdI
nLayout ]
        android : layout_alignLeft = "@+id/button1"
         ^
res\layout\internet_image_demo . xml : 10 : Warning : The  id  "textView1" is not  referring to any views  in this  layout [ Unknown
IdInLayout ]
        android : layout_below = "@+id/textView1"
         ^
AndroidManifest . xml : 52 : Warning : Exported  receiver does  not require  permission  [ ExportedReceiver ]
         < receiver android : name = ".AlarmReceiver" >
         ^
res\menu\activity_main . xml : Warning : The  resource R . menu . activity_main appears to be unused [ UnusedResources ]
res\drawable - hdpi\ic_action_search . png : Warning : The  resource R . drawable . ic_action_search appears to be unused  [ UnusedRe
sources ]
res\values\strings . xml : 7 : Warning : The  resource R . string . hello appears to be unused  [ UnusedResources ]
< string  name = "hello" >你好!</ string >
^
res\drawable - mdpi : Warning : Missing  the following drawables  in  drawable - mdpi :  icon . png ,  icon2 . png [ IconDensities ]
res\drawable - xhdpi : Warning : Missing  the following drawables  in  drawable - xhdpi :  icon . png ,  icon2 . png [ IconDensities ]
res\layout\internet_image_demo . xml : 5 : Warning : [ Accessibility ] Missing  contentDescription attribute on image [ ContentDes
cription ]
     < ImageView
     ^
0  errors , 9  warnings
2.3、enabling Checks( --enable --check )
lint的有些检查项默认是关闭的(disable),在执行lint命令时可以通过 --enable选项开启它。 -enable 选项后接要开启的 检查规则项的id(比如示例5中的 MissingTranslation  检查规则项的类别(示例5中的 Usability:Icons
示例5

$ lint --disable MissingTranslation,UnusedIds,Usability:Icons/src/astrid/

在执行lint命令时可以通过 --check 选项来指定只进行某些检查。 -check 选项后接要开启的 检查规则项的id(比如示例6中的 MissingPrefix
示例6
$ lint --check MissingPrefix /src/astrid/
2.4、检查项类别和检查项id
可以通过 lint--list选项来得到检查项类别和检查项id.
比如:
lint   --list
Valid issue categories:
Correctness
Security
Performance
Usability
Usability:Icons
Accessibility
Internationalization

Valid issue id's:
"ContentDescription": Ensures that image widgets provide a contentDescription
"DuplicateIds": Checks for duplicate ids within a single layout
"StateListReachable": Looks for unreachable states in a <selector>
"InefficientWeight": Looks for inefficient weight declarations in LinearLayouts
"ScrollViewSize": Checks that ScrollViews use wrap_content in scrolling dimension
"MergeRootFrame": Checks whether a root <FrameLayout> can be replaced with a <merge> tag
...

可以通过 lint --show 选项后跟检查项id来得到一个检查项的详细说明.
比如:
$ lint --show MissingPrefix
MissingPrefix
-------------
Summary: Detect XML attributes not using the Android namespace

Priority: 8 / 10
Severity: Warning
Category: Correctness

Most Android views have attributes in the Android namespace. When
referencing these attributes you *must* include the namespace prefix,
or your attribute will be interpreted by aapt as just a custom
attribute.
当然你也可以通过 Android Lint 检查规则列表 》来查阅检查项的id等详细信息
2.4、html形式的report
lint 中,我们可以通过 --html 选项接文件路径的形式把代码扫描结果以html文件的形式进行输出。
示例6
C : \Documents  and Settings \Administrator > lint  -- html D : \workspace\Test\report . htm
l D : \workspace\Test
 
Scanning Test : .................................................................
................................................................................
................................................................................
...................
Scanning Test ( Phase 2 ): ......
Wrote  HTML report to D : \workspace\Test\report . html
html输出报告如 图2所示
图2
Android Lint简介 - hubingforever - 民主与科学
 
By default, links to source files will just use local file:// path resources. You can remap the URLs to a different prefix with the --url option. For example:
$ lint --html /tmp/report.html --url /src/MyProj=http://buildserver/src/MyProj
2.5、命令行帮助
在lint中,你可以使用 --help选项来得到lint命令的一些帮助信息。
示例7
lint --help
三、Eclispe中使用Lint
ADT16 开始,lint就集成到了ADT中。该它在lint命令行的基础上新增了以下功能
  • Automatic fixes for many warnings自动修正大量警告
  • Lint gets run automatically on various editing operations当编辑操作完成后,立即自动运行
  • Ability to suppress types of errors as well as specific instances of an error可以suppress(忽略)一种类型的erro,也可以suppress(忽略)特定的一个erro
  • Ability to configure issue severities能够配置issue(问题)的severities(严重性)
  • Jump directly to the problem source from the lint view通过lint视图能直接跳转到其问题对应的源码处
3.1、Automatic Lint
Lint将在以下情况下自动运行:
  • Export an APK. In this case it runs lint in a special mode which only looks for fatal errors (which is faster) and aborts the export if any fatal errors are found. You can turn off this in the Lint Options.在导出APK文件的时候,lint会做快速的扫描,以寻找fatal的错误。如果发现有fatal的错误,导出APK的操作将被迫终止
  • Edit and Save and XML file, such as a layout file or a manifest file. In this case, all the file-scope checks that apply to the given file are run and editor markers are added for any issues found.编辑和保存XML文件,lint也会自动扫描这些文件。另外从ADT20开始,对于java源码文件在编辑和保存后,lint也会对他们进行 扫描。
  • Use the layout editor. After every UI operation, file-scope checks (such as the various layoutopt rules) are run on the layout file and the results are shown in a special lint window (which can be opened from the error marker which shows in the top right corner of the layout editor when errors are found).对于使用layout editor来操作布局文件时,在每个UI操作后,lint也会自动扫描该布局文件。

3.2、Lint Window
在Eclipse中,你可以通过两种方式来手动进行lint的扫描:
一种方式是通过工具栏,双击图3-1中红色箭头指向的按钮,然后出现图3-2所示的下拉框,在该下拉选择要进行lint扫描的工程
图3-1
Android Lint简介 - hubingforever - 民主与科学
 
图3-2
Android Lint简介 - hubingforever - 民主与科学
 
一种方式是选中一个Android工程,单击右键,在下拉菜单中选择“Android tools”->"Run lint:check common erro",如图3-3所示
图3-3
Android Lint简介 - hubingforever - 民主与科学
 
运行lint之后,你将看到如 图3-4图3-5所示的lint 窗口
图3-4
Android Lint简介 - hubingforever - 民主与科学
 
图3-5
Android Lint简介 - hubingforever - 民主与科学
 
默认情况下,同一个类型的issue都是折叠成一块的,图3-4和图3-5是我手动展开的。
lint窗口的工具栏上有一些按钮,如图3-6所示
图3-6
Android Lint简介 - hubingforever - 民主与科学
它们的意义分别如下
  • Android Lint简介 - hubingforever - 民主与科学 Refresh, which re-runs the current analysis on the same projects
  • Android Lint简介 - hubingforever - 民主与科学 Fix, which automatically fixes the issue (this applies to issues where a quickfix is available)
  • Android Lint简介 - hubingforever - 民主与科学 Suppress this issue with an attribute or annotation
  • Android Lint简介 - hubingforever - 民主与科学 Ignore in this file (saves suppress information in lint.xml)
  • Android Lint简介 - hubingforever - 民主与科学 Ignore in this project (ditto)
  • Android Lint简介 - hubingforever - 民主与科学 Always ignore
  • Android Lint简介 - hubingforever - 民主与科学 Delete this lint marker
  • Android Lint简介 - hubingforever - 民主与科学 Delete all lint markers
  •   Expand All, 
    Android Lint简介 - hubingforever - 民主与科学   Collapse All
  • Android Lint简介 - hubingforever - 民主与科学    Configure Columns用于设置在lint Window中对于检查出的issue的哪些项显示哪些项不显示,如图3-7所示
     
  • Android Lint简介 - hubingforever - 民主与科学 Edit Options Edit Options 点击该按钮会弹出Lint Preference dialog,如图1图3-8在里面你可以定制默认/全局的Android Lint的基本检查规则,在其中可以设置所有项目默认的lint检查规则的检查级别,把检查级别(Severity)设为”ignore“,其实就是忽略(suppress)该检查规则
Configure Columns lets you edit which columns are visible. There are several new columns you can display, such as Category, Priority, etc, and you can click on column headers to sort the display by the given column. There's also a new "Location" column, shown by default, which incorporates several different pieces of information: the file name, the line number, the parent folder name (useful when looking at translation or configuration issues), and the project name:
Configure Columns用于设置在lint Window中对于检查出的issue的哪些项显示哪些项不显示,如 图3-7 所示
图3-7
Android Lint简介 - hubingforever - 民主与科学
 
 The Edit Options actions brings up the Lint Preference dialog, which has also been improved.  You can now search through the options by filter:
点击Edit Options按钮会弹出处理 Lint Preference dialog,在里面可以定制默认/全局的Android Lint的基本检查规则
图3-8
Android Lint简介 - hubingforever - 民主与科学
 
 3.3、Quick Fixes
Many lint warnings have automatic fixes. For example, the various layoutopt fixes suggest replacements (e.g. replace wrap_content with 0dp). 
  • From the lint view(如图3-6所示), click the lightbulb Android Lint简介 - hubingforever - 民主与科学
     to invoke a fix.
  • From the layout editor warning summary, click the Fix button to fix.
  • And from the XML source editor, invoke the Quick Fix (Ctrl-1 or Command-1) and pick the quick fix associated with the warning.
3.4、Suppressing Errors(检查规则的基本定制)
From the editor quick fix menu( 如图3-9所示 ), you can also choose to
  • Ignore the warning in this file only
  • Ignore the warning in this project
  • Ignore the warning, period.
  • Ignore warnings using annotations or attributes, as explained here.
图3-9
Android Lint简介 - hubingforever - 民主与科学
 
(If you do not see the lint fix action in the quickfix list, see the Known Bugs section)

These choices are stored in a file named  lint.xml  in the project, which is also read by the command line tool. Thus, you can ignore warnings from the UI, and check in the lint.xml  file with your source projects, and others running lint will not see warnings you have ignored (presumably because they have been manually verified).
你的选择在被存在Android工程目录下的   lint.xml  文件中
关于此的详细内容请参考《 Android Lint 检查规则的定制(基本篇)
结束!
分类:  Android Memory
本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/3746260.html如需转载请自行联系原作者

demoblog
相关文章
|
4月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
6月前
|
SQL 人工智能 Java
Android 命令行工具简介
Android SDK 中包含了开发应用所需的多个软件包。本页列出了可供使用的最重要的命令行工具(按提供这些工具的软件包整理)。
|
6月前
|
SQL 人工智能 移动开发
Android etc1tool之png图片转换pkm 和 zipalign简介
etc1tool 是一种命令行实用程序,可用于将 PNG 图片编码为 ETC1 压缩标准格式(PKM),并将 ETC1 压缩图片解码回 PNG。
|
8月前
|
Java Linux API
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
|
4月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
62 0
|
4月前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
41 1
|
6月前
|
XML Java 开发工具
Android apkanalyzer简介
Android apkanalyzer简介
|
6月前
|
XML Java 开发工具
Android lint配置及使用
Android lint配置及使用
|
9月前
|
XML IDE 前端开发
Android入门教程 (一) Android简介和android studio安装
Android入门教程 (一) Android简介和android studio安装
145 0
|
9月前
|
XML Java 编译器
[Android JNI] --- Java和Android简介
[Android JNI] --- Java和Android简介
83 1