Android Lint Custom

Özgür Can
3 min readSep 1, 2021

Bu makalenin sonunda basit bir custom lint yazmış olacağız.. Fakat önce lint nedir bundan biraz bahsedelim.

Android lint aracı, proje kaynak dosyalarınızı olası hatalar ve doğruluk, güvenlik, performans, kullanılabilirlik, erişilebilirlik ve uluslararasılaştırma için optimizasyon iyileştirmeleri için kontrol eden,kaynak kodumuzdaki hataları derlemeye veya çalıştırmaya gerek kalmadan bulmayı amaçlayan statik bir kod analiz aracıdır.

Yukarı anımsamanız için küçük bir uyarı örneği gösterilmiştir. Henüz @Beta sürümü olmadığını belirtiyor. Bizde buna benzer projemize özel kurallarımızı oluşturacağız.

Kural Modülü oluşturma

Kurallarımızın bildirileceği ayrı bir Java/Kotlin modülü tanımlayarak başlıyoruz. Ardından Rules/build.gradle’a gidip aşağıdaki bağımlılıkları ekleyioruz..
File -> New modüle -> Java or Kotlin Library -> Module Name: lintRules

Dolayısıyla aşşağı bir build/gradle dosyamız daha oluşmuş oldu. Artık bağımlılıklarımızı ekleyebiliriz.

Projemize modülü dahil edelim.

Ve artık modül için yazılan her kod parçacığı app’e etki edebilir.

Kod yazmaya geçmeden önce bilmeniz gereken önemli parçalar:

Issues/Detectors

Issue = Kuralınızın çözmesi gereken hatayı bildirme şeklimizdir. Çözümlenmese proje build olacaktır.. Özelliklerine aşşağıdan bakalım..

Detector = Bir ya da daha fazla belirli sorunu bulabilen sınıftır.
* Soruna bağlı olarak, farklı dosya türlerine daha iyi arayüzler sağlamak için farklı Dedektör türleri kullanabiliriz.. Farklı detector türleri nedir?

Source Scanner — Java/Kotlin kaynak dosyalarında uzmanlaşmış bir detector

XmlScanner - XML dosyalarında uzmanlaşmış bir detector

GradleScanner - Gradle dosyalarında uzmanlaşmış bir detector

ResourceFolderScanner - kaynak klasörlerinde uzmanlaşmış bir dedektör (içerdiği dosyalar değil).

- Fazlasını kodları yazarken anlamanız açısından yanlarına not alacağım. Bu şekilde oku ve geç olarak akılda kalıcı olmayacaktır.

Artık Issue ve Detector’ler ile az da ne yapacağımızı,kim nerden sorumlu anlamış olduk. Başlıyoruz. Basit bir log algılayıcı kontrolü sağlayacağız.

1-) Modülümüzün içerisine “AndroidLogDetector” adında bir class oluşturuyoruz.
2-) AndroidLogDetector: Detector(), SourceCodeScanner {} Classımız Detector ve SourceCodeScanner dan extend ettik çünkü;

Detector: Bir sorunu tespit etmek için Android Lint tarafından kullanılabilecek şekilde genişletir.
Issue: Hem Kotlin hem de Java dosyalarını incelememiz gerektiğinden SourceCodeScanner’ı genişletir.

AndroidLogDetectorümüze ilgili “log”u kontrol edecek metodları ve açıklamalarını ekledik.. Kaynak kod üzerinden kontrol edebiliriz.. Bitti mi ? Hayır!.

Kurallarınızı çözmesi gereken hatayı bildirme şeklimiz IssueRegistry classıdır.
Hemen yeni bir class oluşturuyoruz ve “IssueRegistry”den exten alıp override metodlarını kontrol edebiliriz..

İlgili Dedektörümüzü oluşturduğumuz için, onu Android Lint motoruna görünür hale getirmeliyiz. Bunu yapma şeklimiz, sorunları ve bunların algılayıcılarını tanımlama sorumluluğuna sahip olan bir IssueRegistry aracılığıdır.

Ancak, Android Lint’in Sorun Kayıt Defterimizi keşfetmesi için bir Hizmet Bulucu bildirmemiz gerekiyor. Bu Servis Bulucu, kaynaklar klasörümüzde belirli bir konumda tanımlanır. Tanımlamak için şu dosya girişini oluşturuyoruz:

lintRules modülü sağ click -> New -> directory -> src/main/resources tanımlıyoruz ve içerisine META-INF dosyası açıp,“services” package koyuyoruz. “service”

rules/src/main/resources/META-INF -> file oluşturuyoruz ve artık çalıştırmak kaldı.

Çalıştırma işlemi “Terminal” den sağlanmaktadır.. Terminale geliyoruz ve “./gradlew app:lintDebug” yazıp taramayı başlatıyoruz.

Sonuç ektedir..

Bu bir log için örnekti sadece. Fakat bunu örneğin “ViewPager” kullanımları için “Artık viewpager2 kullanılması zorunludur.Sebebi … gibi hatalar ile süsleyebiliriz.”.

İlk Custom Lint’imizi tamamladık. Umarım projelerimizi daha clean yazabileceğimiz şekilde özel lint’ler oluşturacak yeni örneklere.. Görüşmek üzere.. Sağlıcakla kalın..

--

--