lint.docx

上传人:b****5 文档编号:7544654 上传时间:2023-01-24 格式:DOCX 页数:13 大小:467.32KB
下载 相关 举报
lint.docx_第1页
第1页 / 共13页
lint.docx_第2页
第2页 / 共13页
lint.docx_第3页
第3页 / 共13页
lint.docx_第4页
第4页 / 共13页
lint.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

lint.docx

《lint.docx》由会员分享,可在线阅读,更多相关《lint.docx(13页珍藏版)》请在冰豆网上搜索。

lint.docx

lint

lint

一:

什么是lint

Androidlint是在ADT16提供的新工具,它是一个代码扫描工具,能够帮助我们识别代码结构存在的问题。

之前是layoutopt命令。

它有两种形式:

一个命令行工具,另一个集成于Eclipse中。

检查范围主要包括:

1)布局性能(以前是layoutopt工具,可以解决无用布局、嵌套太多、布局太多)

2)未使用到资源

3)不一致的数组大小

4)国际化问题(硬编码)

5)图标的问题(重复的图标,错误的大小)

6)Manifest文件的错误

二:

有什么特点

是一款使用起来非常简单的布局优化工具。

它是AndroidSDK带来了一个工具,它可以自动分析你的布局,发现可能并不需要的布局元素,以降低布局复杂度

三:

工具位置

在AndroidSDK中——工具目录:

/tools目录中的lint.bat工具

四:

使用

1:

命令行工具的使用

命令行工具运行:

运行lint工具是相当简单的,只需要跟上一个布局文件或布局文件所在目录作为参数,需要注意的是,这里你必须包括布局文件或目录的完整路径,即使你当前就位于这个目录

SDKtools/目录下一个叫lint的工具.

运行:

lintD:

\Andorid\WorkSpace\UICollection就会检查当前目录下的源码

HTML报告

命令行工具也能生成HTML报告.它有如下优势:

a.每个错误的代码都有更详细的解释,还有提供更多信息属性的超链接

b.能指出错误代码的所在的行数

c.它能直接定位到源码的链接

d.对于图标的错误,图标本身就显示在报告中,方便对比

e.TogenerateanHTMLreport,justadd--htmlfilenameasanargument:

生成HTML报告:

lint--html储存路径/report.html文件路径

运行lint--help获取其他参数可用的信息

 

仅检查布局文件:

步骤一

1.使用ALT+R——>cmd进入dos命令窗口,进入sdk的tools文件夹下(如D:

\adt-bundle-windows-x86_64-20130219\sdk\tools)

步骤二

2.输入命令(新版本是lint.bat)(SDK16下就是lint.bat)空格后加xml文件的全路径名

步骤三

根据工具给出的提示信息找出低效和无用的布局。

Lint命令后可以带一个或多个参数,参数之间用空格隔开,参数表示的是需要使用lint进行扫描的Android项目的目录

 

这里就会给出相应的意见,这个xml文件给出的提示是高度不应该使用px,应该用dp。

这个linearlayout布局或父布局没有用处,背景属性转移到其他视图

考虑将文本值制定android可选

图像内容描述属性丢失

 

2:

Eclipse中的使用

通过eclipse界面,一种方法是在点击Eclipse左上角的打勾的按钮来选择分析项目,另一种方式是选中一个Android工程,单击右键,在下拉菜单中选择“Androidtools”->"Runlint:

checkcommonerro",。

这个会打开一个包含有各种错误的Lint窗口.选择一个错误将会在右边的区域显示与之关联的解释.

你可以在Lint窗口中双击错误去定位到与之关联的源码,每个警告图标将显示其严重性,对于已经修复的警告,有一个小灯泡.

窗口也有一个操作栏(在右上方角落),它可以让你

再次运行lint检查并刷新结果(刷新的过程中会变成停止按钮,如果你想停止的话可以点击停止按钮)

如果存在,运行和此错误关联修复

 

报告信息简介:

Thecom.gl.listener.BaseListenerServiceisnotregisteredinthemanifest提示说这个service没有在manifest注册,查看这个服务是个基类服务,不需要注册的。

还有其他的service也是提示没注册的,其他的service是没有使用到的废弃的类,可以直接删除了,酱紫就缩减了项目。

 

查看了大部分警告信息,大都是无关紧要的提示,是google推荐我们的一些详细的具体的规范,但有时候这些规范不利于我们编码,so不一定要完全遵守,举个例子:

比如说使用ImageView控件的时候会提示我们需要一个contentDescription属性,但是我们完全可以不写这个属性。

里面的参数为描述信息(Description)、类型(category)、位置(location)。

生成错误报告后我们的项目会报错

TheresourceR.dimen.bottom_tab_padding_drawableappearstobeunused提示说这个资源没有被使用,意思就是说这些冗余的资源文件中的信息,我们不再使用了,可以删除了。

其他还有很多这样的信息。

依次排查。

经过大量的筛查可以精简项目文件。

下面还有一条performance类型的警告信息,这类型的警告信息就是影响性能的警示信息了,能处理的尽量处理掉,比如:

ThisLinearLayoutlayoutoritsRelativeLayoutparentispossiblyuseless。

本项目里面定位到layout文件查看,发现是布局顶层使用了一个RelativeLayout,然后包着一个LinearLayout作为子布局,其他所有布局控件均在这个LinearLayout内部,意思就是说这里的布局层级冗余了,顶层的相对布局和二层的线性布局有一个无济于事,意思就是多了一层无用的布局,可以去除掉一层。

