Android-Lint:查错与代码优化利器

标签: android lint 代码 | 发表时间:2014-03-17 18:58 | 作者:892848153
出处:http://www.iteye.com

转自: http://blog.csdn.net/thl789/article/details/8037473

Android-Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过代码检查,可发现潜在的问题,并能对Android程序进行优化处理。Android-Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。Android-Lint可以方便的与项目中的其他自动系统(配置/ Build / 测试等)集成。

 

Android-Lint相关的文章

 

 

Android-Lint的简述:Lint检查哪些问题;如何使用;有哪些选项;与其他系统集成。

 

 

对Android-Lint发现的问题进行处理。可定制项目中采用的规则。

 

 

Android SDK Tools / ADT 20.0.3中所支持的默认检查的所有问题。

英文版本中文版本英文版本从Android-Lint中直接导出; 中文版本还不完整,对每一条的解释会逐步完善。

 

当然,最关键最权威的还是应该看官方网站: http://tools.android.com/tips/lint

 

 

一、Android-Lint检查的潜在问题

 

1.1问题描述-- 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。

 

1.2 检查的潜在问题

 

Android-Lint所检查的潜在问题,可以通过命令行$lint --show来获得 所要扫描问题的详细列表

 

下面简要列举Android-Lint所检查的常见问题:

 

[plain]  view plain copy
 
  1. 1. Correctness  
  2. 1) DuplicatedIds  
  3. Layout中id应该唯一  
  4. 2) NewApi  
  5. 代码中使用的某些API高于Manifest中的Min SDK  
  6. 3) InconsistentArrays  
  7. 字符串国际化中,同一名字的的String-Array对应的item值不相同  
  8. 4) Registered  
  9. Activity/Service/ContentProvider没有通过AndroidManifest注册  
  10. 5) Deprecated  
  11. 使用已经废弃的API  
  12. 6) PxUsage  
  13. 避免使用px,使用dp  
  14.    
  15. 2. Correctness:Messeges  
  16. 1) MissingTranslation  
  17. 字符串国际化不完全  
  18. 2) ExtraTranslation  
  19. 国际化的字符串,在默认位置(defaultlocale),没有定义  
  20.    
  21. 3. Security  
  22. 1) SetJavaScriptEnabled  
  23. 不确定你的程序中确实需要JavaScript就不要执行SetJavaScriptEnabled。  
  24. 2)ExportedContentProvider/ExportedReceiver/ExportedService/ExportedActivity  
  25. ContentProvider/Receiver/Service/Activity的exported为true时,设置一个Permission,
  26. 让使用者获取了Permission才能使用。  
  27. 3) HardcodedDebugMode  
  28. 不要在manifest中设置android:debuggable。  
  29. 设置它,编译的任何版本都要采用指定的debug模式。不设置,编译Eng版本采用debug模式;
  30. 编译User版本采用release模式。  
  31.    
  32. 4. Performance  
  33. 1) DrawAllocation  
  34. 避免在绘制或者解析布局(draw/layout)时分配对象。E.g.,Ondraw()中实例化Paint对象。  
  35. 2) ObsoleteLayoutParam  
  36. Layout中无用的参数。  
  37. 3) UseCompoundDrawables  
  38. 可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。  
  39. 4) UseSparseArrays  
  40. 尽量用Android的SparseArray代替Hashmap  
  41. 5) DisableBaselineAlignment  
  42. 如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,
  43. 以加速layout计算。  
  44. 6) FloatMath  
  45. 使用FloatMath代替Math。  
  46. 7) NestedWeights  
  47. 避免嵌套weight,那将拖累执行效率  
  48. 8) UnusedResources/UnusedIds  
  49. 未被使用的资源会是程序变大,并且编译速度降低。  
  50. 9) Overdraw  
  51. 如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,
  52. 这就是所谓的“Overdraw”。  
  53. 可以设置theme的background为null来避免。  
  54. 10) UselessLeaf/UselessParent  
  55. View或view的父亲没有用  
  56.    
  57. 5. Usability:Typography  
  58. 1) TypographyDashes  
  59. 特殊字符需用编码代替:“–”需要用“–”;“—”需要用“—”  
  60. 2) TypographyEllipsis  
  61. 特殊字符需用编码代替:“…”需要用“…”  
  62. 3) TypographyOther  
  63. 问题:“(c)”需要用“©”  
  64.    
  65. 6. Usability:Icons  
  66. 1) IconNoDpi  
  67. Icon在nodpi和指定dpi的目录下都出现。  
  68. 2) GifUsage  
  69. Image不要用GIF,最好用PNG,可以用JPG。  
  70.    
  71. 7. Usability  
  72. 1) BackButton  
  73. Android中不要设计有Back的按钮,Android中一般有Back的硬按键。  
  74. 2) ButtonCase  
  75. Button的“Ok”/“Cancel”显示大小写一定,不要全大写或全小写。有标准的资源的字符串,不要自己再定义
  76. ,而要用系统定义的:@android:string/ok和@android:string/cancel  
  77.    
  78. 8. Accessibility  
  79. 1) ContentDescription  
  80. ImageView和ImageButton应该提供contentDescription  
  81.    
  82. 9. Internationalization  
  83. 1) HardcodeText  
  84. 硬编码的字符串应该在资源里定义  
  85. 2) EnforceUTF8  
  86. 所有XML资源文件都应该以UTF-8编码  
  87.   
  88. ...  

 

 

