page.title=Improving Your Code with lint
parent.title=Debugging
parent.link=index.html
@jd:body

<div id="qv-wrapper">
    <div id="qv">
      <h2>In This Document</h2>

      <ol>
        <li><a href="#overview">Overview</a></li>
        <li><a href=#studio">Running lint from Android Studio</a></li>
        <li><a href=#commandline">Running lint from the command-line</a></li>
         <li><a href=#config">Configuring lint</a>
            <ol>
		<LI><a href="#studio_config">Configuring lint in Android Studio</a></LI>
                <LI><a href="#pref">Configuring the lint file</a></LI>
                <LI><a href="#src">Configuring lint checking in Java and XML source files</a></LI>
            </ol>
         </li>
      </ol>
      <h2>See Also</h2>
          <ol>
              <li><a href="{@docRoot}tools/help/lint.html">lint (reference)</a></li>
          </ol>
    </div>
</div>


<p>
In addition to testing that your Android application meets its functional requirements, it's important to ensure that your code has no structural problems. Poorly structured code can impact the reliability and efficiency of your Android apps and make your code harder to maintain. For example, if your XML resource files contain unused namespaces, this takes up space and incurs unnecessary processing. Other structural issues, such as use of deprecated elements or API calls that are not supported by the target API versions, might lead to code failing to run correctly.</p>

<h2 id="overview">Overview</h2>
<p>The Android SDK provides a code scanning tool called <a href="{@docRoot}tools/help/lint.html"><code>lint</code></a>
that can help you to easily identify and correct problems with the structural quality of your code, without having to execute the app or write any test cases. Each problem detected by the tool is reported with a description message and a severity level, so that you can quickly prioritize the critical improvements that need to be made.  You can also configure a problem's severity level to ignore issues that are not relevant for your project, or raise the severity level. The tool has a command-line interface, so you can easily integrate it into your automated testing process.</p>
<p>The {@code lint} tool checks your Android project source files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization. You can run {@code lint} from the command-line or from Android Studio.</p>

<p class="note"><strong>Note:</strong> In Android Studio, additional
<a href="https://www.jetbrains.com/idea/help/inspection-basics.html?search=inspection" class="external-link"
target="_blank">IntelliJ code inspections</a> run when your code is compiled in Android Studio to
streamline code review.</p>

<p>Figure 1 shows how the {@code lint} tool processes the application source files.</p>
<img id="Fig1" src="{@docRoot}images/tools/lint.png" alt="">
<p class="img-caption"><strong>Figure 1.</strong> Code scanning workflow with the {@code lint} tool</p>
<dl>
<dt><b>Application source files</b></dt>
<dd>The source files consist of files that make up your Android project, including Java and XML files, icons, and ProGuard configuration files. </dd>
<dt><b>The <code>lint.xml</code> file</b></dt>
<dd>A configuration file that you can use to specify any {@code lint} checks that you want to exclude and to customize problem severity levels.</dd>
<dt><b>The {@code lint} tool</b></dt>
<dd>A static code scanning tool that you can run on your Android project from the command-line or Android Studio.  The {@code lint} tool checks for structural code problems that could affect the quality and performance of your Android application. It is strongly recommended that you correct any errors that {@code lint} detects before publishing your application.</dd>
<dt><b>Results of {@code lint} checking</b></dt>
<dd>You can view the results from {@code lint} in the console or in the <strong>Event Log</strong> in Android Studio.  Each issue is identified by the location in the source files where it occurred and a description of the issue.</dd>
</dl>
<p>The {@code lint} tool is automatically installed as part of the Android SDK Tools revision 16 or higher.</p>


<h2 id="studio">Running lint in Android Studio</h2>
<p>In Android Studio, the configured <code>lint</code> and
IDE inspections run automatically whenever you build your app. The IDE inspections are
configured along with the {@code lint} checks to run
<a href="https://www.jetbrains.com/idea/help/inspection-basics.html?search=inspection" class="external-link"
target="_blank">IntelliJ code inspections</a> to streamline code review.</p>

<p class="note"><strong>Note:</strong> To view and modify inspection severity
levels, use the <strong>File &gt; Settings &gt; Project Settings</strong> menu to open the
<em>Inspection Configuration</em> page with a list of the supported inspections.</p>


<p>With Android Studio, you can also run {@code lint} inspections for a specific build variant,
or for all build variants from the <code>build.gradle</code> file. Add the
<code>lintOptions</code> property to the <code>android</code> settings in the build file.
This code snippet from a Gradle build file shows how to set the <code>quiet</code> option to
<code>true</code> and the <code>abortOnError</code> option to <code>false</code>. </p>

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


