Lint: əsaslar, Android layihələri üçün statik analizator

Müəllif: IT Sectr Dərc olunub: 2026-02-13 Oxuma vaxtı: 10 dəq

Android Lint — Android Studio və Gradle-də quraşdırılmış, mənbə fayllarını Google tövsiyələrinə uyğunluq baxımından yoxlayan statik kod analizatoru. Lint kompilyasiyadan əvvəl potensial səhvləri tapır: istifadə olunmayan resurslar, performans problemləri, yaddaş sızmaları və API uyğunsuzluğu. Alət XML, Java və Kotlin fayllarını analiz edir. Ətraflı — Android Lint Guide.

Əsas məqamlar

  • Android Lint — kod yoxlaması üçün Android Studio və Gradle-də quraşdırılmış statik analizator
  • Lint yoxlaması — tətbiqin kompilyasiya mərhələsindən əvvəl XML, Java və Kotlin fayllarının xətalar üçün analizi
  • lint.xml — Android layihəsində Lint qaydalarını konfiqurasiya etmək üçün konfiqurasiya faylı
  • Lint baseline — mövcud xəbərdarlıqları tədricən tətbiq etmək üçün fiksasiya mexanizmi
  • CI inteqrasiyası — kod keyfiyyətinə avtomatik nəzarət üçün Lint-in yığma serverində işə salınması

Lint nədir — statik kod analizatoru?

Android Lint — Android SDK və Android Studio tərkibinə daxil olan statik analiz aləti. Lint proqramın mənbə kodunu icra etmədən skan edir və kompilyatorun buraxdığı problemləri tapır: istifadə olunmayan resurslar, düzgün olmayan lokallaşdırma, potensial yaddaş sızmaları, API-nin minSdkVersion ilə uyğunsuzluğu və Google-un performans tövsiyələrinin pozulması.

Statik analiz — proqram təminatının kodun faktiki icrası olmadan yoxlanılması üsulu. Yalnız sintaksis və tipləri yoxlayan kompilyatordan fərqli olaraq, statik analizator məntiqi səhvləri, anti-nümunələri və ən yaxşı təcrübələrdən kənarlaşmaları axtarır. Lint kateqoriyalar üzrə 200-dən çox daxili yoxlama aparır: correctness, performance, security, accessibility, usability və I18N.

Lint bir neçə səviyyədə işləyir: XML analizi maketləri (layout), resursları (strings, colors, dimens), manifesti və konfiqurasiya fayllarını yoxlayır. Java/Kotlin analizi — mənbə kodunu köhnəlmiş API çağırışları, thread problemləri və kontekst sızmaları baxımından yoxlayır. Gradle analizi — yığma konfiqurasiyasını versiya uyğunluğu baxımından yoxlayır.

Lint Android layihələrinin kodunu necə yoxlayır

Lint yoxlaması Android Studio (Analyze > Inspect Code) və ya Gradle əmri ilə işə salınır: ./gradlew lint. Nəticə — build/reports/lint-results.html qovluğunda HTML hesabatı və CI sistemləri üçün XML hesabatı. Lint hər bir faylı müstəqil analiz edir, hər biri unikal ID, təsvir, kateqoriya və ciddilik səviyyəsinə malik olan qaydalar dəstini (Issue) tətbiq edərək.

Lint ciddilik səviyyələri: Error (səhv — yığmanı bloklayır), Warning (xəbərdarlıq — keyfiyyətə təsir edir), Informational (məlumat — məlumat üçün), Ignore (defolt olaraq nəzərə alınmır). Səviyyələr lint.xml-də konfiqurasiya edilir. Lint səhvlərini elə qurmaq olar ki, Gradle yığması onlar olduqda lintOptions.abortOnError true vasitəsilə çöksün.

groovy
android {
    lintOptions {
        abortOnError true
        checkAllWarnings true
        baselineFile file("lint-baseline.xml")
        htmlReport true
        xmlReport true
        lintConfig file("lint.xml")
    }
}

Lint baseline — cari xəbərdarlıqları icazə verilən kimi təsbit edən fayl. lint --baseline baseline.xml əmri ilə yaradılır. Baseline layihəyə əlavə edildikdən sonra Lint yalnız yeni problemlər barədə məlumat verir. Bu, yüzlərlə xəbərdarlığı olan köhnə layihədə Lint-i tətbiq etmək üçün əlverişlidir — komanda səhvləri tədricən düzəldir.

