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…


Characters(Char)

Kotlinde karakterler için char tipi kullanılır. Değişken değeri tek tırnak arasına yazılır. Bir char ifadeye tek tırnaklar arasında sayı, harf, escape char (kaçış karakterleri) ya da unicode veriler yazılabilir.

Escape(Kaçış karakterleri)

Genel olarak test yazarken yardımcı olacak kontroller

isDigit () verilen karakter bir rakamı (‘1’, ‘2’ vb.) temsil ediyorsa true döndürür değilse false döndürür.
isLetter () verilen karakter bir harfi (‘a’, ‘B’, ‘m’ vb.) temsil ediyorsa true değerini döndürür değilse false döndürür.
isLetterOrDigit () verilen karakter bir harfi veya rakamı temsil ediyorsa true değerini döndürür değilse false döndürür.
isWhitespace () verilen karakter bir boşluk (veya ‘\\ t’ veya ‘\\ n’) temsil ediyorsa true…


Type Inference(Tip çıkarımı)

Kotlinde Javanın aksine bir değişken tanımlanırken tip belirtmek zorunlu değildir. Kotlin, değişkene atanan değere göre tipi belirler.

Herhangi bir “String,Int,Float,Long” belirtilmese otomatik olarak kotlin bunu tanımlıyor oluyor.

1-Primitive tipli değişkenler (String,Int,Boolean,Long,Float,Byte,Short,Char)
2- Referans tipli değişkenler (Integer)

Referans tipli değişkenler primitive tipli değişkenler ile aynı değişken tipinde daha fazla alan kaplar..

val = Value’dan gelir. Değeri ilk atamadan sonra değişmeyen(immutable) değişken türüdür.
var = Variable’dan gelir. Değeri değişebilen (mutable) değişken türü.

val name:String = “Ozgur” -> Atadın ve bitti.. Değiştirilemez..
var name:String = “Ozgur” -> Name’in altı çizilecektir..

Burada name = “Ozgur Can” dersem bana “val cannot be reassigned” hatası verecektir…


Android uygulamaların olmazsa olmazı olan Android Manifest dosyası nedir? Ne önem taşır?

Her android projesinin, proje kaynak dosyasında AndroidManifest.xml adında bir xml dosyası yer alır. Her proje oluşturduğumuz da o projeye özel bir manifest dosyası yaratılır.

Şu bilgi olarak kalsın

Peki bir proje de birden fazla “Manifest” dosyası olur mu ? Olursa neden olur ?

APK dosyanız yalnızca bir Android Manifest.xml dosya içerebilir , ancak Android Studio projeniz birkaç tane içerebilir. Dolayısıyla derleme varyantları ve içe aktarılan kütüphaneler tarafından sağlanır. Öyleyse uygulamanızı oluştururken, gradle derlemesi, tüm manifest dosyalarını APK'nızın içinde paketlenmiş tek bir manifest dosyasında birleştirir.

Manifest: Bir uygulamanın çalışması…


Bugün sizlere exoplayer’den bahsediyor olacağım.. Vakit kaybetmeden başlayalım.

Android uygulamanızda müzik ve video oynatmak olmazsa olmaz bir görevdir. Çünkü müzik ve video, uygulamanın kullanıcısı ile uygulamanın sağlayıcısı veya geliştiricisi arasındaki hızlı iletişimin en etkili yollarından biridir.

Bir Android uygulamasına ses ve video eklemenin çeşitli yolları vardır. Bunlardan bazıları MediaPlayer ve ExoPlayer’dır.

ExoPlayer, doğrudan Google’ın Android ekibi tarafından yönetildiği için güvenilirdir. Bu yüzden, ExoPlayer için her desteği Google’ın Developers web sitesinde bulabilirsiniz.

Öncelikle MediaPlayer sınıfı android cihazlarda medya oynatmak için kullanılır. Android’de bulunan hemen hemen tüm medya formatlarını destekler.MediaPlayer kullanımının az olmasında ki temel sebep kendi ihtiyaçlarınıza göre özelleştirmek istiyorsanız, bunu…


Temel bir kaç bilgi ile başlayalım.. Daha iyi kavramanız için bir örnek üzerinden de gösterip sonlandıralım..

JSON (JavaScript Object Notation)yapıları veri depolayan ve genellikle bir sunucu ve istemci arasında veri alışverişi için kullanılan bir formattır.Temel amacı veri alış verişi yaparken daha küçük boyutlarda veri alıp göndermektir.Network işlemleri içinde kullanılan birçok kütüphane var; Volley,Fast Android Networking..Fakat en çok tercih edilen ve network isteklerinde en performanslı olan Retrofit & Gson kütüphanesini kullanacağız.. Bu kütüphanelerde bize web servislerden Json çıktılarını okumıza yardımcı oluyor.

Bir Json örneği;Bizler de Json çıktılarını almamız için bazı kuralları bilmemiz gerekiyor..

Json da veriler “key/value”(anahtar/deger) ikilelerinden oluşur.

Key->…


Merhaba arkadaslar bugün size “High Order” fonksiyonlardan bahsedeceğim..

High order fonksiyonlar functional programing dediğimiz programlama dilinin bir özelliği aslında. High order fonksiyonlar da basit olarak “Bir fonksiyonun parametre olarak başka bir fonksiyonda alması”. Nesne yönelimli programlama da aslında böyle bir kavramla çok karşılaşmazsınız.Bir fonksiyon ne yapar;Int,String,Boolean gibi yada kendi bilerlediğimiz veritiplerini alır ve geriye yine bizim belirlediğimiz ınt,string.. döndürür.

High level fonksiyonlar da ise fonksiyonlarımız bu değişkenleri alabildiği gibi başka bir fonksiyonu da parametre olarak alıp,başka bir fonksiyonu da değer olarak döndürebiliyor.

O zaman parametre olarak fonksiyon alabilir,geriye fonksiyon döndürebilir veya ikisini de döndürebilir diyebiliriz..

Şimdi ilk olarak for döngüsü…


Extension fonksiyonlar var olan sınıflara yeni davranışlar eklememize veya yeni fonksiyonlar ekleyerek bir sınıfın işlevselliğini arttırmamıza yardımcı olurlar..Herhangi bir extend veya miras(kalıtım) gerektirmez. İlk başta oturmayabilir ama örneklerle oturacağına eminim.

Örneğin bir uygulamada girilen değerin her zaman faktoriyelini aldırmak,girilen rakamın 10 ile toplanmasını veya girilen her değerin sonuna ünlem eklenmesi de olabilir..

İlk olarak girilen değerin faktoriyelini alacak fonksiyonu yazalım.. Önce normal şartlarda ne olacağını.. Daha sonra Extension kullanarak.

Normal şartlar da faktoriyelini bu şekilde yazdırıyoruz..

Bunu extension olarak nasıl yaparım?

Ne yaptığımızı acıklayalım. “Int classına yeni bir fonksiyon eklemiş olduk. Artık bunu çağırdığımız yerde Int degere faktoriyelini…


Merhaba arkadaslar.. Bugün size visibility(Erişim belirleyici) kavramından söz edeceğim. Peki bunlar nedir,ne gibi durumlar da kullanılır? Hazırsanız başlayalım.

Kod güvenliği açısından ve ya belli yapılara; sadece belli yerlerde kullanmak için erişim alanlarını kısıtlayabiliriz.. Basit bir örnekle daha iyi anlayacağınızı düşünüyorum.

Farklı farklı erişim belirleyecilerle bir kaç değişken tanımlıyacağım.

private:İlgili sınıfın heryerinde geçerlidir..

protected: İlgili sınıf ve türetilen sınıflarda da kullanımını sağlayabilirsiniz.

internal: İlgili modül tarafından tanınırlar. Modülün dışına çıkarsanız özelliklerini kaybederler.

public:Default olarak atandığı için zaten heryerden erişebiliyorsunuz..

Şimdi bir alt sınıf tanımlayalım. Ve bunu BMW sınıfından türetelim.Bu sınıfın içerisinde hepsine erişimimiz mümkün mü?

Burda bir hata alıyoruz!

Burası önemli; Bütün sınıflar varsayılan…

Özgür Can

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store