Lint: asoslar, Android loyihalari uchun statik analizator

Muallif: IT Sectr Nashr etilgan: 2026-02-13 O'qish vaqti: 10 daq

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 — kod tekshiruvi uchun Android Studio va Gradle-ga o'rnatilgan statik analizator
  • Lint tekshiruvi — ilova kompilyatsiya bosqichidan oldin XML, Java va Kotlni xatolar uchun tahlil qilish
  • lint.xml — Android loyihasida Lint qoidalarini sozlash uchun konfiguratsiya fayli
  • Lint baseline — mavjud ogohlantirishlarni bosqichma-bosqich joriy etish uchun fiksatsiya mexanizmi
  • CI integratsiyasi — kod sifatini avtomatik nazorat qilish uchun Lintni yig'ish serverida ishga tushirish

Lint nima — statik kod analizatori?

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 Android loyihalari kodini qanday 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.

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

Konfiguratsiya fayllarida Lint qoidalarini sozlash

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
<?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/CD pipeline'da Lint tekshiruvini ishga tushirish

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.

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

Android'da Lint qoidalarining asosiy kategoriyalari

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.

KategoriyaTavsifMisol qoida
CorrectnessIlova ishiga ta'sir qiluvchi xatolarMissingPermission, WrongConstant
PerformanceIshlash va xotira muammolariUnusedResources, ViewHolder, DrawAllocation
SecurityZaifliklar va xavfsizlik buzilishlariExportedContentProvider, WorldReadableFiles
AccessibilityFoydalanuvchilar uchun foydalanish imkoniyati muammolariContentDescription, TouchTargetSize
UsabilityFoydalanish qulayligi va foydalanuvchi tajribasiNotSibling, BackButton, HardcodedText
I18NXalqarolashtirish va lokalizatsiyaMissingTranslation, 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

Lint va kompilyator o'rtasidagi farq nima?

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.

Kodda ma'lum bir Lint ogohlantirishini qanday o'chirish mumkin?

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 nima va undan qanday foydalanish kerak?

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.

O'z Lint qoidasini qanday yaratish mumkin?

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.

Nega Lint tekshiruvi Android loyihalarida majburiy?

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

  • Android Lint — Android SDK va Android Studio'ga o'rnatilgan statik kod analizatori
  • Lint tekshiruvi — ilova kompilyatsiyasidan oldin XML, Java va Kotlni potentsial xatolar uchun tahlil qilish
  • lint.xml — Android loyihasida Lint qoidalarini sozlash uchun konfiguratsiya fayli
  • Lint baseline — mavjud ogohlantirishlarni bosqichma-bosqich joriy etish uchun fiksatsiya mexanizmi
  • CI integratsiyasi — yig'ish serverida Lintni ishga tushirish kritik xatoli PRlarni bloklaydi
  • Lint kategoriyalari — Correctness, Performance, Security, Accessibility va I18N
  • @SuppressLint — metod yoki sinf darajasida Lintni o'chirish uchun annotatsiya

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.

Loyihani muhokama qilish

Shuningdek o'qing