Konfiqurasiya fayllarında Lint qaydalarının qurulması

lint.xml — layihənin kökündə Lint qaydalarını konfiqurasiya etmək üçün konfiqurasiya faylı. Orada nəzərə alınmayan qaydalar, ciddilik səviyyələri və konkret fayllar və ya qovluqlar üçün istisnalar göstərilir. Fayl əl ilə yaradılır və layihənin bütün modullarına qlobal şəkildə tətbiq edilir. lint.xml olmadan bütün qaydalar defolt parametrlərlə işləyir.

xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- İstifadə olunmayan resursların yoxlanılmasını söndür -->
    <issue id="UnusedResources" severity="ignore" />

    <!-- Kontekst sızmasının ciddiliyini artır -->
    <issue id="StaticFieldLeak" severity="error" />

    <!-- Yaradılmış fayllarda nəzərə alma -->
    <issue id="MissingTranslation" severity="ignore">
        <ignore path="build/generated" />
    </issue>
</lint>

@SuppressLint — Java/Kotlin-də metod və ya sinif səviyyəsində Lint-i söndürmək üçün annotasiya. Nümunə: @SuppressLint("SetTextI18n") — TextView-də mətnin dinamik olaraq təyin olunduğu metod üçün. @RequiresApi annotasiyası metod üçün minimum API Səviyyəsini göstərir — Lint xəbərdarlıq verməyəcək, əgər minSdk göstərilən dəyərdən yüksəkdirsə.

CI/CD pipeline-da Lint yoxlamasının işə salınması

CI inteqrasiyası Lint — Android inkişafında standart təcrübə. ./gradlew lint əmri bütün modulların analizini işə salır və hesabatlar yaradır. CI/CD konfiqurasiyasında (Jenkins, GitLab CI, GitHub Actions) Lint hər pull request-də işə salınır. Səhvlər olduqda yığma çökür və tərtibatçı HTML hesabatı ilə bildiriş alır.

yaml
lint-check:
  script:
    - ./gradlew lint
  artifacts:
    paths:
      - app/build/reports/lint-results.html
    when: always

HTML hesabatı Lint bütün tapılan problemlərin kateqoriya, qayda ID, fayl, sətir və təsvir ilə cədvəlini ehtiva edir. Hesabat CI serverində mövcuddur və ya yığma artefaktı kimi dərc olunur. XML hesabatı (lint-results.xml) kod analiz sistemləri (SonarQube, CodeClimate) ilə inteqrasiya və trekerlərdə (Jira, YouTrack) avtomatik tapşırıq yaratmaq üçün istifadə olunur.

Pull request-də Lint — GitHub Actions və ya GitLab CI-ni elə qurun ki, Lint MR/PR yaradılarkən avtomatik işə düşsün. Lint səhvlər tapsa, CI failure statusu qaytarır və birləşmə bloklanır. Bu, problemli kodun əsas budağa daxil olmasının qarşısını alır və kod bazasının keyfiyyətini qoruyur.

Android-də Lint qaydalarının əsas kateqoriyaları

Lint kateqoriyaları Android inkişafının bütün aspektlərini əhatə edir. Google qaydaları 12 kateqoriyaya bölür, hər biri müəyyən problem növünə cavabdehdir. Ən vacib kateqoriyalar — Correctness, Performance, Security və Accessibility. Tərtibatçıya Lint ilə səmərəli işləmək üçün hər kateqoriyanın əsas yoxlamalarını bilmək kifayətdir.

KateqoriyaTəsvirNümunə qayda
CorrectnessTətbiqin işinə təsir edən səhvlərMissingPermission, WrongConstant
PerformancePerformans və yaddaş problemləriUnusedResources, ViewHolder, DrawAllocation
SecurityZəifliklər və təhlükəsizlik pozuntularıExportedContentProvider, WorldReadableFiles
Accessibilityİstifadəçilər üçün əlçatanlıq problemləriContentDescription, TouchTargetSize
Usabilityİstifadə rahatlığı və istifadəçi təcrübəsiNotSibling, BackButton, HardcodedText
I18NBeynəlmiləlləşdirmə və lokallaşdırmaMissingTranslation, ExtraTranslation