<p>To manually run inspections in Android Studio, from the application or right-click menu,
choose <strong>Analyze &gt; Inspect Code</strong>. The <em>Specify Inspections Scope</em> dialog
appears so you can specify the desired inspection scope and profile.</p>




<h2 id="commandline">Running lint from the Command-Line</h2>
<p>
To run {@code lint} against a list of files in a project directory:
<pre>lint [flags] &lt;project directory&gt;</pre>
<p>For example, you can issue the following command to scan the files under the {@code myproject} directory and its subdirectories. The issue ID  <code>MissingPrefix</code> tells {@code lint} to only scan for XML attributes that are missing the Android namespace prefix.</p>
<pre>lint --check MissingPrefix myproject </pre>
<p>To see the full list of flags and command-line arguments supported by the tool:</p>
<pre>lint --help</pre>
</p>

<h3>Example lint output</h3>
<p>The following example shows the console output when the {@code lint} command is run against a project called Earthquake.  </p>
<pre>
$ lint Earthquake

Scanning Earthquake: ...............................................................................................................................
Scanning Earthquake (Phase 2): .......
AndroidManifest.xml:23: Warning: &lt;uses-sdk&gt; tag appears after &lt;application&gt; tag [ManifestOrder]
  &lt;uses-sdk android:minSdkVersion="7" /&gt;
  ^
AndroidManifest.xml:23: Warning: &lt;uses-sdk&gt; 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]
  &lt;uses-sdk android:minSdkVersion="7" /&gt;
  ^
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
</pre>
<p>The output above lists four warnings and no errors in this project.  Three warnings ({@code ManifestOrder}, {@code UsesMinSdkAttributes}, and {@code UsesMinSdkAttributes}) were found in the project's <code>AndroidManifest.xml</code> file. The remaining warning ({@code IconMissingDensityFolder}) was found in the <code>Preferences.xml</code> layout file.</p>

<h2 id="config">Configuring lint</h2>
<p>By default, when you run a {@code lint} scan, the tool checks for all issues that are supported by {@code lint}.  You can also restrict the issues for {@code lint} to check and assign the severity level for those issues. For example, you can disable {@code lint} checking for specific issues that are not relevant to your project and configure {@code lint} to report non-critical issues at a lower severity level.</p>
<p>You can configure {@code lint} checking at different levels:</p>
<ul>
<LI>Globally, for the entire project</LI>
<li>Per project module</li>
<li>Per production module</li>
<li>Per test module</li>
<li>Per open files</li>
<li>Per class hierarchy</li>
<li>Per Version Control System (VCS) scopes</li>
</ul>

<h3 id="studio_config">Configuring lint in Android Studio</h3>
<p>Android Studio allows you to enable or disable individual inspections and configure
project-global, directory-specific, and file-specific settings for {@code lint}.</p>

<p>You can manage inspection profiles and configure inspection severity within Android Studio using
the <strong>File &gt; Settings &gt; Project Settings</strong> menu to open the <em>Inspections</em>
page with a list of the supported profiles and inspections.</p>
<p><img src="{@docRoot}images/tools/studio-inspections-config.png" alt="" /> </p>
<p class="img-caption"><strong>Figure 3.</strong> Inspection Configuration</p> 

<h4>Global preferences</h4>
<ol>
<li>To specify global project settings, select the project folder in the Project View and choose
<strong>Analyze &gt; Inspect Code</strong>.</li>

<li>Specify your inspection scope and profile, and click <b>OK</b>.</li>
</ol>
<p>The configured settings run the specified {@code lint} inspections. The {@code lint}
inspections are also run whenever you build and run your Android project and modules.</p>

<h4>Module and file-specific preferences</h4>
<ol>
<LI>Run the {@code lint} tool on your module by right-clicking on your module folder or file in the Project View and selecting  <strong>Analyze &gt; Inspect Code</strong>. This displays the {@code lint} inspection results
with a list of issues that {@code lint} detected in your module.</LI>
<li>From the <strong>Lint Warnings</strong> view, use the toolbar options to configure {@code lint} preferences for individual modules and files, and set the issue display options.</li>
</ol>


