Skip to content

Most visited

Recently visited

navigation

Mejora tu código con Lint

Además de probar tu aplicación de Android para asegurarte de que cumpla con los requisitos funcionales, es importante que te asegures de que no existan problemas estructurales en el código. Un código con una estructura regular puede afectar la confiabilidad y la eficacia de tus apps de Android, y hacer que tu código sea más difícil de mantener. Por ejemplo, si tus archivos de recursos XML contienen espacios de nombres no usados, se ocupa espacio y se genera procesamiento innecesario. Otros problemas estructurales, como el uso de elementos que ya no estén disponibles o llamadas API no admitidas por las versiones de API de objetivo, pueden hacer que el código no se ejecute correctamente.

Información general

Android Studio ofrece una herramienta de escaneo de código denominada lint, que puede ayudarte a identificar y corregir problemas de calidad estructural de tu código sin necesidad de ejecutar la app o escribir casos de prueba. Cada problema detectado por la herramienta se transmite con un mensaje descriptivo y un nivel de seguridad, a fin de priorizar rápidamente las mejoras críticas necesarias. Además, puedes reducir el nivel de severidad de un problema para ignorar los problemas que no sean relevantes para tu proyecto, o elevar el nivel de severidad para destacar problemas específicos.

La herramienta lint comprueba los archivos de origen de tu proyecto de Android en busca de posibles errores y para realizar mejoras relacionadas con la precisión, la seguridad, el rendimiento, la usabilidad, la accesibilidad y la internacionalización. Cuando usas Android Studio, las inspecciones de lint y de IDE configuradas se ejecutan al compilar tu app. Sin embargo, puedes ejecutar inspecciones manualmente o ejecutar lint desde la línea de comandos.

Nota: Cuando tu código se compila en Android Studio, se ejecutan inspecciones de código IntelliJ adicionales para optimizar la revisión del código.

En la figura 1 se muestra la forma en que la herramienta lint procesa los archivos de origen de la aplicación.

Figura 1: Flujo de trabajo de escaneo de código con la herramienta lint.

Archivos de origen de la aplicación
Los archivos de origen son archivos que componen tu proyecto de Android, como archivos Java y XML, íconos y archivos de configuración de ProGuard.
Archivo lint.xml
Archivo de configuración que puedes usar para especificar cualquier comprobación de lint que desees excluir y para personalizar los niveles de severidad.
Herramienta lint
Herramienta de escaneo de código estático que puedes ejecutar en tu proyecto de Android, ya sea desde la línea de comandos o en Android Studio (consulta Ejecutar inspecciones manualmente). La herramienta lint verifica si existen problemas de código estructural que pueden afectar la calidad y el rendimiento de tu aplicación de Android. Te recomendamos mucho corregir cualquier error detectado por lint antes de publicar tu aplicación.
Resultados de la comprobación de lint
Puedes ver los resultados de lint en la consola o en la ventana Inspection Results, en Android Studio. Consulta Ejecutar inspecciones manualmente.

Ejecutar lint desde la línea de comandos

Para ejecutar lint en una lista de archivos de un directorio del proyecto, usa el siguiente comando:

lint [flags] <project directory>

Por ejemplo, puedes publicar el siguiente comando para escanear los archivos del directorio myproject y sus subdirectorios. El MissingPrefix de la ID del problema indica a lint que solo escanee los atributos XML faltantes en el prefijo del espacio de nombres de Android.

lint --check MissingPrefix myproject 

Para ver una lista completa de indicadores y argumentos de línea de comandos admitidos por la herramienta, usa el siguiente comando:

lint --help

Ejemplo de resultado de lint

En el siguiente ejemplo, se muestra el resultado de la consola cuando se ejecuta el comando de lint en un proyecto llamado “Earthquake”.

$ lint Earthquake

Scanning 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

En el resultado anterior aparecen cuatro advertencias y no se muestran errores: tres advertencias (ManifestOrder, UsesMinSdkAttributes y UnusedResources) en el archivo AndroidManifest.xml del proyecto y una (IconMissingDensityFolder) en el archivo de diseño Preferences.xml.

Ejecutar lint con Gradle

Si en tu proyecto se incluyen variantes de compilación, puedes usar el encapsulador de Gradle a fin de invocar la tarea lint para todas tus variantes Para ello, debes ingresar uno de los siguientes comandos del directorio raíz de tu proyecto:

Si deseas ejecutar la tarea lint únicamente para una variante de compilación específica, debes aplicar mayúscula al nombre de la variante y colocarle lint como prefijo.

