Android Lint — ein in Android Studio und Gradle integrierter statischer Code-Analysator, der Quelldateien gemäß den Google-Empfehlungen prüft. Lint findet potenzielle Fehler vor der Kompilierung: ungenutzte Ressourcen, Leistungsprobleme, Speicherlecks und API-Inkompatibilität. Das Tool analysiert XML-, Java- und Kotlin-Dateien. Weitere Informationen finden Sie im Android Lint Guide.
Wichtige Erkenntnisse
Android Lint ist ein statisches Analysewerkzeug, das im Android SDK und Android Studio enthalten ist. Lint scannt den Quellcode der Anwendung, ohne ihn auszuführen, und findet Probleme, die der Compiler übersieht: ungenutzte Ressourcen, falsche Lokalisierung, potenzielle Speicherlecks, API-Inkompatibilität mit minSdkVersion und Verstöße gegen die Leistungsempfehlungen von Google.
Statische Analyse ist eine Software-Überprüfungsmethode, die keine tatsächliche Code-Ausführung erfordert. Im Gegensatz zum Compiler, der nur Syntax und Typen prüft, sucht ein statischer Analysator nach logischen Fehlern, Anti-Patterns und Abweichungen von bewährten Verfahren. Lint führt über 200 integrierte Prüfungen in Kategorien durch: Correctness, Performance, Security, Accessibility, Usability und I18N.
Lint arbeitet auf mehreren Ebenen: XML-Analyse prüft Layouts, Ressourcen (strings, colors, dimens), das Manifest und Konfigurationsdateien. Java/Kotlin-Analyse untersucht den Quellcode auf veraltete API-Aufrufe, Threading-Probleme und Kontextlecks. Gradle-Analyse prüft die Build-Konfiguration auf Versionskompatibilität.
Die Lint-Prüfung wird über Android Studio (Analyze > Inspect Code) oder den Gradle-Befehl gestartet: ./gradlew lint. Das Ergebnis ist ein HTML-Bericht im Ordner build/reports/lint-results.html und ein XML-Bericht für CI-Systeme. Lint analysiert jede Datei unabhängig und wendet eine Reihe von Regeln (Issues) an, jede mit einer eindeutigen ID, Beschreibung, Kategorie und Schweregrad.
Lint-Schweregrade: Error (Fehler — blockiert den Build), Warning (Warnung — beeinträchtigt die Qualität), Informational (Information — zur Referenz), Ignore (standardmäßig ignoriert). Die Stufen werden in lint.xml konfiguriert. Lint-Fehler können so konfiguriert werden, dass der Gradle-Build bei ihrem Vorhandensein über lintOptions.abortOnError true fehlschlägt.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — eine Datei, die aktuelle Warnungen als akzeptabel markiert. Erstellt mit dem Befehl lint --baseline baseline.xml. Nach dem Hinzufügen einer Baseline zum Projekt meldet Lint nur noch neue Probleme. Dies ist praktisch für die Einführung von Lint in einem alten Projekt mit Hunderten von Warnungen — das Team behebt Fehler schrittweise.
lint.xml — eine Konfigurationsdatei im Projektstamm zur Anpassung von Lint-Regeln. Sie legt ignorierte Regeln, Schweregrade und Ausnahmen für bestimmte Dateien oder Verzeichnisse fest. Die Datei wird manuell erstellt und global auf alle Module des Projekts angewendet. Ohne lint.xml arbeiten alle Regeln mit Standardeinstellungen.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Prüfung ungenutzter Ressourcen deaktivieren -->
<issue id="UnusedResources" severity="ignore" />
<!-- Schweregrad von Kontextlecks erhöhen -->
<issue id="StaticFieldLeak" severity="error" />
<!-- In generierten Dateien ignorieren -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — eine Annotation zum Deaktivieren von Lint auf Methoden- oder Klassenebene in Java/Kotlin. Beispiel: @SuppressLint("SetTextI18n") für eine Methode, bei der Text dynamisch in einem TextView gesetzt wird. Die Annotation @RequiresApi gibt das minimale API-Level für eine Methode an — Lint gibt keine Warnung aus, wenn minSdk den angegebenen Wert überschreitet.
Die CI-Integration von Lint ist eine Standardpraxis in der Android-Entwicklung. Der Befehl ./gradlew lint führt die Analyse aller Module durch und erstellt Berichte. In CI/CD-Konfigurationen (Jenkins, GitLab CI, GitHub Actions) wird Lint bei jedem Pull Request ausgeführt. Werden Fehler gefunden, schlägt der Build fehl und der Entwickler erhält eine Benachrichtigung mit dem Lint-HTML-Bericht.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Der Lint-HTML-Bericht enthält eine Tabelle aller gefundenen Probleme mit Kategorie, Regel-ID, Datei, Zeile und Beschreibung. Der Bericht ist auf dem CI-Server verfügbar oder wird als Build-Artefakt veröffentlicht. Der XML-Bericht (lint-results.xml) wird für die Integration mit Code-Analyse-Systemen (SonarQube, CodeClimate) und die automatische Aufgabenerstellung in Trackern (Jira, YouTrack) verwendet.
Lint in Pull Requests — konfigurieren Sie GitHub Actions oder GitLab CI so, dass Lint automatisch ausgeführt wird, wenn ein MR/PR erstellt wird. Wenn Lint Fehler findet, gibt CI einen Fehlerstatus zurück und das Zusammenführen wird blockiert. Dies verhindert, dass problematischer Code in den Hauptzweig gelangt, und erhält die Qualität der Codebasis.
Lint-Kategorien decken alle Aspekte der Android-Entwicklung ab. Google unterteilt die Regeln in 12 Kategorien, jede für eine bestimmte Art von Problem zuständig. Die wichtigsten Kategorien sind Correctness, Performance, Security und Accessibility. Entwickler müssen die wichtigsten Prüfungen jeder Kategorie kennen, um effektiv mit Lint zu arbeiten.
| Kategorie | Beschreibung | Beispielregel |
|---|---|---|
| Correctness | Fehler, die die Anwendungsfunktionalität beeinträchtigen | MissingPermission, WrongConstant |
| Performance | Leistungs- und Speicherprobleme | UnusedResources, ViewHolder, DrawAllocation |
| Security | Sicherheitslücken und -verstöße | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Barrierefreiheitsprobleme für Benutzer | ContentDescription, TouchTargetSize |
| Usability | Benutzerfreundlichkeit und Benutzererfahrung | NotSibling, BackButton, HardcodedText |
| I18N | Internationalisierung und Lokalisierung | MissingTranslation, ExtraTranslation |
Leistungsregeln sind in der Praxis am nützlichsten. UnusedResources findet Ressourcen, die in XML deklariert, aber im Code nicht verwendet werden. ViewHolder prüft, ob das ViewHolder-Muster in RecyclerView-Adaptern verwendet wird. DrawAllocation warnt vor der Objekterstellung in der onDraw-Methode. Die Behebung dieser Probleme reduziert die APK-Größe und beschleunigt die Anwendung.
Sicherheitsregeln sind für veröffentlichte Anwendungen obligatorisch. ExportedContentProvider prüft, ob ein ContentProvider ohne Schutz exportiert wird. WorldReadableFiles warnt vor der Erstellung von Dateien, die für alle Anwendungen zugänglich sind. AllowBackup prüft das allowBackup-Flag im Manifest — es wird empfohlen, es aus Gründen der Datensicherheit zu deaktivieren.
Häufig gestellte Fragen
Der Compiler prüft Syntax und Typen und übersetzt Code in Bytecode zur Ausführung. Lint analysiert Code ohne Kompilierung und findet logische Probleme, die der Compiler übersieht: ungenutzte Variablen, Ressourcenlecks, Lokalisierungsprobleme, Leistungsverstöße und API-Inkompatibilität mit minSdkVersion. Lint ergänzt den Compiler, ersetzt ihn jedoch nicht.
Verwenden Sie in XML-Dateien das Attribut tools:ignore mit der Regel-ID: tools:ignore="UnusedResources". Fügen Sie in Java/Kotlin die Annotation @SuppressLint zu einer Methode oder Klasse hinzu: @SuppressLint("SetTextI18n"). Konfigurieren Sie für ein gesamtes Verzeichnis lint.xml mit einem Issue-Knoten und severity="ignore". Konfigurieren Sie für das gesamte Projekt lint.xml im Modulstamm.
Lint baseline ist eine XML-Datei, die aktuelle Lint-Warnungen als akzeptabel markiert. Sie wird mit dem Befehl ./gradlew lint -Pbaseline oder über lintOptions.baselineFile in build.gradle erstellt. Nach dem Hinzufügen einer Baseline meldet Lint nur noch neue Probleme. Dies ist praktisch für die Einführung von Lint in Projekten mit Legacy-Code — das Team behebt Fehler iterativ.
Erstellen Sie ein neues Java/Kotlin-Modul mit Abhängigkeiten von lint-api und lint-checks aus der Bibliothek com.android.tools.lint. Implementieren Sie eine Detector-Klasse zum Auffinden von Problemen und eine Issue-Klasse zu deren Beschreibung. Bauen Sie das Modul in ein JAR und legen Sie es im lintLibs-Ordner Ihres Android-Projekts ab. Android Studio erkennt benutzerdefinierte Regeln automatisch.
Lint findet Probleme, die der Compiler nicht sieht: Kontextlecks (Activity, Fragment), API-Inkompatibilität mit minSdkVersion, Gradle-Konfigurationsprobleme, überdimensionierte PNG-Symbole, fehlende alternative Ressourcen für verschiedene Sprachen und Bildschirmkonfigurationen. Google Play empfiehlt Lint vor der Veröffentlichung. Ohne Lint kann die App auf älteren Geräten abstürzen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch