使用Android Lint来改善你的代码

来源:互联网 发布:中国民营企业调查数据 编辑:程序博客网 时间:2024/06/05 09:46

为了保证你的代码满足功能需求,首先需要保证的是你的代码没有结构性问题,结构性很差的代码会影响Android应用的可靠性和效率,使得代码变得很难维护,例如:如果你的XML资源文件包含了没有使用的命名空间,这将不仅会占用空间而且会导致不必要的处理。其他的结构性问题,例如:如果废弃的API被调用,这些API不被目标版本API所支持,这就会导致代码无法正常运行。

Android SDK提供了一个叫做lint的代码扫描工具,在不运行程序或者写任何测试用例的情况下,它可以很容易的帮我们指出代码中结构性的问题,所有被检测出来的问题都会带有描述信息和严重级别,这样你就可以迅速的及其进行改善,另外你也可以去配置一个问题的严重级别来忽略那些你项目中不相关的问题,当前你也可以去提高严重级别。这个工具有一个命令行接口,这样你可以很容易的将它合到你的自动化检测进程中。

这个lint工具可以对于那些潜在的bug、优化的提高、安全性、性能、可用性、可访问性和国际化来检测你的Android项目的源文件,你可以从命令行或者Android Studio来运行lint。

这里写图片描述

应用源文件
项目文件包括java文件、XML文件、icon、ProGuard配置文件。

lint.xml文件
自定义配置文件,在这个文件里面可以自定义需要排除或者自定义的严重级别。

lint工具
静态代码扫描工具,可以运行在命令行或者Android Studio中。

lint检查结果
可以在控制台或者Android Studio中的Event Log中查看扫描结果.

一、在Android Studio中运行lint
在Android Studio中,配置好的lint和IDE审查会在你构建应用的时候自动运行,lint的配置如下,在build.gradle文件中为android设置添加lintOptions属性。

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       }       ...    }

另外,如果需要在Android Studio中手动的运行审查项,只需要选择Analyze > Inspect Code,然后在弹出的对话框中选择审查范围就行。

二、在命令行中运行lint

lint [flags] <project directory>

例如:

lint --check MissingPrefix myproject 

这条命令表明审查myproject项目中的文件,MissingPrefix表明只扫描xml文件中没有android命名空间的属性。

帮助命令

lint --help

下面举一个例子,当使用lint检查项目Earthquake,输出信息如下:

$ lint EarthquakeScanning Earthquake: ...............................................................................................................................Scanning Earthquake (Phase 2): .......AndroidManifest.xml:23: Warning: <uses-sdk> tag appears after <application> tag [ManifestOrder]  <uses-sdk android:minSdkVersion="7" />  ^AndroidManifest.xml:23: Warning: <uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?" [UsesMinSdkAttributes]  <uses-sdk android:minSdkVersion="7" />  ^res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]res: Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]0 errors, 4 warnings

上面的输出只有警告没有错误.

三、lint在Android Studio中的配置
打开File > Settings,选择Inspections选项就可以看到配置界面了,这样就可以设置相应的规则了。

四、Lint文件的配置
你也可以使用lint.xml文件来指定检查规则,其实上面通过Android Studio来设置,它会自动创建一个lint.xml文件并且加到我们的Android项目中。

文件结构如下:

<?xml version="1.0" encoding="UTF-8"?>    <lint>        <!-- list of issues to configure --></lint>

例如:

<?xml version="1.0" encoding="UTF-8"?><lint>    <!-- Disable the given check in this project -->    <issue id="IconMissingDensityFolder" severity="ignore" />    <!-- Ignore the ObsoleteLayoutParam issue in the specified files -->    <issue id="ObsoleteLayoutParam">        <ignore path="res/layout/activation.xml" />        <ignore path="res/layout-xlarge/activation.xml" />    </issue>    <!-- Ignore the UselessLeaf issue in the specified file -->    <issue id="UselessLeaf">        <ignore path="res/layout/main.xml" />    </issue>    <!-- Change the severity of hardcoded strings to "error" -->    <issue id="HardcodedText" severity="error" /></lint>

每条规则就是一个issue,另外,我们可以通过lint –list来查看lint工具所支持的issue列表。

五、在Java和XML中配置lint

如果希望忽略Android项目中的某些java类或者方法的检测,可以在指定的代码中加入@SuppressLint,例如:

@SuppressLint("NewApi")@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);

它表示关闭lint对onCreate的NewApi的检测。

@SuppressLint("ParserError")public class FeedProvider extends ContentProvider {

这个代码表示关闭lint检查FeedProvider的ParserError。

@SuppressLint("all")

表示关闭所有的issue的检测。

在XML中可以使用tools:ignore去关闭lint对xml具体某个区域的检测。
在xml中需要包括下面这个命名空间:

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>

上面这个代码会关闭lint对xml中LinearLayout里面的所有控件的UnusedResources这个issue的检测。如果希望关闭对所有issue的检测,只需要是使用下面代码:

tools:ignore="all"

原文链接:

Improving Your Code with lint

0 0
原创粉丝点击