gradlew lintDebug

Cuando la herramienta lint completa sus comprobaciones, se proporcionan dos rutas de acceso a las versiones XML y HTML del al informe de lint. Para obtener más información sobre cómo ejecutar tareas de Gradle desde la línea de comandos, consulta Compilar tu app desde la línea de comandos.

Configurar lint

En forma predeterminada, cuando ejecutas un escaneo de lint, la herramienta comprueba todos los errores que admite lint. También puedes restringir los errores que lint comprueba y asignar un nivel de severidad a cada uno de ellos. Por ejemplo, puedes inhabilitar la comprobación de lint de errores específicos que no son relevantes para tu proyecto y puedes configurar lint para que transmita problemas que no sean críticos cuyo nivel de severidad sea más bajo.

Puedes configurar la comprobación de lint para diferentes niveles:

Configurar lint en Android Studio

La herramienta lint integrada comprueba tu código mientras usas Android Studio. Puedes ver las advertencias y los errores de dos maneras:

Configurar el archivo de lint

Puedes especificar tus preferencias de comprobación de lint en el archivo lint.xml. Si creas este archivo manualmente, colócalo en el directorio raíz de tu proyecto de Android.

En el archivo lint.xml se incluye una etiqueta principal <lint> que contiene uno o más elementos <issue> secundarios. Lint define un valor de atributo id único para cada <issue>.

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

Puedes cambiar el nivel de severidad del problema o inhabilitar la comprobación del error por parte de lint configurando el atributo de gravedad en la etiqueta <issue>.

Sugerencia: Para ver una lista completa de errores admitidos por lint y sus ID de error correspondientes, ejecuta el comando lint --list.

Archivo lint.xml de ejemplo

En el siguiente ejemplo, se muestra el contenido de un archivo lint.xml.

<?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>

Configurar la comprobación de archivos de origen Java y XML por parte de lint

Puedes inhabilitar la comprobación de tus archivos Java y XML por parte de lint.

Sugerencia: Puedes administrar la función de comprobación de lint para tus archivos de origen Java o XML en el diálogo Default Preferences. Selecciona File > Other Settings > Default Settings y, en el subpanel izquierdo del diálogo Default Preferences, Editor > Inspections.

Configuración de la comprobación en Java por parte de lint

Si deseas inhabilitar la verificación de lint específicamente para una clase o método Java en tu proyecto Android, agrega la anotación @SuppressLint a ese código Java.

El siguiente ejemplo, se muestra la manera de desactivar la comprobación por parte de lint en busca del error de NewApi en el método onCreate. La herramienta lint continúa realizando la comprobación en busca del error de NewApi en otros métodos de esta clase.

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

En el siguiente ejemplo, se muestra la manera de desactivar la comprobación que realiza lint en busca del error ParserError en la clase FeedProvider:

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

Para eliminar la comprobación que realiza lint en busca de todos los errores en el archivo Java, usa la palabra clave all, como se observa a continuación:

@SuppressLint("all")

Configuración de la comprobación de lint en XML

Puedes usar el atributo tools:ignore para inhabilitar la comprobación que realiza lint en busca de secciones específicas de tus archivos XML. Ingresa el siguiente valor de espacio de nombres en el archivo lint.xml, de modo que la herramienta lint reconozca el atributo:

namespace xmlns:tools="http://schemas.android.com/tools"

En el siguiente ejemplo, se muestra la manera de desactivar la comprobación que realiza lint en busca del error UnusedResources en el elemento <LinearLayout> de un archivo de diseño XML. El atributo ignore es heredado por los elementos secundarios del elemento primario en el que se declara el atributo. En este ejemplo, la comprobación de lint también está inhabilitada para el elemento secundario <TextView>.

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

Para inhabilitar más de un error, enumera los errores que desees inhabilitar en una string separada por comas. Por ejemplo:

tools:ignore="NewApi,StringFormatInvalid"

Para eliminar la comprobación que realiza lint en busca de todos los errores en el elemento XML, usa la palabra clave all, como se observa a continuación:

tools:ignore="all"

Configurar las opciones de lint con Gradle

El complemento de Android para Gradle te permite configurar ciertas opciones de lint, como las comprobaciones que deben ejecutarse o ignorarse, a través del bloque lintOptions {} de tu archivo build.gradle de nivel de módulo. En el siguiente fragmento de código se muestran algunas propiedades que puedes configurar:

android {
  ...
  lintOptions {
    // Turns off checks for the issue IDs you specify.
    disable 'TypographyFractions','TypographyQuotes'
    // Turns on checks for the issue IDs you specify. These checks are in
    // addition to the default lint checks.
    enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
    // To enable checks for only a subset of issue IDs and ignore all others,
    // list the issue IDs with the 'check' property instead. This property overrides
    // any issue IDs you enable or disable using the properties above.
    check 'NewApi', 'InlinedApi'
    // If set to true, turns off analysis progress reporting by lint.
    quiet true
    // if set to true (default), stops the build if errors are found.
    abortOnError false
    // if true, only report errors.
    ignoreWarnings true
  }
}
...

Ejecutar inspecciones manualmente

Para ejecutar manualmente las inspecciones configuradas de lint y otras inspecciones IDE, selecciona Inspect Code > Analyze. Los resultados de la inspección aparecen en la ventana Inspection Results.

Establecer el alcance y el perfil de la inspección

Selecciona los archivos que desees analizar (alcance de inspección) y las inspecciones que quieras ejecutar (perfil de inspección), de la siguiente manera:

  1. En la vista de Android, abre tu proyecto y selecciona el proyecto, una carpeta o un archivo que desees analizar.
  2. Desde la barra de menú, selecciona Analyze > Inspect Code.
  3. En el diálogo Specify Inspection Scope, revisa la configuración. Especificar el alcance de la inspección

    Figura 2: Revisión de la configuración del alcance de la inspección.

    La combinación de opciones que aparecen en el diálogo Specify Inspection Scope varía según hayas seleccionado un proyecto, una carpeta o un archivo. Puedes seleccionar uno de los demás botones de selección para cambiar lo que se inspeccionará. Consulta el diálogo Specify Inspection Scope para ver una descripción de todos sus campos posibles.

    • Cuando seleccionas un proyecto, un archivo o un directorio, en el diálogo Specify Inspection Scope se muestra la ruta de acceso al Proyecto, Archivo o Directorio seleccionado.
    • Cuando seleccionas más de un proyecto, archivo o directorio, el diálogo Specify Inspection Scope muestra un botón de selección marcado para Selected files.
  4. En Inspection profile, conserva el perfil predeterminado (Project Default).
  5. Haz clic en OK para ejecutar la inspección. En la figura 3, se muestran los resultados de la inspección que realiza lint, y de otras inspecciones del IDE, mediante la ejecución de Inspect Code:

    Figura 3: Selección de un problema para ver su resolución.

  6. En la vista de árbol del subpanel izquierdo, observa los resultados de la inspección. Puedes expandir el árbol y seleccionar categorías y tipos de errores.

    En el subpanel derecho se muestra el informe de inspección para la categoría y el tipo de error o el problema seleccionado, y se proporcionan el nombre y la ubicación del error. Cuando es posible, en este informe se muestra información adicional; por ejemplo, una sinopsis del problema para ayudarte a corregirlo.

  7. En la vista de árbol del subpanel izquierdo, haz clic con el botón secundario del mouse en una categoría, un tipo o un error para abrir el menú contextual.

    Según el contexto, puedes aplicar todas o algunas de las siguientes opciones: ir al origen, excluir e incluir elementos seleccionados, eliminar problemas, editar configuración, administrar alertas de inspección y volver a ejecutar una inspección.

Para ver las descripciones de los botones de la barra de herramientas de la parte izquierda, los elementos del menú contextual y los campos de informe de inspección, observa Inspection Tool Window.

Usar un alcance personalizado

Puedes usar uno de los alcances personalizados incluidos en Android Studio, como se observa a continuación:

  1. En el diálogo Specify Inspection Scope, haz clic en Custom scope.
  2. Haz clic en la lista desplegable Custom scope para mostrar tus opciones.

    Seleccionar el alcance de la inspección

    Figura 4: Selección del alcance personalizado que se usará.

    • Project Files: todos los archivos del proyecto actual.
    • Project Production Files: solo los archivos de producción del proyecto actual.
    • Project Test Files: solo los archivos de prueba del proyecto actual. Consulta Ubicación y tipos de pruebas.
    • Open Files: solo los archivos que abriste en el proyecto actual.
    • Module <your-module>: solo los archivos de la carpeta del módulo correspondiente de tu proyecto actual.
    • Current File: solo el archivo actual de tu proyecto actual. Aparece cuando tienes un archivo o una carpeta seleccionada.
    • Class Hierarchy: cuando seleccionas esta opción y haces clic en OK, aparece un diálogo con todas las clases del proyecto actual. Usa el campo Search by Name del diálogo para filtrar y seleccionar las clases que se inspeccionarán. Si no filtras la lista de clases, la inspección de código realiza una inspección en todas ellas.
  3. Haz clic en OK.

