Android Lint — analizor static de cod încorporat în Android Studio și Gradle, care verifică fișierele sursă pentru conformitatea cu recomandările Google. Lint găsește erori potențiale înainte de compilare: resurse neutilizate, probleme de performanță, scurgeri de memorie și incompatibilitate API. Instrumentul analizează fișiere XML, Java și Kotlin. Mai multe pe Android Lint Guide.
Principalele
Android Lint — instrument de analiză statică care face parte din Android SDK și Android Studio. Lint scanează codul sursă al aplicației fără a-l executa și găsește probleme pe care compilatorul le omite: resurse neutilizate, localizare incorectă, scurgeri potențiale de memorie, incompatibilitate API cu minSdkVersion și încălcarea recomandărilor Google privind performanța.
Analiza statică — metodă de verificare a software-ului fără executarea efectivă a codului. Spre deosebire de compilator, care verifică doar sintaxa și tipurile, analizorul static caută erori logice, anti-patternuri și abateri de la cele mai bune practici. Lint execută peste 200 de verificări încorporate pe categorii: correctness, performance, security, accessibility, usability și I18N.
Lint funcționează la mai multe niveluri: Analiza XML verifică layout-urile, resursele (strings, colors, dimens), manifestul și fișierele de configurare. Analiza Java/Kotlin — codul sursă pentru apeluri API învechite, probleme cu firele de execuție și scurgeri de context. Analiza Gradle — configurarea compilării pentru compatibilitatea versiunilor.
Verificarea Lint se rulează prin Android Studio (Analyze > Inspect Code) sau comanda Gradle: ./gradlew lint. Rezultatul — raport HTML în folderul build/reports/lint-results.html și raport XML pentru sistemele CI. Lint analizează fiecare fișier independent, aplicând un set de reguli (Issue), fiecare având un ID unic, descriere, categorie și nivel de severitate.
Niveluri de severitate Lint: Error (eroare — blochează compilarea), Warning (avertisment — afectează calitatea), Informational (informație — pentru cunoștință), Ignore (ignorat implicit). Nivelurile se configurează în lint.xml. Erorile Lint pot fi configurate astfel încât compilarea Gradle să eșueze când sunt prezente prin lintOptions.abortOnError true.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — fișier care fixează avertismentele curente ca fiind acceptabile. Se creează cu comanda lint --baseline baseline.xml. După adăugarea baseline în proiect, Lint raportează doar problemele noi. Acest lucru este util pentru implementarea Lint într-un proiect vechi cu sute de avertismente — echipa corectează erorile treptat.
lint.xml — fișier de configurare în rădăcina proiectului pentru setarea regulilor Lint. Se specifică regulile ignorate, nivelurile de severitate și excepțiile pentru fișiere sau directoare specifice. Fișierul se creează manual și se aplică global la toate modulele proiectului. Fără lint.xml toate regulile funcționează cu setările implicite.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Dezactivează verificarea resurselor neutilizate -->
<issue id="UnusedResources" severity="ignore" />
<!-- Crește severitatea scurgerii de context -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Ignoră în fișierele generate -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — adnotare pentru dezactivarea Lint la nivel de metodă sau clasă în Java/Kotlin. Exemplu: @SuppressLint("SetTextI18n") pentru o metodă unde textul este setat dinamic în TextView. Adnotarea @RequiresApi specifică nivelul minim API pentru o metodă — Lint nu va emite un avertisment dacă minSdk este mai mare decât valoarea specificată.
Integrarea CI Lint — practică standard în dezvoltarea Android. Comanda ./gradlew lint rulează analiza tuturor modulelor și generează rapoarte. În configurația CI/CD (Jenkins, GitLab CI, GitHub Actions) Lint se rulează la fiecare pull request. La apariția erorilor, compilarea eșuează, iar dezvoltatorul primește o notificare cu raportul HTML Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Raportul HTML Lint conține un tabel cu toate problemele găsite, având categorie, ID regulă, fișier, linie și descriere. Raportul este disponibil pe serverul CI sau publicat ca artefact de compilare. Raportul XML (lint-results.xml) este utilizat pentru integrarea cu sistemele de analiză a codului (SonarQube, CodeClimate) și crearea automată de sarcini în trackere (Jira, YouTrack).
Lint în pull request — configurați GitHub Actions sau GitLab CI astfel încât Lint să ruleze automat la crearea MR/PR. Dacă Lint găsește erori, CI returnează statusul failure, iar îmbinarea este blocată. Acest lucru previne intrarea codului problematic în ramura principală și menține calitatea bazei de cod.
Categoriile Lint acoperă toate aspectele dezvoltării Android. Google împarte regulile în 12 categorii, fiecare responsabilă pentru un anumit tip de problemă. Cele mai importante categorii sunt Correctness, Performance, Security și Accessibility. Dezvoltatorului îi este suficient să cunoască verificările cheie ale fiecărei categorii pentru a lucra eficient cu Lint.
| Categorie | Descriere | Exemplu regulă |
|---|---|---|
| Correctness | Erori care afectează funcționarea aplicației | MissingPermission, WrongConstant |
| Performance | Probleme de performanță și memorie | UnusedResources, ViewHolder, DrawAllocation |
| Security | Vulnerabilități și încălcări de securitate | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Probleme de accesibilitate pentru utilizatori | ContentDescription, TouchTargetSize |
| Usability | Usabilitate și experiență utilizator | NotSibling, BackButton, HardcodedText |
| I18N | Internaționalizare și localizare | MissingTranslation, ExtraTranslation |
Regulile Performance — cele mai utile în practică. UnusedResources găsește resurse declarate în XML dar neutilizate în cod. ViewHolder verifică dacă în adaptoarele RecyclerView se folosește pattern-ul ViewHolder. DrawAllocation avertizează despre crearea de obiecte în metoda onDraw. Eliminarea acestor probleme reduce dimensiunea APK și accelerează funcționarea aplicației.
Regulile Security sunt obligatorii pentru aplicațiile publicate. ExportedContentProvider verifică dacă ContentProvider este exportat fără protecție. WorldReadableFiles avertizează despre crearea fișierelor accesibile tuturor aplicațiilor. AllowBackup verifică flag-ul allowBackup din manifest — se recomandă dezactivarea lui pentru securitatea datelor.
Întrebări frecvente
Compilatorul verifică sintaxa și tipurile, translatând codul în bytecode pentru execuție. Lint analizează codul fără compilare și găsește probleme logice pe care compilatorul le omite: variabile neutilizate, scurgeri de resurse, probleme de localizare, încălcări de performanță și incompatibilități API cu minSdkVersion. Lint completează compilatorul, dar nu îl înlocuiește.
În fișierele XML folosiți atributul tools:ignore cu ID-ul regulii: tools:ignore="UnusedResources". În Java/Kotlin adăugați adnotarea @SuppressLint pe metodă sau clasă: @SuppressLint("SetTextI18n"). Pentru un întreg director configurați lint.xml cu nodul issue și severity="ignore". Pentru întregul proiect configurați lint.xml în rădăcina modulului.
Lint baseline — fișier XML care fixează avertismentele Lint curente ca fiind acceptabile. Se creează cu comanda ./gradlew lint -Pbaseline sau prin lintOptions.baselineFile în build.gradle. După adăugarea baseline, Lint raportează doar problemele noi. Este util pentru implementarea Lint în proiecte cu cod moștenit — echipa corectează erorile iterativ.
Creați un modul Java/Kotlin nou cu dependențe de lint-api și lint-checks din biblioteca com.android.tools.lint. Implementați clasa Detector pentru găsirea problemelor și clasa Issue pentru descrierea lor. Compilați modulul într-un JAR, plasați în folderul lintLibs al proiectului Android. Android Studio va prelua automat regulile personalizate.
Lint găsește probleme pe care compilatorul nu le vede: scurgeri de context (Activity, Fragment), incompatibilitate API cu minSdkVersion, probleme de configurare Gradle, iconițe PNG prea mari, lipsa resurselor alternative pentru diferite limbi și configurații ecran. Google Play recomandă Lint înainte de publicare. Fără Lint, aplicația se poate bloca pe dispozitive vechi.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și