Android Lint — Android Studio va Gradle-ga o'rnatilgan, manba fayllarini Google tavsiyalariga muvofiqligini tekshiruvchi statik kod analizatori. Lint kompilyatsiyadan oldin potentsial xatolarni topadi: foydalanilmayotgan resurslar, ishlash muammolari, xotira oqishi va API nomuvofiqligi. Asbob XML, Java va Kotlin fayllarini tahlil qiladi. Batafsil — Android Lint Guide.
Asosiy fikrlar
Android Lint — Android SDK va Android Studio tarkibiga kiruvchi statik tahlil vositasi. Lint ilova manba kodini uni bajarmasdan skanerlaydi va kompilyator o'tkazib yuboradigan muammolarni topadi: foydalanilmayotgan resurslar, noto'g'ri lokalizatsiya, potentsial xotira oqishi, API ning minSdkVersion bilan nomuvofiqligi va Google'ning ishlash tavsiyalarini buzish.
Statik tahlil — dasturiy ta'minotni kodni amalda bajarmasdan tekshirish usuli. Faqat sintaksis va turlarni tekshiradigan kompilyatordan farqli o'laroq, statik analizator mantiqiy xatolar, anti-na'munalar va eng yaxshi amaliyotlardan chetga chiqishlarni qidiradi. Lint kategoriyalar bo'yicha 200 dan ortiq o'rnatilgan tekshiruvlarni amalga oshiradi: correctness, performance, security, accessibility, usability va I18N.
Lint bir necha darajada ishlaydi: XML tahlili maketlar (layout), resurslar (strings, colors, dimens), manifest va konfiguratsiya fayllarini tekshiradi. Java/Kotlin tahlili — manba kodini eskirgan API chaqiruvlari, oqim muammolari va kontekst oqishi uchun tekshiradi. Gradle tahlili — yig'ish konfiguratsiyasini versiya muvofiqligi uchun tekshiradi.
Lint tekshiruvi Android Studio (Analyze > Inspect Code) yoki Gradle buyrug'i orqali ishga tushiriladi: ./gradlew lint. Natija — build/reports/lint-results.html papkasida HTML hisoboti va CI tizimlari uchun XML hisoboti. Lint har bir faylni mustaqil tahlil qiladi, har biri noyob ID, tavsif, kategoriya va jiddiylik darajasiga ega bo'lgan qoidalar to'plamini (Issue) qo'llaydi.
Lint jiddiylik darajalari: Error (xato — yig'ishni bloklaydi), Warning (ogohlantirish — sifatga ta'sir qiladi), Informational (ma'lumot — ma'lumot uchun), Ignore (sukut bo'yicha e'tiborga olinmaydi). Darajalar lint.xml da sozlanadi. Lint xatolarini shunday sozlash mumkinki, Gradle yig'ishi ular mavjud bo'lganda lintOptions.abortOnError true orqali muvaffaqiyatsiz tugasin.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — joriy ogohlantirishlarni ruxsat etilgan deb belgilovchi fayl. lint --baseline baseline.xml buyrug'i bilan yaratiladi. Baseline loyihaga qo'shilgandan so'ng, Lint faqat yangi muammolar haqida xabar beradi. Bu yuzlab ogohlantirishlari bo'lgan eski loyihada Lintni joriy etish uchun qulay — jamoa xatolarni asta-sekin tuzatadi.
lint.xml — loyiha ildizida Lint qoidalarini sozlash uchun konfiguratsiya fayli. Unda e'tiborga olinmaydigan qoidalar, jiddiylik darajalari va ma'lum fayllar yoki papkalar uchun istisnolar ko'rsatiladi. Fayl qo'lda yaratiladi va loyihaning barcha modullariga global tarzda qo'llaniladi. lint.xml bo'lmasa, barcha qoidalar sukut bo'yicha sozlamalar bilan ishlaydi.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Foydalanilmayotgan resurslar tekshiruvini o'chirish -->
<issue id="UnusedResources" severity="ignore" />
<!-- Kontekst oqishi jiddiyligini oshirish -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Yaratilgan fayllarda e'tiborsiz qoldirish -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — Java/Kotlin'da metod yoki sinf darajasida Lintni o'chirish uchun annotatsiya. Misol: @SuppressLint("SetTextI18n") — TextView'da matn dinamik o'rnatiladigan metod uchun. @RequiresApi annotatsiyasi metod uchun minimal API darajasini belgilaydi — Lint ogohlantirish bermaydi, agar minSdk ko'rsatilgan qiymatdan yuqori bo'lsa.
CI integratsiyasi Lint — Android rivojlanishida standart amaliyot. ./gradlew lint buyrug'i barcha modullarni tahlil qilishni ishga tushiradi va hisobotlarni yaratadi. CI/CD konfiguratsiyasida (Jenkins, GitLab CI, GitHub Actions) Lint har bir pull request'da ishga tushiriladi. Xatolar mavjud bo'lganda yig'ish muvaffaqiyatsiz tugaydi va ishlab chiquvchi HTML hisoboti bilan bildirishnoma oladi.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
HTML hisoboti Lint barcha topilgan muammolarning kategoriya, qoida ID, fayl, qator va tavsif bilan jadvalini o'z ichiga oladi. Hisobot CI serverida mavjud yoki yig'ish artefakti sifatida nashr etiladi. XML hisoboti (lint-results.xml) kod tahlil tizimlari (SonarQube, CodeClimate) bilan integratsiya va trekerlarda (Jira, YouTrack) avtomatik vazifalar yaratish uchun ishlatiladi.
Pull request'da Lint — GitHub Actions yoki GitLab CI ni shunday sozlangki, Lint MR/PR yaratilganda avtomatik ishga tushsin. Agar Lint xatolarni topsa, CI failure statusini qaytaradi va birlashtirish bloklanadi. Bu muammoli kodning asosiy tarmoqqa kirishini oldini oladi va kod bazasi sifatini saqlaydi.
Lint kategoriyalari Android rivojlanishining barcha jihatlarini qamrab oladi. Google qoidalarni 12 kategoriyaga ajratadi, har biri ma'lum muammo turi uchun javobgardir. Eng muhim kategoriyalar — Correctness, Performance, Security va Accessibility. Ishlab chiquvchiga Lint bilan samarali ishlash uchun har bir kategoriyaning asosiy tekshiruvlarini bilish kifoya.
| Kategoriya | Tavsif | Misol qoida |
|---|---|---|
| Correctness | Ilova ishiga ta'sir qiluvchi xatolar | MissingPermission, WrongConstant |
| Performance | Ishlash va xotira muammolari | UnusedResources, ViewHolder, DrawAllocation |
| Security | Zaifliklar va xavfsizlik buzilishlari | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Foydalanuvchilar uchun foydalanish imkoniyati muammolari | ContentDescription, TouchTargetSize |
| Usability | Foydalanish qulayligi va foydalanuvchi tajribasi | NotSibling, BackButton, HardcodedText |
| I18N | Xalqarolashtirish va lokalizatsiya | MissingTranslation, ExtraTranslation |
Performance qoidalari — amalda eng foydalilari. UnusedResources XML'da e'lon qilingan, ammo kodda ishlatilmaydigan resurslarni topadi. ViewHolder RecyclerView adapterlarida ViewHolder na'munasidan foydalanilganligini tekshiradi. DrawAllocation onDraw metodida ob'ektlarni yaratish haqida ogohlantiradi. Bu muammolarni bartaraf etish APK hajmini kamaytiradi va ilova ishini tezlashtiradi.
Security qoidalari nashr qilinadigan ilovalar uchun majburiydir. ExportedContentProvider ContentProvider himoyasiz eksport qilinganligini tekshiradi. WorldReadableFiles barcha ilovalar uchun ochiq fayllarni yaratish haqida ogohlantiradi. AllowBackup manifestdagi allowBackup bayrog'ini tekshiradi — ma'lumotlar xavfsizligini ta'minlash uchun uni o'chirish tavsiya etiladi.
Ko'p beriladigan savollar
Kompilyator sintaksis va turlarni tekshiradi, kodni bajarish uchun bayt-kodga o'tkazadi. Lint kodni kompilyatsiya qilmasdan tahlil qiladi va kompilyator o'tkazib yuboradigan mantiqiy muammolarni topadi: foydalanilmayotgan o'zgaruvchilar, resurs oqishi, lokalizatsiya muammolari, ishlash buzilishlari va API ning minSdkVersion bilan nomuvofiqligi. Lint kompilyatorni to'ldiradi, lekin uni almashtirmaydi.
XML fayllarida tools:ignore atributidan qoida ID si bilan foydalaning: tools:ignore="UnusedResources". Java/Kotlin'da metod yoki sinf ustiga @SuppressLint annotatsiyasini qo'shing: @SuppressLint("SetTextI18n"). Butun papka uchun lint.xml da issue tuguni va severity="ignore" bilan sozlang. Butun loyiha uchun modul ildizida lint.xml ni sozlang.
Lint baseline — joriy Lint ogohlantirishlarini ruxsat etilgan deb belgilovchi XML fayl. ./gradlew lint -Pbaseline buyrug'i yoki build.gradle'da lintOptions.baselineFile orqali yaratiladi. Baseline qo'shilgandan so'ng, Lint faqat yangi muammolar haqida xabar beradi. Bu meros kodli loyihalarda Lintni joriy etish uchun qulay — jamoa xatolarni iterativ tarzda tuzatadi.
com.android.tools.lint kutubxonasidan lint-api va lint-checks bog'liqliklari bilan yangi Java/Kotlin modulini yarating. Muammolarni qidirish uchun Detector sinfini va ularni tavsiflash uchun Issue sinfini amalga oshiring. Modulni JAR ga yig'ing, Android loyihangizning lintLibs papkasiga joylashtiring. Android Studio avtomatik ravishda maxsus qoidalarni qabul qiladi.
Lint kompilyator ko'rmaydigan muammolarni topadi: kontekst oqishi (Activity, Fragment), API ning minSdkVersion bilan nomuvofiqligi, Gradle konfiguratsiya muammolari, juda katta PNG piktogrammalari, turli tillar va ekran konfiguratsiyalari uchun muqobil resurslarning yo'qligi. Google Play nashrdan oldin Lintni tavsiya qiladi. Lintsiz ilova eski qurilmalarda ishlamay qolishi mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.