Android Lint — wbudowany statyczny analizator kodu w Android Studio i Gradle, sprawdzający pliki źródłowe pod kątem zgodności z zaleceniami Google. Lint znajduje potencjalne błędy przed kompilacją: nieużywane zasoby, problemy wydajnościowe, wycieki pamięci i niezgodność API. Narzędzie analizuje pliki XML, Java i Kotlin. Więcej na Android Lint Guide.
Najważniejsze
Android Lint — narzędzie analizy statycznej wchodzące w skład Android SDK i Android Studio. Lint skanuje kod źródłowy aplikacji bez jej uruchamiania i znajduje problemy, które kompilator pomija: nieużywane zasoby, nieprawidłową lokalizację, potencjalne wycieki pamięci, niezgodność API z minSdkVersion i naruszenie zaleceń Google dotyczących wydajności.
Analiza statyczna — metoda sprawdzania oprogramowania bez faktycznego wykonywania kodu. W przeciwieństwie do kompilatora, który sprawdza tylko składnię i typy, analizator statyczny szuka błędów logicznych, antywzorców i odchyleń od najlepszych praktyk. Lint wykonuje ponad 200 wbudowanych kontroli w kategoriach: correctness, performance, security, accessibility, usability i I18N.
Lint działa na kilku poziomach: Analiza XML sprawdza układy (layout), zasoby (strings, colors, dimens), manifest i pliki konfiguracyjne. Analiza Java/Kotlin — kod źródłowy pod kątem wywołań przestarzałych API, problemów z wątkami i wycieków kontekstu. Analiza Gradle — konfigurację kompilacji pod kątem zgodności wersji.
Sprawdzanie Lint uruchamia się przez Android Studio (Analyze > Inspect Code) lub poleceniem Gradle: ./gradlew lint. Wynik — raport HTML w folderze build/reports/lint-results.html i raport XML dla systemów CI. Lint analizuje każdy plik niezależnie, stosując zestaw reguł (Issue), z których każda ma unikalny ID, opis, kategorię i poziom ważności.
Poziomy ważności Lint: Error (błąd — blokuje kompilację), Warning (ostrzeżenie — wpływa na jakość), Informational (informacja — do wglądu), Ignore (ignorowane domyślnie). Poziomy konfiguruje się w lint.xml. Błędy Lint można skonfigurować tak, aby kompilacja Gradle kończyła się niepowodzeniem przy ich wystąpieniu przez lintOptions.abortOnError true.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — plik utrwalający bieżące ostrzeżenia jako dopuszczalne. Tworzy się go poleceniem lint --baseline baseline.xml. Po dodaniu baseline do projektu Lint zgłasza tylko nowe problemy. Jest to wygodne przy wdrażaniu Lint w starym projekcie z setkami ostrzeżeń — zespół naprawia błędy stopniowo.
lint.xml — plik konfiguracyjny w katalogu głównym projektu do ustawiania reguł Lint. Określa się w nim ignorowane reguły, poziomy ważności i wyjątki dla konkretnych plików lub katalogów. Plik tworzy się ręcznie i stosuje globalnie do wszystkich modułów projektu. Bez lint.xml wszystkie reguły działają z ustawieniami domyślnymi.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Wyłącz sprawdzanie nieużywanych zasobów -->
<issue id="UnusedResources" severity="ignore" />
<!-- Zwiększ wagę wycieku kontekstu -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Ignoruj w wygenerowanych plikach -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — adnotacja do wyłączania Lint na poziomie metody lub klasy w Java/Kotlin. Przykład: @SuppressLint("SetTextI18n") dla metody, w której tekst jest dynamicznie ustawiany w TextView. Adnotacja @RequiresApi określa minimalny poziom API dla metody — Lint nie będzie wyświetlał ostrzeżenia, jeśli minSdk jest wyższy od podanej wartości.
Integracja CI Lint — standardowa praktyka w rozwoju Android. Polecenie ./gradlew lint uruchamia analizę wszystkich modułów i generuje raporty. W konfiguracji CI/CD (Jenkins, GitLab CI, GitHub Actions) Lint uruchamia się na każdy pull request. W przypadku błędów kompilacja kończy się niepowodzeniem, a deweloper otrzymuje powiadomienie z raportem HTML Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Raport HTML Lint zawiera tabelę wszystkich znalezionych problemów z kategorią, ID reguły, plikiem, wierszem i opisem. Raport jest dostępny na serwerze CI lub publikowany jako artefakt kompilacji. Raport XML (lint-results.xml) jest używany do integracji z systemami analizy kodu (SonarQube, CodeClimate) i automatycznego tworzenia zadań w trackerach (Jira, YouTrack).
Lint w pull request — skonfiguruj GitHub Actions lub GitLab CI tak, aby Lint uruchamiał się automatycznie przy tworzeniu MR/PR. Jeśli Lint znajdzie błędy, CI zwraca status failure i scalenie jest blokowane. Zapobiega to przedostawaniu się problematycznego kodu do głównej gałęzi i utrzymuje jakość bazy kodu.
Kategorie Lint obejmują wszystkie aspekty rozwoju Android. Google dzieli reguły na 12 kategorii, z których każda odpowiada za określony typ problemów. Najważniejsze kategorie to Correctness, Performance, Security i Accessibility. Deweloperowi wystarczy znać kluczowe kontrole każdej kategorii do efektywnej pracy z Lint.
| Kategoria | Opis | Przykładowa reguła |
|---|---|---|
| Correctness | Błędy wpływające na działanie aplikacji | MissingPermission, WrongConstant |
| Performance | Problemy wydajności i pamięci | UnusedResources, ViewHolder, DrawAllocation |
| Security | Podatności i naruszenia bezpieczeństwa | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Problemy dostępności dla użytkowników | ContentDescription, TouchTargetSize |
| Usability | Użyteczność i doświadczenie użytkownika | NotSibling, BackButton, HardcodedText |
| I18N | Internacjonalizacja i lokalizacja | MissingTranslation, ExtraTranslation |
Reguły Performance — najbardziej przydatne w praktyce. UnusedResources znajduje zasoby zadeklarowane w XML, ale nieużywane w kodzie. ViewHolder sprawdza, czy w adapterach RecyclerView używany jest wzorzec ViewHolder. DrawAllocation ostrzega o tworzeniu obiektów w metodzie onDraw. Eliminacja tych problemów zmniejsza rozmiar APK i przyspiesza działanie aplikacji.
Reguły Security są obowiązkowe dla publikowanych aplikacji. ExportedContentProvider sprawdza, czy ContentProvider nie jest eksportowany bez zabezpieczenia. WorldReadableFiles ostrzega o tworzeniu plików dostępnych dla wszystkich aplikacji. AllowBackup sprawdza flagę allowBackup w manifeście — zaleca się jej wyłączenie dla zapewnienia bezpieczeństwa danych.
Często zadawane pytania
Kompilator sprawdza składnię i typy, tłumacząc kod na bajt-kod do wykonania. Lint analizuje kod bez kompilacji i znajduje problemy logiczne, które kompilator pomija: nieużywane zmienne, wycieki zasobów, problemy lokalizacyjne, naruszenia wydajności i niezgodność API z minSdkVersion. Lint uzupełnia kompilator, ale go nie zastępuje.
W plikach XML użyj atrybutu tools:ignore z ID reguły: tools:ignore="UnusedResources". W Java/Kotlin dodaj adnotację @SuppressLint na metodzie lub klasie: @SuppressLint("SetTextI18n"). Dla całego katalogu skonfiguruj lint.xml z węzłem issue i severity="ignore". Dla całego projektu skonfiguruj lint.xml w katalogu głównym modułu.
Lint baseline — plik XML utrwalający bieżące ostrzeżenia Lint jako dopuszczalne. Tworzy się go poleceniem ./gradlew lint -Pbaseline lub przez lintOptions.baselineFile w build.gradle. Po dodaniu baseline Lint zgłasza tylko nowe problemy. Jest to wygodne przy wdrażaniu Lint w projektach z odziedziczonym kodem — zespół naprawia błędy iteracyjnie.
Utwórz nowy moduł Java/Kotlin z zależnościami od lint-api i lint-checks z biblioteki com.android.tools.lint. Zaimplementuj klasę Detector do wyszukiwania problemów i klasę Issue do ich opisu. Zbuduj moduł do JAR, umieść w folderze lintLibs swojego projektu Android. Android Studio automatycznie przejmie niestandardowe reguły.
Lint znajduje problemy, których kompilator nie widzi: wycieki kontekstu (Activity, Fragment), niezgodność API z minSdkVersion, problemy konfiguracji Gradle, zbyt duże ikony PNG, brak alternatywnych zasobów dla różnych języków i konfiguracji ekranu. Google Play zaleca Lint przed publikacją. Bez Lint aplikacja może się wyłączać na starych urządzeniach.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również