Android Lint — vestavěný statický analyzátor kódu v Android Studio a Gradle, který kontroluje zdrojové soubory na shodu s doporučeními Google. Lint nachází potenciální chyby před kompilací: nepoužité zdroje, problémy s výkonem, úniky paměti a nekompatibilitu API. Nástroj analyzuje XML, Java a Kotlin soubory. Více na Android Lint Guide.
Hlavní body
Android Lint — nástroj statické analýzy, který je součástí Android SDK a Android Studio. Lint skenuje zdrojový kód aplikace bez jeho spuštění a nachází problémy, které kompilátor přeskakuje: nepoužité zdroje, nesprávnou lokalizaci, potenciální úniky paměti, nekompatibilitu API s minSdkVersion a porušení doporučení Google ohledně výkonu.
Statická analýza — metoda kontroly softwaru bez skutečného spuštění kódu. Na rozdíl od kompilátoru, který kontroluje pouze syntaxi a typy, statický analyzátor hledá logické chyby, anti-vzory a odchylky od nejlepších praktik. Lint provádí více než 200 vestavěných kontrol v kategoriích: correctness, performance, security, accessibility, usability a I18N.
Lint pracuje na několika úrovních: Analýza XML kontroluje rozvržení (layout), zdroje (strings, colors, dimens), manifest a konfigurační soubory. Analýza Java/Kotlin — zdrojový kód na volání zastaralých API, problémy s vlákny a úniky kontextu. Analýza Gradle — konfiguraci sestavení na kompatibilitu verzí.
Kontrola Lint se spouští přes Android Studio (Analyze > Inspect Code) nebo příkazem Gradle: ./gradlew lint. Výsledek — HTML zpráva ve složce build/reports/lint-results.html a XML zpráva pro CI systémy. Lint analyzuje každý soubor nezávisle a aplikuje sadu pravidel (Issue), z nichž každé má jedinečné ID, popis, kategorii a úroveň závažnosti.
Úrovně závažnosti Lint: Error (chyba — blokuje sestavení), Warning (upozornění — ovlivňuje kvalitu), Informational (informace — pro vědomost), Ignore (ignorováno ve výchozím nastavení). Úrovně se nastavují v lint.xml. Chyby Lint lze nastavit tak, aby sestavení Gradle při jejich výskytu selhalo pomocí lintOptions.abortOnError true.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — soubor, který fixuje aktuální upozornění jako přijatelná. Vytváří se příkazem lint --baseline baseline.xml. Po přidání baseline do projektu Lint hlásí pouze nové problémy. To je užitečné pro zavedení Lint do starého projektu se stovkami upozornění — tým postupně opravuje chyby.
lint.xml — konfigurační soubor v kořeni projektu pro nastavení pravidel Lint. V něm se uvádějí ignorovaná pravidla, úrovně závažnosti a výjimky pro konkrétní soubory nebo adresáře. Soubor se vytváří ručně a aplikuje se globálně na všechny moduly projektu. Bez lint.xml všechna pravidla pracují s výchozím nastavením.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Vypnout kontrolu nepoužitých zdrojů -->
<issue id="UnusedResources" severity="ignore" />
<!-- Zvýšit závažnost úniku kontextu -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Ignorovat v generovaných souborech -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — anotace pro vypnutí Lint na úrovni metody nebo třídy v Java/Kotlin. Příklad: @SuppressLint("SetTextI18n") pro metodu, kde je text dynamicky nastavován v TextView. Anotace @RequiresApi určuje minimální úroveň API pro metodu — Lint neupozorní, pokud je minSdk vyšší než zadaná hodnota.
CI integrace Lint — standardní praxe ve vývoji Android. Příkaz ./gradlew lint spouští analýzu všech modulů a generuje zprávy. V konfiguraci CI/CD (Jenkins, GitLab CI, GitHub Actions) se Lint spouští při každém pull requestu. Při výskytu chyb sestavení selže a vývojář obdrží oznámení s HTML zprávou Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
HTML zpráva Lint obsahuje tabulku všech nalezených problémů s kategorií, ID pravidla, souborem, řádkem a popisem. Zpráva je k dispozici na CI serveru nebo publikována jako artefakt sestavení. XML zpráva (lint-results.xml) se používá pro integraci se systémy analýzy kódu (SonarQube, CodeClimate) a automatické vytváření úkolů v trackerech (Jira, YouTrack).
Lint v pull requestu — nakonfigurujte GitHub Actions nebo GitLab CI tak, aby se Lint spouštěl automaticky při vytvoření MR/PR. Pokud Lint najde chyby, CI vrátí stav failure a sloučení je blokováno. To zabraňuje vniknutí problematického kódu do hlavní větve a udržuje kvalitu kódové základny.
Kategorie Lint pokrývají všechny aspekty vývoje Android. Google dělí pravidla do 12 kategorií, každá zodpovědná za určitý typ problému. Nejdůležitější kategorie — Correctness, Performance, Security a Accessibility. Vývojáři stačí znát klíčové kontroly každé kategorie pro efektivní práci s Lint.
| Kategorie | Popis | Příklad pravidla |
|---|---|---|
| Correctness | Chyby ovlivňující chod aplikace | MissingPermission, WrongConstant |
| Performance | Problémy výkonu a paměti | UnusedResources, ViewHolder, DrawAllocation |
| Security | Zranitelnosti a porušení bezpečnosti | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Problémy přístupnosti pro uživatele | ContentDescription, TouchTargetSize |
| Usability | Použitelnost a uživatelská zkušenost | NotSibling, BackButton, HardcodedText |
| I18N | Internacionalizace a lokalizace | MissingTranslation, ExtraTranslation |
Pravidla Performance — nejužitečnější v praxi. UnusedResources nachází zdroje deklarované v XML, ale nepoužívané v kódu. ViewHolder kontroluje, zda se v adaptérech RecyclerView používá vzor ViewHolder. DrawAllocation upozorňuje na vytváření objektů v metodě onDraw. Odstranění těchto problémů snižuje velikost APK a zrychluje aplikaci.
Pravidla Security jsou povinná pro publikované aplikace. ExportedContentProvider kontroluje, zda je ContentProvider exportován bez ochrany. WorldReadableFiles upozorňuje na vytváření souborů přístupných všem aplikacím. AllowBackup kontroluje příznak allowBackup v manifestu — doporučuje se jej vypnout pro bezpečnost dat.
Často kladené otázky
Kompilátor kontroluje syntaxi a typy, překládá kód do bytekódu pro spuštění. Lint analyzuje kód bez kompilace a nachází logické problémy, které kompilátor přeskakuje: nepoužité proměnné, úniky zdrojů, problémy lokalizace, porušení výkonu a nekompatibilitu API s minSdkVersion. Lint doplňuje kompilátor, ale nenahrazuje jej.
V XML souborech použijte atribut tools:ignore s ID pravidla: tools:ignore="UnusedResources". V Java/Kotlin přidejte anotaci @SuppressLint na metodu nebo třídu: @SuppressLint("SetTextI18n"). Pro celý adresář nastavte lint.xml s uzlem issue a severity="ignore". Pro celý projekt nastavte lint.xml v kořeni modulu.
Lint baseline — XML soubor, který fixuje aktuální upozornění Lint jako přijatelná. Vytváří se příkazem ./gradlew lint -Pbaseline nebo přes lintOptions.baselineFile v build.gradle. Po přidání baseline Lint hlásí pouze nové problémy. To je užitečné pro zavedení Lint v projektech se zděděným kódem — tým opravuje chyby iterativně.
Vytvořte nový modul Java/Kotlin se závislostmi na lint-api a lint-checks z knihovny com.android.tools.lint. Implementujte třídu Detector pro hledání problémů a třídu Issue pro jejich popis. Sestavte modul do JAR, umístěte do složky lintLibs vašeho Android projektu. Android Studio automaticky převezme vlastní pravidla.
Lint nachází problémy, které kompilátor nevidí: úniky kontextu (Activity, Fragment), nekompatibilitu API s minSdkVersion, problémy konfigurace Gradle, příliš velké PNG ikony, chybějící alternativní zdroje pro různé jazyky a konfigurace obrazovky. Google Play doporučuje Lint před publikací. Bez Lint může aplikace padat na starých zařízeních.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také