<h3 id="pref">Configuring the lint file</h3>
<p>You can specify your {@code lint} checking preferences in the <code>lint.xml</code> file.  If you are creating this file manually, place it in the root directory of your Android project.  If you are configuring {@code lint} preferences in Android Studio, the <code>lint.xml</code> file is automatically created and added to your Android project for you.</p>
<p>The <code>lint.xml</code> file consists of an enclosing <code>&lt;lint&gt;</code> parent tag that contains one or more children <code>&lt;issue&gt;</code> elements.  Each <code>&lt;issue&gt;</code> is identified by a unique <code>id</code> attribute value, which is defined by {@code lint}.</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;lint&gt;
        &lt;!-- list of issues to configure --&gt;
&lt;/lint&gt;
</pre>
<p>By setting the severity attribute value in the <code>&lt;issue&gt;</code> tag, you can disable {@code lint} checking for an issue or change the severity level for an issue.  </p>
<p class="note"><strong>Tip: </strong>To see the full list of issues supported by the {@code lint} tool and their corresponding issue IDs, run the <code>lint --list</code> command.</p>

<h4>Sample lint.xml file</h4>
<p>The following example shows the contents of a <code>lint.xml</code> file.</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;lint&gt;
    &lt;!-- Disable the given check in this project --&gt;
    &lt;issue id="IconMissingDensityFolder" severity="ignore" /&gt;

    &lt;!-- Ignore the ObsoleteLayoutParam issue in the specified files --&gt;
    &lt;issue id="ObsoleteLayoutParam"&gt;
        &lt;ignore path="res/layout/activation.xml" /&gt;
        &lt;ignore path="res/layout-xlarge/activation.xml" /&gt;
    &lt;/issue>

    &lt;!-- Ignore the UselessLeaf issue in the specified file --&gt;
    &lt;issue id="UselessLeaf"&gt;
        &lt;ignore path="res/layout/main.xml" /&gt;
    &lt;/issue&gt;

    &lt;!-- Change the severity of hardcoded strings to "error" --&gt;
    &lt;issue id="HardcodedText" severity="error" /&gt;
&lt;/lint&gt;
</pre>

<h3 id="src">Configuring lint checking in Java and XML source files</h3>
<p>You can disable {@code lint} checking from your Java and XML source files.</p>

<p class="note"><strong>Tip: </strong>If you are using Android Studio, you can use the
<strong>File &gt; Settings &gt; Project Settings &gt; Inspections</strong> feature to manage the
{@code lint} checking to your Java or XML source files.
</p>

<h4>Configuring lint checking in Java</h4>
<p>To disable {@code lint} checking specifically for a Java class or method in your Android project, add the <code>&#64;SuppressLint</code> annotation to that Java code. </p>
<p>The following example shows how you can turn off {@code lint} checking for the {@code NewApi} issue in the <code>onCreate</code> method.  The {@code lint} tool continues to check for the {@code NewApi} issue in other methods of this class.</p>
<pre>
&#64;SuppressLint("NewApi")
&#64;Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
</pre>
<p>The following example shows how to turn off {@code lint} checking for the {@code ParserError} issue in the <code>FeedProvider</code> class:</p>
<pre>
&#64;SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {
</pre>
<p>To suppress checking for all {@code lint} issues in the Java file, use the {@code all} keyword, like this:</p>
<pre>
&#64;SuppressLint("all")
</pre>

<h4>Configuring lint checking in XML</h4>
<p>You can use the <code>tools:ignore</code> attribute to disable {@code lint} checking for specific sections of your XML files.  In order for this attribute to be recognized by the {@code lint} tool, the following namespace value must be included in your XML file:</p>
<pre>
namespace xmlns:tools="http://schemas.android.com/tools"
</pre>
<p>The following example shows how you can turn off {@code lint} checking for the  {@code UnusedResources} issue for the <code>&lt;LinearLayout&gt;</code> element of an XML layout file.  The <code>ignore</code> attribute is inherited by the children elements of the parent element in which the attribute is declared. In this example, the {@code lint} check is also disabled for the child <code>&lt;TextView&gt;</code> element. </p>
<pre>
&lt;LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="UnusedResources" &gt;

    &lt;TextView
        android:text="&#64;string/auto_update_prompt" /&gt;
&lt;/LinearLayout&gt;
</pre>
<p>To disable more than one issue, list the issues to disable in a comma-separated string.  For example:</p>
<pre>
tools:ignore="NewApi,StringFormatInvalid"
</pre>
<p>To suppress checking for all {@code lint} issues in the XML element, use the {@code all} keyword, like this:</p>
<pre>
tools:ignore="all"
</pre>