Performance qaydaları — praktikada ən faydalı olanlar. UnusedResources XML-də elan edilmiş, lakin kodda istifadə olunmayan resursları tapır. ViewHolder RecyclerView adapterlərində ViewHolder nümunəsinin istifadə olunduğunu yoxlayır. DrawAllocation onDraw metodunda obyektlərin yaradılması barədə xəbərdarlıq edir. Bu problemlərin aradan qaldırılması APK ölçüsünü azaldır və tətbiqin işini sürətləndirir.

Security qaydaları dərc olunan tətbiqlər üçün məcburidir. ExportedContentProvider ContentProvider-in qorunmadan ixrac edilib-edilmədiyini yoxlayır. WorldReadableFiles bütün tətbiqlər üçün əlçatan olan faylların yaradılması barədə xəbərdarlıq edir. AllowBackup manifestdə allowBackup bayrağını yoxlayır — məlumat təhlükəsizliyini təmin etmək üçün onu söndürmək tövsiyə olunur.

Tez-tez verilən suallar

Lint və kompilyator arasında nə fərq var?

Kompilyator sintaksis və tipləri yoxlayır, kodu icra üçün bayt-koda çevirir. Lint kodu kompilyasiya olmadan analiz edir və kompilyatorun buraxdığı məntiqi problemləri tapır: istifadə olunmayan dəyişənlər, resurs sızmaları, lokallaşdırma problemləri, performans pozuntuları və API-nin minSdkVersion ilə uyğunsuzluğu. Lint kompilyatoru tamamlayır, lakin onu əvəz etmir.

Kodda konkret Lint xəbərdarlığını necə söndürmək olar?

XML fayllarında tools:ignore atributundan qayda ID-si ilə istifadə edin: tools:ignore="UnusedResources". Java/Kotlin-də metod və ya sinif üzərində @SuppressLint annotasiyasını əlavə edin: @SuppressLint("SetTextI18n"). Bütün qovluq üçün lint.xml-də issue nodu və severity="ignore" ilə konfiqurasiya edin. Bütün layihə üçün modulun kökündə lint.xml-i konfiqurasiya edin.

Lint baseline nədir və onu necə istifadə etmək olar?

Lint baseline — cari Lint xəbərdarlıqlarını icazə verilən kimi təsbit edən XML faylı. ./gradlew lint -Pbaseline əmri və ya build.gradle-də lintOptions.baselineFile vasitəsilə yaradılır. Baseline əlavə edildikdən sonra Lint yalnız yeni problemlər barədə məlumat verir. Bu, miras qalmış kodu olan layihələrdə Lint-i tətbiq etmək üçün əlverişlidir — komanda səhvləri iterativ şəkildə düzəldir.

Öz Lint qaydasını necə yaratmaq olar?

com.android.tools.lint kitabxanasından lint-apilint-checks asılılıqları ilə yeni Java/Kotlin modulu yaradın. Problemləri axtarmaq üçün Detector sinfini və onları təsvir etmək üçün Issue sinfini tətbiq edin. Modulu JAR-a yığın, Android layihənizin lintLibs qovluğunda yerləşdirin. Android Studio avtomatik olaraq fərdi qaydaları qəbul edəcək.

Niyə Lint yoxlaması Android layihələrində məcburidir?

Lint kompilyatorun görmədiyi problemləri tapır: kontekst sızmaları (Activity, Fragment), API-nin minSdkVersion ilə uyğunsuzluğu, Gradle konfiqurasiya problemləri, çox böyük PNG ikonları, müxtəlif dillər və ekran konfiqurasiyaları üçün alternativ resursların olmaması. Google Play nəşrdən əvvəl Lint-i tövsiyə edir. Lint olmadan tətbiq köhnə cihazlarda çökə bilər.

Nəticə

  • Android Lint — Android SDK və Android Studio-ya quraşdırılmış statik kod analizatoru
  • Lint yoxlaması — tətbiqin kompilyasiyasından əvvəl XML, Java və Kotlin fayllarının potensial səhvlər üçün analizi
  • lint.xml — Android layihəsində Lint qaydalarını konfiqurasiya etmək üçün konfiqurasiya faylı
  • Lint baseline — mövcud xəbərdarlıqları tədricən tətbiq etmək üçün fiksasiya mexanizmi
  • CI inteqrasiyası — yığma serverində Lint-in işə salınması kritik səhvləri olan PR-ları bloklayır
  • Lint kateqoriyaları — Correctness, Performance, Security, Accessibility və I18N
  • @SuppressLint — metod və ya sinif səviyyəsində Lint-i söndürmək üçün annotasiya

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun