关于Android lint
来源:互联网 发布:淘宝小铺名称能改吗 编辑:程序博客网 时间:2024/06/05 21:54
原文:http://tools.android.com/tips/lint
Android-Lint是SDK Tools 16 (ADT 16)之后才引入的工具,通过代码检查,可发现潜在的问题,并能对Android程序进行优化处理。Android-Lint提供了命令行方式执行,还可与IDE(如Eclipse)集成,并提供了html形式的输出报告。Android-Lint可以方便的与项目中的其他自动系统(配置/ Build / 测试等)集成。
如果没有要求,那就在运行的时候不要使用lint,规避了很多问题,但也有可能隐藏了一些隐患。
如果不使用lint,可以右击项目,选择——>properties——>Android Lint Preference,在右边点击Configure Workspace Settings...—— >右边Run full error check...前面的勾取消,这样就好了。
简单说明下几个类型
以下内容转自http://androiddeveloper.diandian.com/post/2013-06-14/40050380131
常见类型:
一, Correctness:Messeges
(1)字符串国际化不完全
(2)国际化的字符串,在默认位置(default locale),没有定义
二,Correctness
(1)Xml中view的id重名
(2)代码中使用的某些API高于Manifest中的Min SDK
(3)字符串国际化中,同一名字的的String-Array对应的item值不相同 (4)Activity没有注册到Manifest
(5)使用已经废弃的api
(6)避免使用px,使用dp
(7)添加不需要的权限
三,Performance
(1) 避免在绘制或者解析布局(draw/layout)时,分配对象。eg,Ondraw()中实例化Paint().
(2)Layout中无用的参数。
(3)可优化的布局:如一个线性布局(一个Imageview和一个TextView),可被TextView和一个Compound Drawable代替。
(4)可优化的代码:如SparseArray可代替一个Interger2Object的Hashmap
(5)优化layout,比如如果子view都是wrap_content,则设置android:baselineAligned为false,则When set to false, prevents the layout from aligning its children's baselines.
(6)使用FloatMath代替Math,执行sin()和ceil(),以避免float的两次转换。
(7)Nested weight (内外均有weight)将拖累执行效果
(8)未被使用的资源
(9)Overdraw 即指定theme的activity会自己绘制背景,但是布局中会再一次设置背景
(10)View或view的父亲没有用
四,Security
(1)设置setJavascriptEnable将导致脚本攻击漏洞(XSS vulnerabilities)
五,Usability:Icons
(1) 图片尺寸在转换成不同dpi时,存在不能整除的问题,比如2*24px
(2)显示有些base 和browser的资源名不同,但图片内容完全相同。
六,Usability
(1)自定义view缺少默认的构造方法
七,Usability:Typography
(1)特殊字符需用编码代替,如“_”需要用“–”
八,Accessibility
(1)ImageView缺少src内容
关于解决lint检查出来的问题
转载自:http://blog.csdn.net/thl789/article/details/8036066
一、忽略XML文件中的问题
1.1 MissingPrefix问题
1.2 解决XML中的问题
可以在Lint Warnings View中解决(图中图标从左至右顺序)
Suppress this error with an annotation/attribute
点击该图标之后,直接更改了device_admin_sample.xml文件:
XML文件中直接增加了tools:ignore="MissingPrefix"。
Ignore in this file
在本文件中忽略,而在别的文件中仍然出现。
Ignore in this project
当前项目中都忽略该Issue。
执行之后,在本项目根目录下创建了lint.xml的文件,内容为:
- <?xml version="1.0"encoding="UTF-8"?>
- <lint>
- <issue id="MissingPrefix"severity="ignore" />
- </lint>
Always ignore
所有项目中都忽略。
二、解决Java代码中的问题
2.1 NewAPI问题
APIDemo中指明了支持最低API-1,但是代码里却用了API-3的接口,执行Lint会报错:2.2 解决问题
把光标放在报错代码处,会自动提示如何快速fix。
1. 前面红色圆角框内是用Javaannotation方式解决(API-16之后才有):@SuppressLint‘<IssueId>’或@TargetAPI(<api>)
@SuppressLint ‘<IssueId>’用来忽略<IssueId>。适用范围在所调用的方法处或整个类中。
@TargetAPI(<api>)用来指示API用给定的<api>,而不是项目中指定的。适用范围在所调用的方法处或整个类中。
2. 后面粉红色圆角框内同XML中解决方式——在本文件/ 本项目/ 全局范围内忽略检查。
三、命令行下解决问题
从上面Eclipse环境下的解决问题的方式知道,可以指定文件来定制Lint检查Issue的处理方式。
下面是一个lint.xml的例子:
<?xml version="1.0" encoding="UTF-8"?><lint> <!-- Disable the given check in thisproject --> <issue id="IconMissingDensityFolder" severity="ignore" /> <!-- Ignore the ObsoleteLayoutParamissue in the given files --> <issue id="ObsoleteLayoutParam"> <ignore path="res/layout/activation.xml" /> <ignore path="res/layout-xlarge/activation.xml" /> </issue> <!-- Ignore the UselessLeaf issue inthe given file --> <issue id="UselessLeaf"> <ignore path="res/layout/main.xml" /> </issue> <!-- Change the severity of hardcodedstrings to "error" --> <issue id="HardcodedText" severity="error" /></lint>
Lint.xml中关键是对issue(用id指定)的severity进行指定,并且可以指定该issue作用于指定的文件还是当前项目。
把lint.xml放在项目的根目录中,命令行执行lint时候,lint就会用lint.xml中的规则。
另外,执行lint时还可以用参数--config<fileName>指定一个全局的配置用于所有的项目。当项目中已有lint.xml,则对于某个issue而言,在lint.xml中没有对该issue特别定制的情况下,--config指定的文件<fileName>中的该issue的定制才起作用。
四、定制Lint检查的规则
Android-Lint有默认的检查和报错的规则,但通过上面的分析知道,可以在Eclipse或者命令行下改变这种规则,从而可以定制Lint检查的规则。
推荐定制的路线:
- 在Eclipse中基于现有的问题,逐个分析并解决,然后我们就能得到一个Eclipse自动生成的lint.xml这个定制文件;
- 然后这个lint.xml用于Eclipse和/或命令行下进行后续的检查;
- 后续发现的问题再进一步处理,逐步完善lint.xml这个定制文件。
当然,如果有足够的时间,完全也可以Review一遍Android-Lint已经支持的所有的Issue,对他们逐个进行定制。对这些Issue的 Review,也能加深我们对Android设计中问题解决和性能优化方法的理解。
注意:这里教你如何忽略Lint发现的问题,但你千万不要上来就忽略,关键还是要解决这些发现的问题。即便是要忽略,也要确保你已经明白他们的含义,以及自己在做的操作(有时候,隐患恰恰被你给忽略过去了)!
特别地,一旦项目组决定采用Android-Lint,定制Lint规则要有对项目和团队负责的专人来定制执行。Lint的目的是尽量多的暴露问题,解决问题,而个人会有刻意隐藏/规避错误的倾向。所以,验收的时候,用大家讨论认可的Lint规则做统一的执行检查。
- 关于android lint
- 关于Android lint
- 【lint】Android Lint简介
- 关于Android Lint的一些警告处理
- android 关于lint优化程序 错误类型
- Android lint
- Android Lint
- android lint
- Android Lint
- Android Lint
- Android Lint
- android lint
- Android Lint
- Android Lint
- Android Lint
- 【lint】Android Lint工具学习
- 关于Android SDK工具Lint的误报分析
- 代码优化------Android studio中关于lint工具的使用
- Cocos2d-x实现简易翻牌效果
- 关于路由中多点双发布路由时候出现路由环路的问题
- 常用js脚本 AJAX 手机号验证 限制checkbox 勾选个数 利用AJAX 做电话号码验证
- Candy
- unp代码在ubuntu10.04中需要作的更改
- 关于Android lint
- hdu4819 二维线段树
- 判断数据库向DataTable填充之后字段是否是空值
- POJ-3684 Labeling Balls
- hdoj.2077 汉诺塔IV 20140808
- 表达式求值
- spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)
- HDU 1166 敌兵布阵 (我的树状数组加线段树点修改模板)
- 函数名与函数指针