二、执行Android-Lint

 

1.1 Eclipse中执行

 

Eclipse中的Runs Android Lint的按钮。

Android-Lint Runs Android Lint

点击它可执行对所有当前Workspace中的Android项目执行Android Lint;也可以点击它右边的下箭头,选择对某一个Android项目执行Android Lint。

执行Lint检查之后,检查的结果在Eclipse的Lint Warnings View里:

Android-Lint Lint Warning View 

 

可以在这里解决问题或者 定制忽略掉这些问题

 

1.2 命令行执行

 

Lint的命令行指令在AndroidSDK Tools中,<android-sdk-root>\tools\下有lint.bat这个批处理文件。

执行>lint<dest>可对<dest>中的所有Android项目进行 递归检查。

 

三、Android-Lint选项

 

Android-Lint在命令行下,提供了写参数选项,提供定制。

3.1 issue列表

 

[plain]  view plain copy
 
  1. lint --show  
  2. lint --list  

通过show和list可以查看所有支持要检测的Issue列表:show显示详细的issue信息;list只是issue的id和summary的列表。

 

3.2 disable/enable/check issue

 

[plain]  view plain copy
 
  1. lint --disable <list>  
  2. lint --enable <list>  
  3. lint --check <list>  

Android-Lint所支持要检测的Issue列表,默认有检查(Severity为非Ignore)和忽略(Severity为Ignore)之分。

可以用disable不检查指定<list>中默认要检查的id或category;用enable检查指定<list>中默认忽略的id或category;用check只检查指定<list>中的id或category。

注意:

[1] disable/enable是在default列表的基础上,disable/enable给定列表里的;check是只检查列表里的。

[2] <list>是issue id或category列表,用逗号隔开。

 

3.3 html输出

 

[plain]  view plain copy
 
  1. lint --html <filename>  
  2. lint --html <filename> --url filepath=url  

Android-Lint可以通过html选项指定本次检查的结果输出。

生成的html文件中,还会引用别的文件,可以通过url参数替换其中的地址,使其指向公共访问的地方。

 

3.4 指定全局配置文件

 

[plain]  view plain copy
 
  1. lint --config <filename>  

虽然disable/enable/check选项可以改变本次检查的问题行为,但是下次还要再次指定。可以通过config选项指定默认的全局配置文件。

注意:如果项目中已经有lint.xml文件,对于某条issue的检查来说,1先用项目中lint.xml的规则,然后是2config指定的规则,最后才是3系统默认的规则。

 

3.5 其他选项

 

[plain]  view plain copy
 
  1. lint --help  

 

Android-Lint还有很多其他选项,可以通过lint --help查看。

 

四、与其他系统集成

 

Android-Lint提供命令行和IDE集成方式。IDE可以极大提升个体单兵作战能力;而命令行则对团队作战至关重要。如果一个工具要被用于自动系统中,命令行执行模式是否支持是一个重要的指标。

