Android Lint — un analizzatore statico di codice integrato in Android Studio e Gradle che controlla i file sorgente secondo le raccomandazioni di Google. Lint trova potenziali errori prima della compilazione: risorse inutilizzate, problemi di prestazioni, perdite di memoria e incompatibilità API. Lo strumento analizza file XML, Java e Kotlin. Scopri di più su Android Lint Guide.
Punti chiave
Android Lint è uno strumento di analisi statica incluso nell'SDK Android e in Android Studio. Lint scansiona il codice sorgente dell'applicazione senza eseguirlo e trova problemi che il compilatore ignora: risorse inutilizzate, localizzazione errata, potenziali perdite di memoria, incompatibilità API con minSdkVersion e violazioni delle raccomandazioni sulle prestazioni di Google.
L'analisi statica è un metodo di verifica del software che non richiede l'esecuzione effettiva del codice. A differenza del compilatore, che controlla solo sintassi e tipi, un analizzatore statico cerca errori logici, anti-pattern e deviazioni dalle migliori pratiche. Lint esegue oltre 200 controlli integrati per categorie: correttezza, prestazioni, sicurezza, accessibilità, usabilità e I18N.
Lint funziona a più livelli: Analisi XML controlla layout, risorse (strings, colors, dimens), il manifest e i file di configurazione. Analisi Java/Kotlin esamina il codice sorgente per chiamate API obsolete, problemi di threading e perdite di contesto. Analisi Gradle controlla la configurazione di build per la compatibilità delle versioni.
Il controllo Lint viene avviato tramite Android Studio (Analyze > Inspect Code) o dal comando Gradle: ./gradlew lint. Il risultato è un report HTML nella cartella build/reports/lint-results.html e un report XML per i sistemi CI. Lint analizza ogni file indipendentemente, applicando un insieme di regole (Issues), ciascuna con un ID univoco, descrizione, categoria e livello di gravità.
Livelli di gravità di Lint: Error (blocca la build), Warning (influisce sulla qualità), Informational (per riferimento), Ignore (ignorato per impostazione predefinita). I livelli sono configurati in lint.xml. Gli errori di Lint possono essere configurati per far fallire la build Gradle quando presenti tramite 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 file che segna gli avvisi correnti come accettabili. Creato con il comando lint --baseline baseline.xml. Dopo aver aggiunto una baseline al progetto, Lint segnala solo i nuovi problemi. Questo è comodo per introdurre Lint in un progetto vecchio con centinaia di avvisi — il team corregge gli errori gradualmente.
lint.xml — un file di configurazione nella radice del progetto per personalizzare le regole Lint. Specifica le regole ignorate, i livelli di gravità e le eccezioni per file o directory specifici. Il file viene creato manualmente e applicato globalmente a tutti i moduli del progetto. Senza lint.xml, tutte le regole funzionano con le impostazioni predefinite.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Disabilita controllo risorse inutilizzate -->
<issue id="UnusedResources" severity="ignore" />
<!-- Aumenta gravità perdita di contesto -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Ignora nei file generati -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — un'annotazione per disabilitare Lint a livello di metodo o classe in Java/Kotlin. Esempio: @SuppressLint("SetTextI18n") per un metodo in cui il testo viene impostato dinamicamente in una TextView. L'annotazione @RequiresApi specifica il livello API minimo per un metodo — Lint non emetterà un avviso se minSdk supera il valore specificato.
L'integrazione CI di Lint è una pratica standard nello sviluppo Android. Il comando ./gradlew lint esegue l'analisi su tutti i moduli e genera report. Nelle configurazioni CI/CD (Jenkins, GitLab CI, GitHub Actions), Lint viene eseguito su ogni pull request. Se vengono trovati errori, la build fallisce e lo sviluppatore riceve una notifica con il report HTML di Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Il report HTML di Lint contiene una tabella di tutti i problemi trovati con categoria, ID regola, file, riga e descrizione. Il report è disponibile sul server CI o pubblicato come artefatto di build. Il report XML (lint-results.xml) viene utilizzato per l'integrazione con sistemi di analisi del codice (SonarQube, CodeClimate) e la creazione automatica di attività nei tracker (Jira, YouTrack).
Lint nelle pull request — configura GitHub Actions o GitLab CI in modo che Lint venga eseguito automaticamente quando viene creato un MR/PR. Se Lint trova errori, CI restituisce uno stato di fallimento e l'unione viene bloccata. Questo impedisce al codice problematico di entrare nel ramo principale e mantiene la qualità della base di codice.
Le categorie Lint coprono tutti gli aspetti dello sviluppo Android. Google divide le regole in 12 categorie, ciascuna responsabile di un tipo specifico di problema. Le categorie più importanti sono Correctness, Performance, Security e Accessibility. Gli sviluppatori devono conoscere i controlli chiave di ogni categoria per lavorare efficacemente con Lint.
| Categoria | Descrizione | Regola di esempio |
|---|---|---|
| Correctness | Errori che influenzano la funzionalità dell'applicazione | MissingPermission, WrongConstant |
| Performance | Problemi di prestazioni e memoria | UnusedResources, ViewHolder, DrawAllocation |
| Security | Vulnerabilità e violazioni della sicurezza | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Problemi di accessibilità per gli utenti | ContentDescription, TouchTargetSize |
| Usability | Usabilità ed esperienza utente | NotSibling, BackButton, HardcodedText |
| I18N | Internazionalizzazione e localizzazione | MissingTranslation, ExtraTranslation |
Le regole sulle prestazioni sono le più utili nella pratica. UnusedResources trova risorse dichiarate in XML ma non utilizzate nel codice. ViewHolder verifica che il pattern ViewHolder sia utilizzato negli adapter RecyclerView. DrawAllocation avverte sulla creazione di oggetti nel metodo onDraw. Correggere questi problemi riduce la dimensione dell'APK e accelera l'applicazione.
Le regole di sicurezza sono obbligatorie per le applicazioni pubblicate. ExportedContentProvider controlla se un ContentProvider è esportato senza protezione. WorldReadableFiles avverte sulla creazione di file accessibili a tutte le applicazioni. AllowBackup controlla il flag allowBackup nel manifest — si consiglia di disabilitarlo per la sicurezza dei dati.
Domande frequenti
Il compilatore controlla sintassi e tipi, traducendo il codice in bytecode per l'esecuzione. Lint analizza il codice senza compilazione e trova problemi logici che il compilatore ignora: variabili inutilizzate, perdite di risorse, problemi di localizzazione, violazioni delle prestazioni e incompatibilità API con minSdkVersion. Lint completa il compilatore ma non lo sostituisce.
Nei file XML, usa l'attributo tools:ignore con l'ID della regola: tools:ignore="UnusedResources". In Java/Kotlin, aggiungi l'annotazione @SuppressLint a un metodo o classe: @SuppressLint("SetTextI18n"). Per un'intera directory, configura lint.xml con un nodo issue e severity="ignore". Per l'intero progetto, configura lint.xml nella radice del modulo.
Lint baseline è un file XML che segna gli avvisi Lint correnti come accettabili. Viene creato con il comando ./gradlew lint -Pbaseline o tramite lintOptions.baselineFile in build.gradle. Dopo aver aggiunto una baseline, Lint segnala solo i nuovi problemi. Questo è comodo per introdurre Lint in progetti con codice legacy — il team corregge gli errori in modo iterativo.
Crea un nuovo modulo Java/Kotlin con dipendenze da lint-api e lint-checks della libreria com.android.tools.lint. Implementa una classe Detector per trovare problemi e una classe Issue per descriverli. Compila il modulo in un JAR, posizionalo nella cartella lintLibs del tuo progetto Android. Android Studio rileverà automaticamente le regole personalizzate.
Lint trova problemi che il compilatore non vede: perdite di contesto (Activity, Fragment), incompatibilità API con minSdkVersion, problemi di configurazione Gradle, icone PNG troppo grandi, mancanza di risorse alternative per diverse lingue e configurazioni schermo. Google Play raccomanda Lint prima della pubblicazione. Senza Lint, l'app potrebbe bloccarsi su dispositivi più vecchi.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche