Android lint工具是一个静态的代码分析工具,用来检查代码中潜在的问题并且提高代码的正确性,安全性,可用性,国际化和性能。
确保代码中没有结构性的错误,发现潜在的问题。Android-Lint提供了命令行方式执行,还可与IDE(eclipse、Idea、AndroidStudio)集成,并提供了html形式的输出报告。Android-Lint可以方便的与项目中的其他自动系统(配置/ Build / 测试等)集成。
以AndroidStudio为例,当build应用时,lint就会再自动运行。并且如果报错的话就会停止build。我们可以在项目的gradle配置文件中配置lint选项
android {
lintOptions {
// set to true to turn off analysis progress reporting by lint
quiet true
// if true, stop the gradle build if errors are found
abortOnError false
// if true, only report errors
ignoreWarnings true
}
...
}
上面的代码代表静默执行,并且忽略lint报错。
当然,我们还可以手动执行lint ,操作Analyze > Inspect Code。
lint提供了命令行执行,不知道怎么执行的话可以 lint –help下。
Android-Lint所检查的潜在问题,可以通过命令行$lint –show来获得。可以参考这里:
http://tools.android.com/tips/lint
检查大概的格式是这样的:
lint [flags] <project directory>
最简单的一种用法:
lint Android项目目录
例子:
lint app/
Scanning 1.0.1: .....
Scanning 1.0.1 (Phase 2): ..
Scanning umengupdate-release: ......................................
Scanning unspecified: ...............................................
Scanning unspecified (Phase 2): ....................
build/intermediates/exploded-aar/umengupdate-release/res/layout/umeng_update_dialog.xml:47: Warning: Consider adding android:layout_marginEnd="8dp" to better support right-to-left layouts [RtlHardcoded]
android:layout_marginRight="8dp"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/intermediates/exploded-aar/com.afollestad/material-dialogs/0.7.3.1/AndroidManifest.xml: Warning: The project references RTL attributes, but does not explicitly enable or disable RTL support with android:supportsRtl in the manifest [RtlEnabled]
26 errors, 444 warnings
如下的命令可以检测在xml文件中没有命名前缀的错误:
lint --check MissingPrefix myproject
具体的命令请参考官网
http://developer.android.com/tools/help/lint.html
在AndroidStudio中,我们可以在 File > Settings > Project Settings中配置lint在我们项目中得配置。
引用官方文档中的一张图:
很直观的表达了lint.xml文件的作用,通过lint.xml和lint Tool共同作用就可以检查代码中的问题。
一个例子:
<lint>
<issue id="IconMissingDensityFolder" severity="ignore" />
<issue id="ObsoleteLayoutParam">
<ignore path="res/layout/activation.xml" />
<ignore path="res/layout-xlarge/activation.xml" />
issue>
<issue id="UselessLeaf">
<ignore path="res/layout/main.xml" />
issue>
<issue id="HardcodedText" severity="error" />
lint>
当然在Java代码中依然可以配置lint,例子:
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
上面的代码代表在onCreate方法中关闭lint检查”NewApi”,但是lint依然会检查没有 @SuppressLint(“NewApi”) 标记的其他方法。
类似的还有:
@SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {
关闭”ParserError”检查。
如果想关闭搜索的检查项,可以这样设置:
@SuppressLint("all")
在XML中,我们可以使用tools:ignore 来关闭相应lint检查项,要使用”tools:”,首先要加上相应地namespaces
namespace xmlns:tools="http://schemas.android.com/tools"
例子如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="UnusedResources" >
<TextView
android:text="@string/auto_update_prompt" />
LinearLayout>
避免检查没有用到的资源文件。同样地还有:
tools:ignore="NewApi,StringFormatInvalid"
相应地关闭所有的检查项:
tools:ignore="all"
lint工具对于个人开发者个人感觉用处相对不大,但是如果是团队项目,那么它的作用就很大了,因为每个人的代码习惯都是不一样的,并且会定义很多的资源文件,这样日积月累下来,apk的大小就会不必要的增大很多。个人感觉lint工具最重要的一个功能就是差unUseResources,可以删掉好多不用的资源文件,给apk瘦身。
检查结果在 Android Lint –> Unused resources.
这是我们项目中没用的资源文件,好多没用的图片啊!!
删掉之后清爽好多!