Android geliştirme alanında tercih ettiğimiz kütüphaneler bazen hayat kurtarıcı olabiliyor. Bu alanda kütüphanelerin bir hayli fazla olması geliştiricilere farklı farklı avantajlar ve dezavantajlar sunabiliyor.
Bu yazıda sizlere Android geliştirme süreçlerinde işimize çok fazla yarayacak ve sektördeki firmaların da tercih ettiği kütüphanelerden bahsedeceğim. Hazırsanız başlayalım !
1- Hilt
Üstünde çalıştığımız projelerimiz geliştikçe ve büyüdükçe proje içerisindeki bileşen ve yapılar arasındaki bağımlılık artabiliyor ve bu artış bir geliştiricinin ciddi anlamda istemeyeceği bir durumdur.
Hilt Google’ın Jetpack Kütüphaneleri serisinde yer almakla beraber Dagger üstüne inşa edilmiş bir bağımlılık enjeksiyonu kitaplığıdır. Bu kitaplık ile beraber daha az bağımlı sınıflar oluşturabilirsiniz.
https://developer.android.com/training/dependency-injection/hilt-android
2- Retrofit
Geliştirdiğiniz proje HTTP işlemleri yapmanızı gerektiriyor ise bu kitaplığı kesinlikle denemelisiniz. Sektörde çok önemli bir konumda olan Retrofit kütüphanesi ile beraber HTTP işlemlerinizi gerçekleştirebilirsiniz.
Bu kısımda Volley gibi farklı kitaplıklar da tercih edilebilir. Lakin karşılaştırılma yapıldığı zaman Retrofit ile HTTP ilemlerinin çok daha hızlı yapılabildiği görülmüştür.
https://square.github.io/retrofit/
2- Glide
Uygulamalarımız içeriklerini oluştururken resimlerini internetten yüklemek durumunda kalabilir. Bu durumda yardımımıza Glide kütüphanesi koşuyor.
Çok fazla fonksiyona sahip Glide kütüphanesi ile Web üzerinden bir fotoğraf yükleyebilir, fotoğraf yüklenirken kullanıcıya bir progress gösterebilirsiniz ve yüklenen datayı önbelleğe alabilirsiniz.
https://github.com/bumptech/glide
3- Picasso
Picasso kütüphanesi Retrofit kütüphanesinin yaratıcıları tarafından oluşturulmuş bir resim yükleme kütüphanesidir. Glide ile karşılaştırıldığında min düzeyde Glide daha hızlıdır. Bir başka fark ise Glide kütüphanesi temel işlevi için bir Context’e ihtiyaç duyarken Picasso kütüphanesi Context’e ihtiyaç duymaz.
https://github.com/square/picasso
4- Coil
Son olarak önerebileceğim resim kütüphanesi Coil’dir. Coil kütüphanesinin önermemin sebebi sadece Kotlin diline has bir kitaplık olmasıdır. Bunun sebebi ise bildiğiniz üzere Google artık tamami ile Kotlin tarafına destek vermekte. Bugün bir sonraki maddelerde göreceğiniz Coroutines gibi yapıların tamamı Kotline has yapılardır.
İlerleyen zamanda Java dilinin native geliştirmede daha fazla geride kalacağı ve Kotlinin çok daha fazla kullanılması ön görüldüğü için has kütüphaneleri öğrenmenin geliştiriciye avantajı olacaktır.
https://github.com/coil-kt/coil
5- Coroutines
Coroutines kitaplığı Kotlin programlama diline has bir kitaplık olup geliştiriciye asenkron programlamayı çok daha basit bir şekilde kullanma şansı tanır.
Coroutines yapısının Android projelerine ekstra bir kütüphane olarak tanımlanması açıkçası garip bir durum. Bunun nedeni Kotlin dilinde yatıyor.
Kotlin dili kendi içinde suspend fonksiyonlarını barındırıyor lakin bu fonksiyonlar ya başka bir suspend fonksiyon içinden yada bir coroutine scope içinden çağrılması gerekiyor. Yani her halükarda dilin kendi özelliğini kullanmak için bu yapıyı projenize bir kütüphane olarak eklemek durumundasınız :/
https://developer.android.com/kotlin/coroutines
6- DataBinding – ViewBinding
Bu kısımda iki kütüphaneyi bir başlık altında anlatacağım. Bunun sebebi bu ikili birlikte gerçekten çok iyi işler çıkartıyorlar.
ViewBinding kütüphanesi XML kısmında yer alan görünümlerimize erişmemizi daha kolay bir hale getiren bir yapıya sahip.
0 kütüphane kullanımında gerçekleşecek senaryoda görünümlerimizin herbirini teker teker kotlin veya java dosyalarımızda tanımlayıp findViewById gibi yöntemler ile görünüme tanımladığımız ID ile tek tek bir eşleşme yapmak durumundaydık.
ViewBinding ile oluşturduğunuz herbir XML dosyası için bir Binding sınıfı otomatik olarak oluşturulur sizler de bu sınıf referansı ile görünümlerinize erişirsiniz.
https://developer.android.com/topic/libraries/view-binding
ViewBinding kütüphanesine alternatif olarak daha eski bir kütüphane olan ButterKnife kütüphanesini düşünebilirsiniz. Bu kütüphane ile beraber Annotation’lar ile görünüm bağlama işlemlerinizi yapabiliyorsunuz.
https://github.com/JakeWharton/butterknife
Data Binding kütüphanesi ise XML kısmında görünümlerimizin sahip olduğu değerleri değiştirmekle ilgili gerçekleştirilmiş bir kütüphanedir.
Birden çok kullanıcının doldurduğu formları listeyen bir arayüz hayal edelim. Her bir kullanıcının form bilgilerini UI kısma yansıtmanız için teker teker görünümlere erişmeniz ve görümlerin değerlerini değiştirmeniz gerekiyor.
Lakin DataBinding kütüphanesi ile XML kısımda tek bir nesne oluşturup elinizde form bilgisini sağlayan nesneyi iletiyorsunuz ve bildirime dayalı bir şekilde tüm bilgiler tüm görünümlere dağılıyor. Gerçekleşen bu işlemler yaşam döngüsü dikkate alınarak gerçekleşiyor.
https://developer.android.com/topic/libraries/data-binding
6- Navigation
Android projelerimizde Activity ve Fragment’lar arasında geçiş yaparken bu geçişleri UI arayüze sahip bir kütüphane ile gerçekleştirmek istemez miydiniz ? Navigation kitaplığı IOS kısmında StoryBoard yapısına çok benzemekle beraber sayfalar arası geçişleri ok gibi görsel işaretler oluşturarak tanımlamanıza ve backstage yönetimini kütüphanenin ele almasını sağlıyor. Bu kütüphane ile sayfalar arası geçişlerinizde obje aktarımı ve animasyon gibi yapılarıda yönetebilirsiniz.
https://developer.android.com/guide/navigation
7- Room
Android uygulamalarımızda lokal depolama için çeşitli senaryolara göre çeşitli yöntemler kullanabiliriz. Örneğin depolayacağımız veri çok küçük ve tekil bir yapıya sahipse SharedPreferences gibi bir kütüphane bizim için mükemmel bir çözüm olabilirken verimiz büyüdükçe ve ilişkisel bir yapı içine girdikçe Veritabanı gibi yapıları kullanmamız bizim için çok daha mantıklı olacaktır.
Veritabanının oluşturulması, güncellenmesi ve tablolar için çeşitli CRUD işlemlerinin daha basit bir halde gerçekleştirilmesi için Room kütüphanesi kullanılabilir. Annotation yapısının yine çok fazla görüldüğü bu kütüphane SQLite yapısının üstüne kurulmuş bir yapıdadır.
https://developer.android.com/training/data-storage/room
8- Paging
Projeniz bir API üzerinden yığın ile veri alıyor ise ve aldığı verileri listelemesi gerekiyorsa bu kitaplık performans açısından önemli bir role sahip durumda.
Bu kitaplık ile beraber sunucu tarafından alacağınız verilerin tamamını bir anda değil de parça parça alabilirsiniz. Kullanıcı ona verilen parçaları tükettiği zaman yeni parçaları sunucudan alıp kullanıcıya yansıtabilirsiniz.
Bir örnek vermek gerekirse bugün instagram’da akışınızda takılırken aşağı doğru kaydırıyor ve yeni gönderilerin tadını çıkarıyorsunuz. Bir anda bir progressin en dipte dönmekte olduğunu görüyorsunuz ve internet hızınıza bağlı olarak yeni gönderiler geliveriyor. Bu durumun azizliği Paging yapısından sorulur.
Yanlış anlaşılmasın Paging bir sayfalama sistemidir. Bunu illa bir kütüphane ile kullanmanız gerekmiyor. Burada bahsettiğimiz Jetpack kütüphaneleri arasında yer alan ve bu sistemi sizin için daha basit bir hale getiren bir kitaplıktır.
https://developer.android.com/topic/libraries/architecture/paging/v3-overview
9- Lifecycle
Lifecycle ile beraber projenize farklı amaç ve işlevlerde yaşam döngüsüne bağlı bileşenleri ekleyebilirsiniz.
Bu yapıların tamamından söz etmektense yaşam döngüsüne duyarlı bileşenlerin temelde ne amaçla var olduklarından bahsetmemiz bizim için daha öncelikli olacaktır.
Android uygulamalarının açılması ve tamamen kapatılması olayları da dahil olmak üzere belirli bir yaşam döngüleri vardır. Bu yaşam döngüleri uygulamanın akışını farklı şekillerde etkilemektedir.
Kullandığımız bileşenler yaşam döngüsüne duyarlı değil ise yaşam döngüsü olaylarına karşı hazırlıksız bir durumda kalarak uygulamamızın gerektiği gibi çalışmamasını bekleyebiliriz. Örneğin bir kullanıcı edittext içerisine veri yazarken telefon döndürüldüğünde aktivite yaşam döngüsü olaylarına tabii tutularak pause edillip resume ediliyor bu durumda edittext içerisinde yazdığımız o veriyi göremiyoruz.
Bunun için yaşam döngüsüne duyarlı bileşenler kullanarak bu durumları kontrol altına almaya çalışıyoruz. Üstelik android MVVM mimarisini desteklediği gibi bu mimari için gerekli ViewModel yapısı da yaşam döngüsüne duyarlı olarak lifecycle yapısından bunu temin edebiliriz.
https://developer.android.com/jetpack/androidx/releases/lifecycle
10- RxJAVA
Oluşturacağınız projede olay tabanlı ve asenkron yapılar kullanmak istiyorsanız RxJava sizler için mükemmel bir tercih olabilir.
RxJava yapısının başka çoğu kütüphaneye desteği vardır. Room kütüphanesinde olay tabanlı ve asenktron işlemler gerçekleştirebilirsiniz veya Retrofit kütüphanesi ile beraber bu yapıyı kullanabilirsiniz. Bu yapıyı kullanmak isteyen kişiler Observer tasarım kalıbı hakkında da bilgi edinirlerse kitaplığın nasıl çalıştığı hakkında daha iyi bilgi sahibi olabilirler.
https://github.com/ReactiveX/RxJava
Bir sonraki yazıda görüşmek üzere. O zamana kadar kendinize iyi bakın.