Tips ‎ > ‎ Android Lint

Android Lint is a new tool introduced in ADT 16 (and Tools 16) which scans Android project sources for potential bugs. It is available both as a command line tool, as well as integrated with Eclipse (described below), and IntelliJ ( details ). The architecture is deliberately IDE independent so it will hopefully be integrated with other IDEs, with other build tools and with continuous integration systems as well. Here are some examples of the types of errors that it looks for: Missing translations (and unused translations)

Layout performance problems (all the issues the old layoutopt tool used to find, and more)

tool used to find, and more) Unused resources

Inconsistent array sizes (when arrays are defined in multiple configurations)

Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)

Icon problems (like missing densities, duplicate icons, wrong sizes, etc)

Usability problems (like not specifying an input type on a text field)

Manifest errors and many more.

See this document for a full list of the current checks performed by lint. For information on how to suppress specific lint warnings, see the suppressing warnings document

If you're interested in writing custom lint checks, see Writing New Lint Checks and Writing Custom Lint Rules Command Line Usage There is a command line tool in the SDK tools/ directory called lint . If you have the SDK tools/ directory on your path, you can invoke it as “ lint ”. Just point to a specific Android project directory. You can also point to a random directory, which (if it is not an Android project) will be searched recursively and all projects under that directory will be checked. (And you can also specify multiple projects separated by spaces).

$ lint /src/astrid/

Scanning GreenDroid-GoogleAPIs: ..

Scanning stream: ...

Scanning api: ...........................

Scanning GDCatalog: .......................

Scanning GreenDroid: ...........................................................

Scanning tests: ...

Scanning filters: ....

Scanning tests: .....

Scanning astrid: ....................................................................................................................................................

Scanning simple: .......

api/res/values-ca: Error: Locale ca is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]

astrid/res/values-ca: Error: Locale ca is missing translations for: DLG_cancel, DLG_dismiss, DLG_ok, EPr_deactivated... (117 more) [MissingTranslation]

api/res/values-cs: Error: Locale cs is missing translations for: sync_SPr_bgwifi_key, sync_SPr_forget_key, sync_SPr_interval_values, sync_SPr_logged_in_prefix... (2 more) [MissingTranslation]

(many lines omitted)

43 errors, 466 warnings Disabling Checks If you have the SDKdirectory on your path, you can invoke it as “”. Just point to a specific Android project directory. You can also point to a random directory, which (if it is not an Android project) will be searched recursively and all projects under that directory will be checked. (And you can also specify multiple projects separated by spaces).



You can disable a specific check, or a list of checks, by adding the --disable argument, e.g.

$ lint --disable MissingTranslation,UnusedIds,Usability:Icons /src/astrid/

Note that you can list categories as well, such as “Usability:Icons” above, which is the Icons subcategory of the Usability category. The “id” for each type of error is shown in brackets after the error message, such as “MissingTranslation” above.You can disable a specific check, or a list of checks, by adding the --disable argument, e.g.Note that you can list categories as well, such as “Usability:Icons” above, which is the Icons subcategory of the Usability category.

--enable flag.



Finally, you can specify which exact checks to run with the --check flag. This lets you look for a specific problem in the codebase, such as:

$ lint --check MissingPrefix /src/astrid/

To find out which id’s and categories are available, run

$ lint --list

Valid issue categories:

Correctness

Security

Performance

Usability

Usability:Icons

Accessibility

Internationalization



Valid issue id's:

"ContentDescription": Ensures that image widgets provide a contentDescription

"DuplicateIds": Checks for duplicate ids within a single layout

"StateListReachable": Looks for unreachable states in a <selector>

"InefficientWeight": Looks for inefficient weight declarations in LinearLayouts

"ScrollViewSize": Checks that ScrollViews use wrap_content in scrolling dimension

"MergeRootFrame": Checks whether a root <FrameLayout> can be replaced with a <merge> tag

...



And to get the explanation for a specific issue use the --show command along with a list of id’s or categories (or no arguments at all to see everything):



$ lint --show MissingPrefix

MissingPrefix

-------------

Summary: Detect XML attributes not using the Android namespace



Priority: 8 / 10

Severity: Warning

Category: Correctness



Most Android views have attributes in the Android namespace. When

referencing these attributes you *must* include the namespace prefix,

or your attribute will be interpreted by aapt as just a custom

attribute.

HTML Reports Some checks are disabled by default. These can be enabled by adding theflag.Finally, you can specify which exact checks to run with theflag. This lets you look for a specific problem in the codebase, such as:To find out which id’s and categories are available, runAnd to get the explanation for a specific issue use thecommand along with a list of id’s or categories (or no arguments at all to see everything):

It includes the longer explanations associated with each issue, and hyperlinks to More Info for issues which provide a more info attribute.

It includes the actual source code line with the error (and a window of 3 lines around it).

It can contain links to the associated source files

For icon errors, the icons themselves are shown in the report for comparison purposes To generate an HTML report, just add --html filename as an argument:

$ lint --html /tmp/report.html

By default, links to source files will just use local file:// path resources. You can remap the URLs to a different prefix with the --url option. For example:

$ lint --html /tmp/report.html --url /src/MyProj=http://buildserver/src/MyProj Other Command Line Options The command line tool can also generate HTML reports. This has some advantages over the plain lint output:To generate an HTML report, just addas an argument:By default, links to source files will just use local file:// path resources. You can remap the URLs to a different prefix with the --url option. For example: Run lint --help to get information on the available arguments. (2): Suppressing Lint Warnings Writing a Lint Check Subpages Č ą lint-html.png (139k) Nov 15, 2011, 8:16 AM Tor Norbye, v.1 ď