Android Lint — Android Studio ve Gradle'da yerleşik, kaynak dosyaları Google'ın önerilerine göre denetleyen statik bir kod analizörüdür. Lint, derlemeden önce potansiyel hataları bulur: kullanılmayan kaynaklar, performans sorunları, bellek sızıntıları ve API uyumsuzluğu. Araç XML, Java ve Kotlin dosyalarını analiz eder. Daha fazla bilgi için Android Lint Guide sayfasını ziyaret edin.
Önemli Noktalar
Android Lint, Android SDK ve Android Studio'ya dahil olan statik bir analiz aracıdır. Lint, uygulamanın kaynak kodunu çalıştırmadan tarar ve derleyicinin gözden kaçırdığı sorunları bulur: kullanılmayan kaynaklar, yanlış yerelleştirme, olası bellek sızıntıları, minSdkVersion ile API uyumsuzluğu ve Google'ın performans önerilerinin ihlali.
Statik analiz, gerçek kod yürütmesi gerektirmeyen bir yazılım doğrulama yöntemidir. Yalnızca sözdizimi ve türleri denetleyen derleyicinin aksine, statik analizör mantıksal hataları, anti-kalıpları ve en iyi uygulamalardan sapmaları arar. Lint, kategorilere göre 200'den fazla yerleşik denetim gerçekleştirir: correctness, performance, security, accessibility, usability ve I18N.
Lint birden çok düzeyde çalışır: XML analizi düzenleri, kaynakları (strings, colors, dimens), manifestoyu ve yapılandırma dosyalarını denetler. Java/Kotlin analizi, kaynak kodu eski API çağrıları, iş parçacığı sorunları ve bağlam sızıntıları açısından inceler. Gradle analizi, sürüm uyumluluğu için derleme yapılandırmasını denetler.
Lint denetimi, Android Studio (Analyze > Inspect Code) veya Gradle komutu aracılığıyla başlatılır: ./gradlew lint. Sonuç, build/reports/lint-results.html klasöründe bir HTML raporu ve CI sistemleri için bir XML raporudur. Lint, her dosyayı bağımsız olarak analiz eder ve her biri benzersiz bir kimliğe, açıklamaya, kategoriye ve ciddiyet düzeyine sahip bir dizi kural (Issue) uygular.
Lint ciddiyet düzeyleri: Error (hata — derlemeyi engeller), Warning (uyarı — kaliteyi etkiler), Informational (bilgi — referans için), Ignore (varsayılan olarak yok sayılır). Düzeyler lint.xml'de yapılandırılır. Lint hataları, lintOptions.abortOnError true aracılığıyla Gradle derlemesini başarısız kılacak şekilde yapılandırılabilir.
android {
lintOptions {
abortOnError true
checkAllWarnings true
baselineFile file("lint-baseline.xml")
htmlReport true
xmlReport true
lintConfig file("lint.xml")
}
}
Lint baseline — mevcut uyarıları kabul edilebilir olarak işaretleyen bir dosya. lint --baseline baseline.xml komutuyla oluşturulur. Projeye bir baseline eklendikten sonra Lint yalnızca yeni sorunları bildirir. Bu, yüzlerce uyarı içeren eski bir projeye Lint'i dahil etmek için kullanışlıdır — ekip hataları kademeli olarak düzeltir.
lint.xml — Lint kurallarını özelleştirmek için proje kökünde bir yapılandırma dosyası. Yok sayılan kuralları, ciddiyet düzeylerini ve belirli dosya veya dizinler için istisnaları belirtir. Dosya manuel olarak oluşturulur ve projenin tüm modüllerine global olarak uygulanır. lint.xml olmadan, tüm kurallar varsayılan ayarlarla çalışır.
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<!-- Kullanılmayan kaynak denetimini devre dışı bırak -->
<issue id="UnusedResources" severity="ignore" />
<!-- Bağlam sızıntısı ciddiyetini artır -->
<issue id="StaticFieldLeak" severity="error" />
<!-- Oluşturulan dosyalarda yok say -->
<issue id="MissingTranslation" severity="ignore">
<ignore path="build/generated" />
</issue>
</lint>
@SuppressLint — Java/Kotlin'de yöntem veya sınıf düzeyinde Lint'i devre dışı bırakmak için bir ek açıklama. Örnek: Bir TextView'de metnin dinamik olarak ayarlandığı bir yöntem için @SuppressLint("SetTextI18n"). @RequiresApi ek açıklaması, bir yöntem için minimum API Düzeyini belirtir — minSdk belirtilen değeri aşarsa Lint uyarı yayınlamaz.
Lint'in CI entegrasyonu, Android geliştirmede standart bir uygulamadır. ./gradlew lint komutu tüm modüllerde analiz çalıştırır ve raporlar oluşturur. CI/CD yapılandırmalarında (Jenkins, GitLab CI, GitHub Actions), Lint her pull request'te çalışır. Hatalar bulunursa derleme başarısız olur ve geliştirici Lint HTML raporuyla birlikte bir bildirim alır.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Lint HTML raporu, kategori, kural kimliği, dosya, satır ve açıklama ile bulunan tüm sorunların bir tablosunu içerir. Rapor CI sunucusunda mevcuttur veya derleme yapıtı olarak yayınlanır. XML raporu (lint-results.xml), kod analiz sistemleriyle (SonarQube, CodeClimate) entegrasyon ve izleyicilerde (Jira, YouTrack) otomatik görev oluşturma için kullanılır.
Pull request'lerde Lint — GitHub Actions veya GitLab CI'yi, bir MR/PR oluşturulduğunda Lint'in otomatik olarak çalışması için yapılandırın. Lint hatalar bulursa, CI başarısızlık durumu döndürür ve birleştirme engellenir. Bu, sorunlu kodun ana dala girmesini önler ve kod tabanı kalitesini korur.
Lint kategorileri, Android geliştirmenin tüm yönlerini kapsar. Google, kuralları her biri belirli bir sorun türünden sorumlu olan 12 kategoriye ayırır. En önemli kategoriler Correctness, Performance, Security ve Accessibility'dir. Geliştiricilerin Lint ile etkili bir şekilde çalışmak için her kategorinin temel denetimlerini bilmeleri gerekir.
| Kategori | Açıklama | Örnek kural |
|---|---|---|
| Correctness | Uygulama işlevselliğini etkileyen hatalar | MissingPermission, WrongConstant |
| Performance | Performans ve bellek sorunları | UnusedResources, ViewHolder, DrawAllocation |
| Security | Güvenlik açıkları ve ihlalleri | ExportedContentProvider, WorldReadableFiles |
| Accessibility | Kullanıcılar için erişilebilirlik sorunları | ContentDescription, TouchTargetSize |
| Usability | Kullanılabilirlik ve kullanıcı deneyimi | NotSibling, BackButton, HardcodedText |
| I18N | Uluslararasılaştırma ve yerelleştirme | MissingTranslation, ExtraTranslation |
Performans kuralları pratikte en kullanışlı olanlardır. UnusedResources, XML'de bildirilen ancak kodda kullanılmayan kaynakları bulur. ViewHolder, RecyclerView bağdaştırıcılarında ViewHolder modelinin kullanılıp kullanılmadığını denetler. DrawAllocation, onDraw yönteminde nesne oluşturma konusunda uyarır. Bu sorunların düzeltilmesi APK boyutunu azaltır ve uygulamayı hızlandırır.
Güvenlik kuralları yayınlanan uygulamalar için zorunludur. ExportedContentProvider, bir ContentProvider'ın koruma olmadan dışa aktarılıp aktarılmadığını denetler. WorldReadableFiles, tüm uygulamaların erişebileceği dosyalar oluşturma konusunda uyarır. AllowBackup, manifestodaki allowBackup bayrağını denetler — veri güvenliği için devre dışı bırakılması önerilir.
Sıkça Sorulan Sorular
Derleyici sözdizimini ve türleri denetler, kodu yürütme için bayt koduna çevirir. Lint derleme olmadan kodu analiz eder ve derleyicinin gözden kaçırdığı mantıksal sorunları bulur: kullanılmayan değişkenler, kaynak sızıntıları, yerelleştirme sorunları, performans ihlalleri ve minSdkVersion ile API uyumsuzluğu. Lint derleyiciyi tamamlar ancak onun yerini almaz.
XML dosyalarında, kural kimliğiyle birlikte tools:ignore özniteliğini kullanın: tools:ignore="UnusedResources". Java/Kotlin'de bir yönteme veya sınıfa @SuppressLint ek açıklamasını ekleyin: @SuppressLint("SetTextI18n"). Tüm bir dizin için, lint.xml'i issue düğümü ve severity="ignore" ile yapılandırın. Tüm proje için, modül kökünde lint.xml'i yapılandırın.
Lint baseline, mevcut Lint uyarılarını kabul edilebilir olarak işaretleyen bir XML dosyasıdır. ./gradlew lint -Pbaseline komutu veya build.gradle'de lintOptions.baselineFile aracılığıyla oluşturulur. Baseline eklendikten sonra Lint yalnızca yeni sorunları bildirir. Bu, eski kodlu projelere Lint'i dahil etmek için kullanışlıdır — ekip hataları yinelemeli olarak düzeltir.
com.android.tools.lint kitaplığından lint-api ve lint-checks bağımlılıklarına sahip yeni bir Java/Kotlin modülü oluşturun. Sorunları bulmak için Detector sınıfını ve bunları tanımlamak için Issue sınıfını uygulayın. Modülü bir JAR olarak derleyin, Android projenizin lintLibs klasörüne yerleştirin. Android Studio özel kuralları otomatik olarak algılayacaktır.
Lint, derleyicinin görmediği sorunları bulur: bağlam sızıntıları (Activity, Fragment), minSdkVersion ile API uyumsuzluğu, Gradle yapılandırma sorunları, çok büyük PNG simgeleri, farklı diller ve ekran yapılandırmaları için alternatif kaynak eksikliği. Google Play, yayınlamadan önce Lint'i önerir. Lint olmadan uygulama eski cihazlarda çökebilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.