Lint: podstawy, analizator statyczny dla projektów Android

Autor: IT Sectr Opublikowano: 2026-02-13 Czas czytania: 10 min

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 — statyczny analizator wbudowany w Android Studio i Gradle do sprawdzania kodu
  • Sprawdzanie Lint — analiza XML, Java i Kotlin pod kątem błędów przed etapem kompilacji aplikacji
  • lint.xml — plik konfiguracyjny do ustawiania reguł Lint w projekcie Android
  • Lint baseline — mechanizm utrwalania istniejących ostrzeżeń do stopniowego wdrażania
  • Integracja CI — uruchamianie Lint na serwerze kompilacji do automatycznej kontroli jakości kodu

Co to jest Lint — statyczny analizator kodu?

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.

Jak Lint sprawdza kod projektów Android

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.

groovy
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.

Konfiguracja reguł Lint w plikach konfiguracyjnych

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
<?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.

Uruchamianie Lint w pipeline CI/CD

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.

yaml
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.

Główne kategorie reguł Lint w Android

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.

KategoriaOpisPrzykładowa reguła
CorrectnessBłędy wpływające na działanie aplikacjiMissingPermission, WrongConstant
PerformanceProblemy wydajności i pamięciUnusedResources, ViewHolder, DrawAllocation
SecurityPodatności i naruszenia bezpieczeństwaExportedContentProvider, WorldReadableFiles
AccessibilityProblemy dostępności dla użytkownikówContentDescription, TouchTargetSize
UsabilityUżyteczność i doświadczenie użytkownikaNotSibling, BackButton, HardcodedText
I18NInternacjonalizacja i lokalizacjaMissingTranslation, 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

Jaka jest różnica między Lint a kompilatorem?

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.

Jak wyłączyć konkretne ostrzeżenie Lint w kodzie?

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.

Co to jest Lint baseline i jak go używać?

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.

Jak utworzyć własną regułę Lint?

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.

Dlaczego sprawdzanie Lint jest obowiązkowe w projektach Android?

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

  • Android Lint — statyczny analizator kodu wbudowany w Android SDK i Android Studio
  • Sprawdzanie Lint — analiza XML, Java i Kotlin pod kątem potencjalnych błędów przed kompilacją aplikacji
  • lint.xml — plik konfiguracyjny do ustawiania reguł Lint w projekcie Android
  • Lint baseline — mechanizm utrwalania istniejących ostrzeżeń do stopniowego wdrażania
  • Integracja CI — uruchamianie Lint na serwerze kompilacji blokuje PR z krytycznymi błędami
  • Kategorie Lint — Correctness, Performance, Security, Accessibility i I18N
  • @SuppressLint — adnotacja do wyłączania Lint na poziomie metody lub klasy

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.

Omów projekt

Przeczytaj również