我们这里的处理是删除最外层RL布局,这样做的好处是LL内部的布局是依赖LL来布局的,如果删除LL内部的布局务必需要调整为依赖RL,会大量修改,而删除RL则不会影响到LL内部的控件布局。

如果我们想把错误去掉,我们就可以点击对钩按钮下拉菜单的clearlintwarnings,我们可以看到界面恢复到原来没有错误的版本

另一种方法就是直接修改代码,把错误去掉。

这时我们就需要借助生成的错误分析报告。

来具体分析。

 

Android-Lint检查的潜在问题

  1问题描述--Issue

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

00000000000000000000000000000000000000000000000000000

  Issue分9类

Correctness(正确性)/

Correctness:

Messages消息/

Security(安全性)/

Performance(性能)/

Usability(可用性):

Typography排版格式/

Usability:

Icons(图标)/

Usability(可用性)/

Accessibility(辅助)/

Internationalization(国际化)。

  

  Issue以Severity来标识该Issue的危害程度:

Fatal(严重)/Error(错误)/Warning(警告)/Information(消息)/Ignore(忽略)。

对Issue的忽略操作其实也就是降低它的Severity为Ignore。

  2检查的潜在问题

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

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

plain代码

1.Correctness

  1)DuplicatedIds

  Layout中id应该唯一

  2)NewApi

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

  3)InconsistentArrays

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

  4)Registered

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

  5)Deprecated

  使用已经废弃的API

  6)PxUsage

避免使用px,使用dp

2.Correctness:

Messeges

  1)MissingTranslation

  字符串国际化不完全

  2)ExtraTranslation

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

3.Security

  1)SetJavaScriptEnabled

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

  2)ExportedContentProvider/ExportedReceiver/ExportedService/ExportedActivity

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

  3)HardcodedDebugMode

  不要在manifest中设置android:

debuggable。

  设置它,编译的任何版本都要采用指定的debug模式。

不设置,编译Eng版本采用debug模式;编译User版本采用release模式。

4.Performance

  1)DrawAllocation

  避免在绘制或者解析"

target="_blank"

class="relatedlink">布局(draw/layout)时分配对象。

E.g.,Ondraw()中实例化Paint对象。

  2)ObsoleteLayoutParam

  Layout中无用的参数。

  3)UseCompoundDrawables

  可优化的布局:

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

  4)UseSparseArrays

  尽量用Android的SparseArray代替Hashmap

  5)DisableBaselineAlignment

  如果LinearLayout被用于嵌套的layout空间计算,它的android:

baselineAligned属性应该设置成false,以加速layout计算。

  6)FloatMath

  使用FloatMath代替Math。

  7)NestedWeights

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

  8)UnusedResources/UnusedIds

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

  9)Overdraw

  如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。

  可以设置theme的background为null来避免。

  10)UselessLeaf/UselessParent

  View或view的父亲没有用

5.Usability:

Typography

  1)TypographyDashes

  特殊字符需用编码代替:

“–”需要用“–”;“—”需要用“—”

  2)TypographyEllipsis

  特殊字符需用编码代替:

“…”需要用“…”

  3)TypographyOther

  问题:

“(c)”需要用“©”

6.Usability:

Icons

  1)IconNoDpi

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

  2)GifUsage

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

7.Usability

  1)BackButton

  Android中不要设计有Back的"

target="_blank"class="relatedlink">按钮,Android中一般有Back的硬按键。

  2)ButtonCase

  Button的“Ok”/“Cancel”显示大小写一定,不要全大写或全小写。

有标准的资源的字符串,不要自己再定义,而要用系统定义的:

@android:

string/ok和@android:

string/cancel

8.Accessibility

  1)ContentDescription

  ImageView和ImageButton应该提供contentDescription内容描述

9.Internationalization

  1)HardcodeText

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

  2)EnforceUTF8

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

图标含义:

 

 

refresh,whichre-runsthecurrentanalysisonthesameprojects

刷新当前分析相同的项目

fix,whichautomaticallyfixestheissue(thisappliestoissueswhereaquickfixisavailable)自动修复这个问题(这适用于问题的quickfix可用在哪里)

suppressionthisissuewithanattributeorannotation

抑制这一问题有一个属性或注释

Ignoreinthisfile(savessuppressinformationinlint.xml)

忽略这个文件(保存在lint.xml抑制信息)

Ignoreinthisproject(ditto)

在这个项目上忽略(同上)

alwaysignore不处理

Deletethislintmarker删除这个lint标记

Deletealllintmarkers删除所有lint标记

Expand,collapse

configurecolumns用于设置在lintwindow中对于检查出的issue的那些项显示哪些项不显示

EditOptionsEditOptions点击该按钮会弹出lintPreferencedialog,

如上图,可以定制默认/全局的androidLint的基本检查规则,在其中可以设置所有项目默认的lint检查规则的检查级别,把检查级别(severity)设为ignore,其实就是忽略(suppress)该检查规则。

当你做如下操作时Lint将会自动运行:

a.导出APK.这样的话将在一个特殊的模式下运行lint。

它只能找出致命的错误(节省时间),如果发现致命的错误就会终止导出APK.

b.编辑和保存XML文件(例如layout文件或者manifest文件),这样的话,所有与之关联的文件都会重新检查

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1