Android Lint — beépített statikus kódelemző az Android Studio-ban és a Gradle-ben, amely a forrásfájlokat a Google ajánlásainak való megfelelőség szempontjából ellenőrzi. A Lint potenciális hibákat talál a fordítás előtt: nem használt erőforrások, teljesítményproblémák, memóriaszivárgások és API-inkompatibilitás. Az eszköz XML, Java és Kotlin fájlokat elemez. Bővebben a Android Lint Guide oldalon.
Főbb pontok
Android Lint — statikus elemzőeszköz, amely az Android SDK és Android Studio része. A Lint beolvassa az alkalmazás forráskódját annak végrehajtása nélkül, és megtalálja azokat a problémákat, amelyeket a fordító kihagy: nem használt erőforrások, helytelen lokalizáció, potenciális memóriaszivárgások, API inkompatibilitás a minSdkVersion-nel és a Google teljesítményre vonatkozó ajánlásainak megsértése.
Statikus elemzés — a szoftver ellenőrzésének módszere a kód tényleges végrehajtása nélkül. Ellentétben a fordítóval, amely csak a szintaxist és típusokat ellenőrzi, a statikus elemző logikai hibákat, antimintákat és a legjobb gyakorlatoktól való eltéréseket keres. A Lint több mint 200 beépített ellenőrzést végez kategóriánként: correctness, performance, security, accessibility, usability és I18N.
A Lint több szinten működik: XML elemzés ellenőrzi az elrendezéseket (layout), erőforrásokat (strings, colors, dimens), a manifestet és a konfigurációs fájlokat. Java/Kotlin elemzés — a forráskódot elavult API-hívások, szálproblémák és kontextusszivárgások szempontjából. Gradle elemzés — a build konfigurációt verziókompatibilitás szempontjából.
Lint ellenőrzés az Android Studio-n (Analyze > Inspect Code) vagy Gradle paranccsal indítható: ./gradlew lint. Eredmény — HTML jelentés a build/reports/lint-results.html mappában és XML jelentés CI rendszerek számára. A Lint minden fájlt függetlenül elemez, egy szabálykészletet (Issue) alkalmazva, amelyek mindegyike egyedi ID-val, leírással, kategóriával és súlyossági szinttel rendelkezik.
A Lint súlyossági szintjei: Error (hiba — blokkolja a buildet), Warning (figyelmeztetés — befolyásolja a minőséget), Informational (tájékoztatás — tájékoztatás céljából), Ignore (alapértelmezetten figyelmen kívül hagyva). A szintek a lint.xml-ben állíthatók be. A Lint hibák beállíthatók úgy, hogy a Gradle build meghiúsuljon jelenlétük esetén a lintOptions.abortOnError true segítségével.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — fájl, amely rögzíti az aktuális figyelmeztetéseket elfogadhatóként. A lint --baseline baseline.xml paranccsal hozható létre. A baseline projektbe történő hozzáadása után a Lint csak az új problémákról jelent. Ez kényelmes a Lint bevezetéséhez egy régi, több száz figyelmeztetést tartalmazó projektben — a csapat fokozatosan javítja a hibákat.
lint.xml — konfigurációs fájl a projekt gyökerében a Lint szabályok beállításához. Ebben adjuk meg a figyelmen kívül hagyott szabályokat, súlyossági szinteket és kivételeket adott fájlokhoz vagy könyvtárakhoz. A fájl manuálisan jön létre, és globálisan érvényes a projekt összes moduljára. lint.xml nélkül minden szabály az alapértelmezett beállításokkal működik.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Nem használt erőforrások ellenőrzésének kikapcsolása -->
<issue id="UnusedResources" severity="ignore" />
<!-- Kontextusszivárgás súlyosságának növelése -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Figyelmen kívül hagyás generált fájlokban -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — annotáció a Lint kikapcsolásához metódus vagy osztály szinten Java/Kotlin-ban. Példa: @SuppressLint("SetTextI18n") egy olyan metódushoz, ahol a szöveg dinamikusan kerül beállításra a TextView-ban. A @RequiresApi annotáció megadja a metódus minimális API szintjét — a Lint nem ad ki figyelmeztetést, ha a minSdk magasabb a megadott értéknél.
CI integráció Lint — szabványos gyakorlat az Android fejlesztésben. A ./gradlew lint parancs elindítja az összes modul elemzését és jelentéseket generál. CI/CD konfigurációban (Jenkins, GitLab CI, GitHub Actions) a Lint minden pull request-nél fut. Hibák esetén a build meghiúsul, és a fejlesztő értesítést kap a Lint HTML jelentéssel.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
HTML jelentés A Lint táblázatot tartalmaz az összes talált problémáról kategóriával, szabály ID-val, fájllal, sorral és leírással. A jelentés elérhető a CI szerveren vagy build artifactként publikálható. XML jelentés (lint-results.xml) a kódelemző rendszerekkel (SonarQube, CodeClimate) való integrációhoz és feladatok automatikus létrehozásához nyomkövetőkben (Jira, YouTrack) használatos.
Lint pull request-ben — konfigurálja a GitHub Actions-t vagy GitLab CI-t úgy, hogy a Lint automatikusan fusson MR/PR létrehozásakor. Ha a Lint hibákat talál, a CI failure státuszt ad vissza, és az egyesítés blokkolva van. Ez megakadályozza a problémás kód bekerülését a fő ágba és fenntartja a kódbázis minőségét.
Lint kategóriák lefedik az Android fejlesztés minden aspektusát. A Google 12 kategóriába osztja a szabályokat, mindegyik egy adott problématípusért felelős. A legfontosabb kategóriák — Correctness, Performance, Security és Accessibility. A fejlesztőnek elegendő ismernie az egyes kategóriák kulcsfontosságú ellenőrzéseit a hatékony Lint munkához.
| Kategória | Leírás | Példa szabály |
|---|---|---|
| Correctness | Az alkalmazás működését befolyásoló hibák | MissingPermission, WrongConstant |
| Performance | Teljesítmény- és memóriaproblémák | UnusedResources, ViewHolder, DrawAllocation |
| Security | Sérülékenységek és biztonsági megsértések | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Akadálymentesítési problémák a felhasználók számára | ContentDescription, TouchTargetSize |
| Usability | Használhatóság és felhasználói élmény | NotSibling, BackButton, HardcodedText |
| I18N | Nemzetközi és lokalizáció | MissingTranslation, ExtraTranslation |
Performance szabályok — a leggyakorlatiasabbak. UnusedResources megtalálja az XML-ben deklarált, de a kódban nem használt erőforrásokat. ViewHolder ellenőrzi, hogy a RecyclerView adapterekben a ViewHolder minta használatos-e. DrawAllocation figyelmeztet az objektumok létrehozására az onDraw metódusban. E problémák kijavítása csökkenti az APK méretét és gyorsítja az alkalmazást.
Security szabályok kötelezőek a publikált alkalmazásokhoz. ExportedContentProvider ellenőrzi, hogy a ContentProvider védelem nélkül van-e exportálva. WorldReadableFiles figyelmeztet az összes alkalmazás számára hozzáférhető fájlok létrehozására. AllowBackup ellenőrzi az allowBackup jelzőt a manifestben — ajánlott kikapcsolni az adatbiztonság érdekében.
Gyakran Ismételt Kérdések
A fordító ellenőrzi a szintaxist és típusokat, a kódot bájtkódra fordítja a végrehajtáshoz. A Lint elemzi a kódot fordítás nélkül, és megtalálja azokat a logikai problémákat, amelyeket a fordító kihagy: nem használt változók, erőforrás-szivárgások, lokalizációs problémák, teljesítménysértések és API inkompatibilitás a minSdkVersion-nel. A Lint kiegészíti a fordítót, de nem helyettesíti azt.
XML fájlokban használja a tools:ignore attribútumot a szabály ID-jával: tools:ignore="UnusedResources". Java/Kotlin-ban adja hozzá a @SuppressLint annotációt a metódushoz vagy osztályhoz: @SuppressLint("SetTextI18n"). Egy teljes könyvtárhoz konfigurálja a lint.xml-t issue csomóponttal és severity="ignore"-val. A teljes projekthez konfigurálja a lint.xml-t a modul gyökerében.
Lint baseline — XML fájl, amely rögzíti az aktuális Lint figyelmeztetéseket elfogadhatóként. A ./gradlew lint -Pbaseline paranccsal vagy a lintOptions.baselineFile segítségével a build.gradle-ben hozható létre. A baseline hozzáadása után a Lint csak az új problémákról jelent. Ez kényelmes a Lint örökölt kódú projektekbe történő bevezetéséhez — a csapat iteratívan javítja a hibákat.
Hozzon létre egy új Java/Kotlin modult lint-api és lint-checks függőségekkel a com.android.tools.lint könyvtárból. Implementálja a Detector osztályt a problémák kereséséhez és az Issue osztályt azok leírásához. Építse a modult JAR-ba, helyezze el az Android projekt lintLibs mappájában. Az Android Studio automatikusan átveszi az egyéni szabályokat.
A Lint olyan problémákat talál, amelyeket a fordító nem lát: kontextusszivárgások (Activity, Fragment), API inkompatibilitás a minSdkVersion-nel, Gradle konfigurációs problémák, túl nagy PNG ikonok, alternatív erőforrások hiánya különböző nyelvekhez és képernyőkonfigurációkhoz. A Google Play a Lint használatát ajánlja a publikálás előtt. Lint nélkül az alkalmazás összeomolhat régi eszközökön.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is