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

来源:互联网 发布:一淘登录用淘宝账号吗 编辑:程序博客网 时间:2024/05/17 01:51

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


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

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

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

 

标签: android-lint查错优化配置文件html格式输出
15725人阅读 评论(10)收藏举报
本文章已收录于:
分类:
作者同类文章X
    作者同类文章X

      目录(?)[+]

      1. 一Android-Lint检查的潜在问题
        1. 1问题描述-- Issue
        2. 2 检查的潜在问题
      2. 二执行Android-Lint
        1. 1 Eclipse中执行
        2. 2 命令行执行
      3. 三Android-Lint选项
        1. 1 issue列表
        2. 2 disableenablecheck issue
        3. 3 html输出
        4. 4 指定全局配置文件
        5. 5 其他选项
      4. 四与其他系统集成

      田海立

      2012-10-03

       

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

       

      Android-Lint相关的文章

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

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

      •  定制Android-Lint检查问题的现有规则

      对Android-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
      print?
      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,让使用者获取了Permission才能使用。  
      26. 3) HardcodedDebugMode  
      27. 不要在manifest中设置android:debuggable。  
      28. 设置它,编译的任何版本都要采用指定的debug模式。不设置,编译Eng版本采用debug模式;编译User版本采用release模式。  
      29.    
      30. 4. Performance  
      31. 1) DrawAllocation  
      32. 避免在绘制或者解析布局(draw/layout)时分配对象。E.g.,Ondraw()中实例化Paint对象。  
      33. 2) ObsoleteLayoutParam  
      34. Layout中无用的参数。  
      35. 3) UseCompoundDrawables  
      36. 可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。  
      37. 4) UseSparseArrays  
      38. 尽量用Android的SparseArray代替Hashmap  
      39. 5) DisableBaselineAlignment  
      40. 如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算。  
      41. 6) FloatMath  
      42. 使用FloatMath代替Math。  
      43. 7) NestedWeights  
      44. 避免嵌套weight,那将拖累执行效率  
      45. 8) UnusedResources/UnusedIds  
      46. 未被使用的资源会是程序变大,并且编译速度降低。  
      47. 9) Overdraw  
      48. 如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。  
      49. 可以设置theme的background为null来避免。  
      50. 10) UselessLeaf/UselessParent  
      51. View或view的父亲没有用  
      52.    
      53. 5. Usability:Typography  
      54. 1) TypographyDashes  
      55. 特殊字符需用编码代替:“–”需要用“–”;“—”需要用“—”  
      56. 2) TypographyEllipsis  
      57. 特殊字符需用编码代替:“…”需要用“…”  
      58. 3) TypographyOther  
      59. 问题:“(c)”需要用“©”  
      60.    
      61. 6. Usability:Icons  
      62. 1) IconNoDpi  
      63. Icon在nodpi和指定dpi的目录下都出现。  
      64. 2) GifUsage  
      65. Image不要用GIF,最好用PNG,可以用JPG。  
      66.    
      67. 7. Usability  
      68. 1) BackButton  
      69. Android中不要设计有Back的按钮,Android中一般有Back的硬按键。  
      70. 2) ButtonCase  
      71. Button的“Ok”/“Cancel”显示大小写一定,不要全大写或全小写。有标准的资源的字符串,不要自己再定义,而要用系统定义的:@android:string/ok和@android:string/cancel  
      72.    
      73. 8. Accessibility  
      74. 1) ContentDescription  
      75. ImageView和ImageButton应该提供contentDescription  
      76.    
      77. 9. Internationalization  
      78. 1) HardcodeText  
      79. 硬编码的字符串应该在资源里定义  
      80. 2) EnforceUTF8  
      81. 所有XML资源文件都应该以UTF-8编码  
      82.   
      83. ...  
       

      二、执行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
      print?
      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
      print?
      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
      print?
      1. lint --html <filename>  
      2. lint --html <filename> --url filepath=url  

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

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

       

      3.4 指定全局配置文件

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

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

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

       

      3.5 其他选项

      [plain] view plain copy
      print?
      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 0