Android-Lint已经完全具备,可以与现有的配置系统,自动Build系统以及自动测试系统集成:

 

  •   配置系统中有资源 加入或更改后;(触发的时机也可以是Daily Build/ Weekly Build / etc.)
  •  触发 自动Build系统Build
  •  Build完成之后,启动 Android-Lint系统 执行Lint做检查

 

Lint检查的结果以html报告的形式连同自动测试结果一起作为判断这个版本质量的重要指标。



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android lint 代码] 推荐:

Android-Lint:查错与代码优化利器

- - 移动开发 - ITeye博客
转自: http://blog.csdn.net/thl789/article/details/8037473. Android-Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过代码检查,可发现潜在的问题,并能对Android程序进行优化处理. Android-Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告.

Android自定义Lint实践

- - 美团点评技术团队
Android Lint是Google提供给Android开发者的静态代码检查工具. 使用Lint对Android工程代码进行扫描和检查,可以发现代码潜在的问题,提醒程序员及早修正. 为保证代码质量,美团在开发流程中加入了代码检查,如果代码检测到问题,则无法合并到正式分支中,这些检查中就包括Lint.

使用Android lint发现并解决高版本API问题

- - 技术小黑屋
在编写代码时,为了实现一些功能,我们需要使用高版本的API,比如SharedPreference的Editor中的apply方法为API 9开始引入,在API 9 以上的机器使用没有问题,但是在API 8上,如果运行时执行了这段代码,就会崩溃,问题相当严重. 尤其是该问题出现在正式版中,后果不堪设想.

CSS代码检查工具推荐:CSS Lint

- - 标点符
CSS Lint是一个开源的校验CSS文件质量的工具,最初是由 Nicholas C. Zakas和 Nicole Sullivan编写的,最初版本在Velocity会议上于2011年6月发布. CSS Lint的检测规则包括错误的和警告,当选择器或属性书写不正确、漏掉了大括号、多写了分号等时,会提示解析错误,解析错误优先提示.

android 编程代码规范

- - CSDN博客推荐文章
                学习android开发已经有很长时间了,但是有时代码却很少用规范的模式进行书写,下面就简要的总结了自己学习的代码规范. 一、关于一些常量值资源的书写规范. 颜色值有RGB和透明信息Alpha组成,以#开头, 形式有 #RGB                        #ARGB                        #RRGGBB                    #AARRGGBB.

使用husky + lint-staged助力团队编码规范

- - 掘金前端
husky 是一个为 git 客户端增加 hook 的工具. 安装后,它会自动在仓库中的 .git/ 目录下增加相应的钩子;比如 pre-commit 钩子就会在你执行 git commit 的触发. 那么我们可以在 pre-commit 中实现一些比如 lint 检查、单元测试、代码美化等操作.

Android Native 代码开发学习笔记

- iDesperadO - WindStorm
本文提供排版更佳的PDF版本下载. JNI,全称Java Native Interface,是用于让运行在JVM中的Java代码和运行在JVM外的Native代码(主要是C或者C++)沟通的桥梁. 代码编写者即可以使用JNI从Java的程序中调用Native代码,又可以从Native程序中调用Java代码.

[原]Android有用代码片断(六)

- - 傲慢的上校的专栏
         不知不觉中,就收集了超过95条的自己感觉有意思的代码片段,分为五篇文章: android有用代码片段、 Android有用代码片段(二)、 Android有用代码片段(三)、 Android有用代码片段(四)、. Android有用代码片段(五). 这五篇,今天,开始第六篇的整理.

Android实用代码七段(一)

- - 博客园_首页
 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用.   欢迎转载,但请保留文章原始出处:) .     博客园:http://www.cnblogs.com.     农民伯伯: http://over140.cnblogs.com   . 1、精确获取屏幕尺寸(例如:3.5、4.0、5.0寸屏幕) .

Android 4.0.3 源代码已推送到 AOSP

- - 谷安——谷奥Android专题站
16日 Google 宣布了 Android 4.0.3,该版本的源码目前已经推送到 AOSP 上,这是目前最新版本的 Ice Cream Sandwich. 这是首次推送了 4 个不同的版本,包括 Motorola XOOM、 Nexus S 和两个 Galaxy Nexus 版本.