Android Lint — ingebouwde statische code-analysator in Android Studio en Gradle die bronbestanden controleert op naleving van Google-aanbevelingen. Lint vindt potentiële fouten vóór compilatie: ongebruikte bronnen, prestatiefouten, geheugenlekken en API-incompatibiliteit. De tool analyseert XML-, Java- en Kotlin-bestanden. Meer op Android Lint Guide.
Belangrijkste punten
Android Lint — statische analysetool die deel uitmaakt van Android SDK en Android Studio. Lint scant de broncode van de app zonder deze uit te voeren en vindt problemen die de compiler mist: ongebruikte bronnen, onjuiste lokalisatie, potentiële geheugenlekken, API-incompatibiliteit met minSdkVersion en schending van Google-aanbevelingen voor prestaties.
Statische analyse — methode voor het controleren van software zonder daadwerkelijke uitvoering van code. In tegenstelling tot de compiler, die alleen syntax en types controleert, zoekt de statische analysator naar logische fouten, antipatronen en afwijkingen van best practices. Lint voert meer dan 200 ingebouwde controles uit in categorieën: correctness, performance, security, accessibility, usability en I18N.
Lint werkt op meerdere niveaus: XML-analyse controleert lay-outs (layout), bronnen (strings, colors, dimens), het manifest en configuratiebestanden. Java/Kotlin-analyse — broncode op aanroepen van verouderde API's, threadproblemen en contextlekken. Gradle-analyse — buildconfiguratie op versiecompatibiliteit.
Lint-controle wordt gestart via Android Studio (Analyze > Inspect Code) of Gradle-opdracht: ./gradlew lint. Resultaat — HTML-rapport in de map build/reports/lint-results.html en XML-rapport voor CI-systemen. Lint analyseert elk bestand onafhankelijk en past een reeks regels (Issue) toe, elk met een uniek ID, beschrijving, categorie en ernstniveau.
Ernstniveaus van Lint: Error (fout — blokkeert build), Warning (waarschuwing — beïnvloedt kwaliteit), Informational (informatie — ter informatie), Ignore (standaard genegeerd). Niveaus worden geconfigureerd in lint.xml. Lint-fouten kunnen zo worden ingesteld dat de Gradle-build mislukt wanneer ze aanwezig zijn via lintOptions.abortOnError true.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — bestand dat huidige waarschuwingen als acceptabel vastlegt. Wordt gemaakt met de opdracht lint --baseline baseline.xml. Na toevoeging van baseline aan het project rapporteert Lint alleen nieuwe problemen. Dit is handig voor het implementeren van Lint in een oud project met honderden waarschuwingen — het team lost fouten geleidelijk op.
lint.xml — configuratiebestand in de projectroot voor het instellen van Lint-regels. Het specificeert genegeerde regels, ernstniveaus en uitzonderingen voor specifieke bestanden of mappen. Het bestand wordt handmatig gemaakt en wereldwijd toegepast op alle projectmodules. Zonder lint.xml werken alle regels met standaardinstellingen.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Controle op ongebruikte bronnen uitschakelen -->
<issue id="UnusedResources" severity="ignore" />
<!-- Ernst van contextlek verhogen -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Negeren in gegenereerde bestanden -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — annotatie voor het uitschakelen van Lint op methode- of klasseniveau in Java/Kotlin. Voorbeeld: @SuppressLint("SetTextI18n") voor een methode waar tekst dynamisch wordt ingesteld in TextView. De @RequiresApi-annotatie specificeert het minimale API-niveau voor een methode — Lint geeft geen waarschuwing als minSdk hoger is dan de opgegeven waarde.
CI-integratie van Lint — standaardpraktijk in Android-ontwikkeling. De opdracht ./gradlew lint start de analyse van alle modules en genereert rapporten. In CI/CD-configuratie (Jenkins, GitLab CI, GitHub Actions) wordt Lint uitgevoerd bij elke pull request. Bij fouten mislukt de build en ontvangt de ontwikkelaar een melding met het HTML Lint-rapport.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
HTML-rapport van Lint bevat een tabel met alle gevonden problemen, inclusief categorie, regel-ID, bestand, regel en beschrijving. Het rapport is beschikbaar op de CI-server of wordt gepubliceerd als build-artefact. XML-rapport (lint-results.xml) wordt gebruikt voor integratie met code-analysesystemen (SonarQube, CodeClimate) en het automatisch aanmaken van taken in trackers (Jira, YouTrack).
Lint in pull request — configureer GitHub Actions of GitLab CI zodat Lint automatisch wordt uitgevoerd bij het maken van MR/PR. Als Lint fouten vindt, retourneert CI de status failure en wordt samenvoegen geblokkeerd. Dit voorkomt dat problematische code in de hoofdtak terechtkomt en handhaaft de kwaliteit van de codebase.
Lint-categorieën dekken alle aspecten van Android-ontwikkeling. Google verdeelt de regels in 12 categorieën, elk verantwoordelijk voor een specifiek type probleem. De belangrijkste categorieën zijn Correctness, Performance, Security en Accessibility. Voor een ontwikkelaar is het voldoende om de belangrijkste controles van elke categorie te kennen om effectief met Lint te werken.
| Categorie | Beschrijving | Voorbeeldregel |
|---|---|---|
| Correctness | Fouten die de werking van de app beïnvloeden | MissingPermission, WrongConstant |
| Performance | Prestatie- en geheugenproblemen | UnusedResources, ViewHolder, DrawAllocation |
| Security | Kwetsbaarheden en beveiligingsinbreuken | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Toegankelijkheidsproblemen voor gebruikers | ContentDescription, TouchTargetSize |
| Usability | Gebruiksvriendelijkheid en gebruikerservaring | NotSibling, BackButton, HardcodedText |
| I18N | Internationalisatie en lokalisatie | MissingTranslation, ExtraTranslation |
Performance-regels — het meest nuttig in de praktijk. UnusedResources vindt bronnen die in XML zijn gedeclareerd maar niet in code worden gebruikt. ViewHolder controleert of in RecyclerView-adapters het ViewHolder-patroon wordt gebruikt. DrawAllocation waarschuwt voor het maken van objecten in de onDraw-methode. Het oplossen van deze problemen vermindert de APK-grootte en versnelt de app.
Security-regels zijn verplicht voor gepubliceerde apps. ExportedContentProvider controleert of ContentProvider zonder bescherming is geëxporteerd. WorldReadableFiles waarschuwt voor het maken van bestanden die toegankelijk zijn voor alle apps. AllowBackup controleert de allowBackup-vlag in het manifest — het wordt aanbevolen deze uit te schakelen voor gegevensbeveiliging.
Veelgestelde vragen
De compiler controleert syntax en types en vertaalt code naar bytecode voor uitvoering. Lint analyseert code zonder compilatie en vindt logische problemen die de compiler mist: ongebruikte variabelen, resourcelekken, lokalisatieproblemen, prestatieovertredingen en API-incompatibiliteit met minSdkVersion. Lint vult de compiler aan, maar vervangt deze niet.
Gebruik in XML-bestanden het attribuut tools:ignore met de regel-ID: tools:ignore="UnusedResources". Voeg in Java/Kotlin de annotatie @SuppressLint toe op een methode of klasse: @SuppressLint("SetTextI18n"). Configureer voor een hele map lint.xml met het issue-knooppunt en severity="ignore". Configureer voor het hele project lint.xml in de module-root.
Lint baseline — XML-bestand dat huidige Lint-waarschuwingen als acceptabel vastlegt. Het wordt gemaakt met de opdracht ./gradlew lint -Pbaseline of via lintOptions.baselineFile in build.gradle. Na toevoeging van baseline rapporteert Lint alleen nieuwe problemen. Dit is handig voor het implementeren van Lint in projecten met erfcode — het team lost fouten iteratief op.
Maak een nieuwe Java/Kotlin-module met afhankelijkheden van lint-api en lint-checks uit de bibliotheek com.android.tools.lint. Implementeer de klasse Detector voor het vinden van problemen en de klasse Issue voor het beschrijven ervan. Bouw de module naar een JAR, plaats deze in de lintLibs-map van uw Android-project. Android Studio accepteert automatisch aangepaste regels.
Lint vindt problemen die de compiler niet ziet: contextlekken (Activity, Fragment), API-incompatibiliteit met minSdkVersion, Gradle-configuratieproblemen, te grote PNG-pictogrammen, ontbrekende alternatieve bronnen voor verschillende talen en schermconfiguraties. Google Play beveelt Lint aan vóór publicatie. Zonder Lint kan de app crashen op oudere apparaten.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook