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 — 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 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.
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.
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 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 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.
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.
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.
| Kateqoriya | Təsvir | Nümunə qayda |
|---|---|---|
| Correctness | Tətbiqin işinə təsir edən səhvlər | MissingPermission, WrongConstant |
| Performance | Performans və yaddaş problemləri | UnusedResources, ViewHolder, DrawAllocation |
| Security | Zəifliklər və təhlükəsizlik pozuntuları | ExportedContentProvider, WorldReadableFiles |
| Accessibility | İstifadəçilər üçün əlçatanlıq problemləri | ContentDescription, TouchTargetSize |
| Usability | İstifadə rahatlığı və istifadəçi təcrübəsi | NotSibling, BackButton, HardcodedText |
| I18N | Beynəlmiləlləşdirmə və lokallaşdırma | MissingTranslation, 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
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.
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 — 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.
com.android.tools.lint kitabxanasından lint-api və lint-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.
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ə
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.
Həm də oxuyun