Android Lint — un analizador estático de código integrado en Android Studio y Gradle que verifica los archivos fuente según las recomendaciones de Google. Lint encuentra errores potenciales antes de la compilación: recursos no utilizados, problemas de rendimiento, fugas de memoria e incompatibilidad de API. La herramienta analiza archivos XML, Java y Kotlin. Más información en Android Lint Guide.
Puntos clave
Android Lint es una herramienta de análisis estático incluida en el SDK de Android y Android Studio. Lint escanea el código fuente de la aplicación sin ejecutarlo y encuentra problemas que el compilador pasa por alto: recursos no utilizados, localización incorrecta, posibles fugas de memoria, incompatibilidad de API con minSdkVersion y violaciones de las recomendaciones de rendimiento de Google.
El análisis estático es un método de verificación de software que no requiere la ejecución real del código. A diferencia del compilador, que solo verifica la sintaxis y los tipos, un analizador estático busca errores lógicos, antipatrones y desviaciones de las mejores prácticas. Lint realiza más de 200 verificaciones integradas en categorías: corrección, rendimiento, seguridad, accesibilidad, usabilidad e I18N.
Lint funciona en múltiples niveles: Análisis XML verifica diseños, recursos (strings, colors, dimens), el manifiesto y archivos de configuración. Análisis Java/Kotlin examina el código fuente en busca de llamadas a API obsoletas, problemas de hilos y fugas de contexto. Análisis Gradle verifica la configuración de compilación para la compatibilidad de versiones.
La verificación Lint se inicia a través de Android Studio (Analyze > Inspect Code) o mediante el comando de Gradle: ./gradlew lint. El resultado es un informe HTML en la carpeta build/reports/lint-results.html y un informe XML para sistemas CI. Lint analiza cada archivo de forma independiente, aplicando un conjunto de reglas (Issues), cada una con un ID único, descripción, categoría y nivel de gravedad.
Niveles de gravedad de Lint: Error (bloquea la compilación), Warning (afecta la calidad), Informational (para referencia), Ignore (ignorado por defecto). Los niveles se configuran en lint.xml. Los errores de Lint se pueden configurar para que la compilación de Gradle falle cuando estén presentes mediante lintOptions.abortOnError true.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — un archivo que marca las advertencias actuales como aceptables. Se crea con el comando lint --baseline baseline.xml. Después de agregar una baseline al proyecto, Lint solo reporta nuevos problemas. Esto es conveniente para introducir Lint en un proyecto antiguo con cientos de advertencias — el equipo corrige errores gradualmente.
lint.xml — un archivo de configuración en la raíz del proyecto para personalizar las reglas de Lint. Especifica reglas ignoradas, niveles de gravedad y excepciones para archivos o directorios específicos. El archivo se crea manualmente y se aplica globalmente a todos los módulos del proyecto. Sin lint.xml, todas las reglas funcionan con la configuración predeterminada.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Deshabilitar verificación de recursos no utilizados -->
<issue id="UnusedResources" severity="ignore" />
<!-- Aumentar gravedad de fuga de contexto -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Ignorar en archivos generados -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — una anotación para deshabilitar Lint a nivel de método o clase en Java/Kotlin. Ejemplo: @SuppressLint("SetTextI18n") para un método donde el texto se establece dinámicamente en un TextView. La anotación @RequiresApi especifica el nivel de API mínimo para un método — Lint no emitirá una advertencia si minSdk supera el valor especificado.
La integración CI de Lint es una práctica estándar en el desarrollo de Android. El comando ./gradlew lint ejecuta el análisis en todos los módulos y genera informes. En configuraciones CI/CD (Jenkins, GitLab CI, GitHub Actions), Lint se ejecuta en cada pull request. Si se encuentran errores, la compilación falla y el desarrollador recibe una notificación con el informe HTML de Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
El informe HTML de Lint contiene una tabla de todos los problemas encontrados con categoría, ID de regla, archivo, línea y descripción. El informe está disponible en el servidor CI o se publica como un artefacto de compilación. El informe XML (lint-results.xml) se utiliza para la integración con sistemas de análisis de código (SonarQube, CodeClimate) y la creación automática de tareas en rastreadores (Jira, YouTrack).
Lint en pull requests — configure GitHub Actions o GitLab CI para que Lint se ejecute automáticamente cuando se cree un MR/PR. Si Lint encuentra errores, CI devuelve un estado de fallo y se bloquea la fusión. Esto evita que el código problemático entre en la rama principal y mantiene la calidad de la base de código.
Las categorías de Lint cubren todos los aspectos del desarrollo de Android. Google divide las reglas en 12 categorías, cada una responsable de un tipo específico de problema. Las categorías más importantes son Correctness, Performance, Security y Accessibility. Los desarrolladores deben conocer las verificaciones clave de cada categoría para trabajar eficazmente con Lint.
| Categoría | Descripción | Regla de ejemplo |
|---|---|---|
| Correctness | Errores que afectan la funcionalidad de la aplicación | MissingPermission, WrongConstant |
| Performance | Problemas de rendimiento y memoria | UnusedResources, ViewHolder, DrawAllocation |
| Security | Vulnerabilidades y violaciones de seguridad | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Problemas de accesibilidad para usuarios | ContentDescription, TouchTargetSize |
| Usability | Usabilidad y experiencia de usuario | NotSibling, BackButton, HardcodedText |
| I18N | Internacionalización y localización | MissingTranslation, ExtraTranslation |
Las reglas de rendimiento son las más útiles en la práctica. UnusedResources encuentra recursos declarados en XML pero no utilizados en el código. ViewHolder verifica que se utilice el patrón ViewHolder en los adaptadores de RecyclerView. DrawAllocation advierte sobre la creación de objetos en el método onDraw. La corrección de estos problemas reduce el tamaño del APK y acelera la aplicación.
Las reglas de seguridad son obligatorias para las aplicaciones publicadas. ExportedContentProvider verifica si un ContentProvider está exportado sin protección. WorldReadableFiles advierte sobre la creación de archivos accesibles para todas las aplicaciones. AllowBackup verifica la bandera allowBackup en el manifiesto — se recomienda deshabilitarla para la seguridad de los datos.
Preguntas frecuentes
El compilador verifica la sintaxis y los tipos, traduciendo el código a bytecode para su ejecución. Lint analiza el código sin compilación y encuentra problemas lógicos que el compilador pasa por alto: variables no utilizadas, fugas de recursos, problemas de localización, violaciones de rendimiento e incompatibilidad de API con minSdkVersion. Lint complementa al compilador pero no lo reemplaza.
En archivos XML, use el atributo tools:ignore con el ID de la regla: tools:ignore="UnusedResources". En Java/Kotlin, agregue la anotación @SuppressLint a un método o clase: @SuppressLint("SetTextI18n"). Para un directorio completo, configure lint.xml con un nodo issue y severity="ignore". Para todo el proyecto, configure lint.xml en la raíz del módulo.
Lint baseline es un archivo XML que marca las advertencias actuales de Lint como aceptables. Se crea con el comando ./gradlew lint -Pbaseline o mediante lintOptions.baselineFile en build.gradle. Después de agregar una baseline, Lint solo reporta nuevos problemas. Esto es conveniente para introducir Lint en proyectos con código heredado — el equipo corrige errores de forma iterativa.
Cree un nuevo módulo Java/Kotlin con dependencias de lint-api y lint-checks de la biblioteca com.android.tools.lint. Implemente una clase Detector para encontrar problemas y una clase Issue para describirlos. Compile el módulo en un JAR, colóquelo en la carpeta lintLibs de su proyecto Android. Android Studio recogerá automáticamente las reglas personalizadas.
Lint encuentra problemas que el compilador no ve: fugas de contexto (Activity, Fragment), incompatibilidad de API con minSdkVersion, problemas de configuración de Gradle, iconos PNG sobredimensionados, falta de recursos alternativos para diferentes idiomas y configuraciones de pantalla. Google Play recomienda Lint antes de publicar. Sin Lint, la aplicación puede fallar en dispositivos antiguos.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también