Lint: temeller, Android projeleri için statik analizör

Yazar: IT Sectr Yayınlanma: 2026-02-13 Okuma süresi: 10 dk

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 — kod denetimi için Android Studio ve Gradle'da yerleşik statik analizör
  • Lint denetimi — uygulama derleme aşamasından önce XML, Java ve Kotlin'de hata analizi
  • lint.xml — Android projesinde Lint kurallarını özelleştirmek için yapılandırma dosyası
  • Lint baseline — kademeli benimseme için mevcut uyarıları dondurma mekanizması
  • CI entegrasyonu — otomatik kod kalite kontrolü için derleme sunucusunda Lint çalıştırma

Lint Nedir — statik kod analizörü?

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 Android projelerinin kodunu nasıl 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.

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

Yapılandırma dosyalarında Lint kurallarını yapılandırma

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

CI/CD hattında Lint denetimi çalıştırma

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.

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

Android'de Lint kurallarının ana kategorileri

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.

KategoriAçıklamaÖrnek kural
CorrectnessUygulama işlevselliğini etkileyen hatalarMissingPermission, WrongConstant
PerformancePerformans ve bellek sorunlarıUnusedResources, ViewHolder, DrawAllocation
SecurityGüvenlik açıkları ve ihlalleriExportedContentProvider, WorldReadableFiles
AccessibilityKullanıcılar için erişilebilirlik sorunlarıContentDescription, TouchTargetSize
UsabilityKullanılabilirlik ve kullanıcı deneyimiNotSibling, BackButton, HardcodedText
I18NUluslararasılaştırma ve yerelleştirmeMissingTranslation, 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

Lint ve derleyici arasındaki fark nedir?

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.

Kodda belirli bir Lint uyarısı nasıl devre dışı bırakılır?

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 nedir ve nasıl kullanılır?

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.

Özel bir Lint kuralı nasıl oluşturulur?

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.

Android projelerinde Lint denetimi neden zorunludur?

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

  • Android Lint — Android SDK ve Android Studio'da yerleşik statik kod analizörü
  • Lint denetimi — uygulama derlemesinden önce XML, Java ve Kotlin'de olası hata analizi
  • lint.xml — Android projesinde Lint kurallarını özelleştirmek için yapılandırma dosyası
  • Lint baseline — kademeli benimseme için mevcut uyarıları dondurma mekanizması
  • CI entegrasyonu — derleme sunucusunda Lint çalıştırmak kritik hatalı PR'ları engeller
  • Lint kategorileri — Correctness, Performance, Security, Accessibility ve I18N
  • @SuppressLint — yöntem veya sınıf düzeyinde Lint'i devre dışı bırakmak için ek açıklama

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.

Projeyi tartış

Ayrıca okuyun