Crear un alcance personalizado

Cuando deseas inspeccionar una selección de archivos y directorios que no se contemplen en ningún alcance personalizado actualmente disponible, puedes crear un alcance personalizado.

  1. En el diálogo Specify Inspection Scope, selecciona Custom scope.
  2. Haz clic en los tres puntos que aparecen después de la lista desplegable Custom Scope.

    Figura 5: Diálogo Specify Inspection Scope.

    Aparecerá el diálogo Scopes.

    Figura 6: Creación de un alcance personalizado.

  3. Haz clic en Add para definir un nuevo alcance.
  4. En la lista desplegable Add Scope resultante, selecciona Local.

    Ambos alcances, local y compartido, se usan dentro del proyecto para la función Inspect Code. Un alcance Compartido también se puede usar con otras funciones del proyecto que tienen un campo de alcance. Por ejemplo, cuando haces clic en Edit Settings para cambiar la configuración de Find Usages, en el diálogo resultante se incluye un campo Scope en el que puedes seleccionar el alcance compartido.

    Figura 7: Selección de un alcance compartido en el diálogo Find Usages.

  5. Asigna un nombre para el alcance y haz clic en OK.

    El subpanel derecho del diálogo Scopes se completa con opciones que te permiten definir el alcance personalizado.

  6. En la lista desplegable, selecciona Project.

    Aparecerá una lista de proyectos disponibles.

    Nota: Puedes crear el alcance personalizado para proyectos y paquetes. Los pasos son los mismos de cualquier manera.

  7. Expande las carpetas del proyecto, selecciona lo que desees agregar al alcance personalizado y haz clic en uno de los botones de la derecha.

    Figura 8: Definición de un alcance personalizado.

    • Include: incluir esta carpeta y sus archivos, pero no incluir ninguna de sus subcarpetas.
    • Include Recursively: incluir esta carpeta con todos sus archivos y las subcarpetas con sus archivos.
    • Exclude: excluir esta carpeta y sus archivos, pero no excluir ninguna de sus subcarpetas.
    • Exclude Recursively: excluir esta carpeta con todos sus archivos y las subcarpetas con sus archivos.

    En la figura 9 se muestra que se incluye la carpeta principal, y que la carpeta java se incluye de forma recursiva. El azul indica las carpetas incluidas parcialmente, y el verde indica las carpetas y los archivos incluidos de forma recursiva.

    Figura 9: Patrón de ejemplo para un alcance personalizado.

    • Si seleccionas la carpeta java y haces clic en Exclude Recursively, el resalte en verde desaparece de la carpeta java, y de todas las carpetas y archivos abarcados.
    • Si seleccionas el archivo MainActivity.java destacado en verde y haces clic en Exclude, MainActivity.java deja de destacarse en verde, pero todo lo demás dentro de la carpeta java continúa destacado con este color.
  8. Haz clic en OK. El alcance personalizado aparece en la parte inferior de la lista desplegable.

Revisar y editar perfiles de inspección

Android Studio incluye una selección de perfiles de lint y otros perfiles de inspección que se actualizan mediante actualizaciones de Android. Puedes usar estos perfiles como se encuentran o editar sus nombres, descripciones, niveles de severidad y alcances. También puedes activar y desactivar grupos enteros de perfiles o perfiles separados dentro de un grupo.

Para acceder al diálogo Inspections:

  1. Selecciona Analyze > Inspect Code.
  2. En el diálogo Specify Scope, en Inspection Profile, haz clic en More.

    Aparecerá el diálogo Inspections con una lista de inspecciones admitidas y sus descripciones.

    Figura 10: Inspecciones soportadas y descripciones

  3. Selecciona la lista desplegable Profile para activar o desactivar las inspecciones Default (Android Studio) y Project Default (proyecto activo). Para obtener más información, consulta la página Diálogo Specify Inspection Scope de IntelliJ.
  4. En el diálogo Inspections del subpanel izquierdo, selecciona una categoría de perfil de nivel superior o expande un grupo y selecciona un perfil específico. Cuando seleccionas una categoría de perfil, puedes editar todas las inspecciones de esa categoría como una única inspección.
  5. Selecciona la lista desplegable Manage para copiar inspecciones, cambiar sus nombres, agregarles descripciones, importarlas y exportarlas.
  6. Al terminar, haz clic en OK.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)