Android İçin Kütüphane Geliştirken Dikkat Edilmesi Gereken Konular

Hüseyin Serkan Özaydin
5 min readMar 27, 2021

Merhabalar, bugün sizlere bir android kütüphane geliştirirken dikkat edilmesi gereken konulardan bahsedeceğim.

Bir android kütüphane geliştirken kütüphanenin ne için yazılacağını iyi analiz etmemiz gerekiyor. Şöyle ki biz yazılımcılar bazen projenin içinde şu da olsun bu da olsun derken projelerimizi mahvedebiliyoruz. Bu yüzden projeyi geliştirirken ihtiyaçlarımız doğrultusunda iyi bir analiz çıkarmamız lazım.

Birlikte bir android kütüphane geliştirelim. Kütüphanemiz şu işe yarasın;

Kullanıcıdan bir e-mail ve şifre alalım bu aldığımız e-mail ve şifreyi sunucuya gönderip kullanıcıyı kayıt veya login edelim. Sonra kullanıcı bilgilerini kütüphane ile dosyaya kaydedip eğer e-mail bilgisi var ise tekrar bilgilerini girmesini istemeyip kullanıcıya bir liste gösterelim. Birde kütüphaneniz çoklu dil desteğine sahip olacak. Projenin adıda “Medium” olsun.

Proje konusu saçma gelebilir ama elimden geldiğince karşılaşabileceğiniz her durumu bu senaryonun içine eklemeye çalıştım :)

1. Konu : İsimlendirmelere Dikkat Edin

Kütüphaneyi yazmaya başladınız. Bir tane Activity açtınız ve adını “EmailActivity” yaptınız. Geçmiş olsun bu kütüphaneyi kendi projesine ekleyen yazılımcı “Duplicate class hatası alıyorum” diye size geri dönüş yapabilir. Bunun çözümü var ama kütüphaneyi yazma amacımız yazılımcının kütüphaneyi kolay bir şekilde eklemesi :)

Sınıf isimlerini koyarken elinizden geldiğince başına prefix koyun örneğin “EmailActivity” değil de android kütüphanenizin ismini başına örnek olarak ekleyebilirsiniz “MediumEmailActivity” gibi. Bu android kütüphaneyi kendi projesine ekleyen yazılımcı ile isim çakışması ihtimalini azaltacaktır.

Layout oluştururken yukarıdaki isimlendirme yöntemini uygulamalısınız. İsimlendirmeyi “activity_email” yerine “medium_activity_email” yapmalısınız.

Açtınız “medium_activity_email” layoutunu ve ekranın ortasına bir edittext koydunuz ve adınıda “email_edittext” yaptınız. Geçmiş olsun yukarıdaki probleme benzer bir hatayı yazılımcıya yaşatabilirsiniz.

Herhangi bir resource isimlendirmesinin başına projenizin adını prefix olarak koymalısınız. Bu resource isimlendirmelerine colors, string.xml içinde tanımladığınız isimler dahil. Bu konuyu atlamamak için kütüphanenizin gradle dosyasında android taginin içine şöyle bir kod parçası koyabilirsiniz.

Bunu koyunca resource isimlendirmesi yapınca başına “medium” koymayınca Android Studio sizi uyaracak.

2. Konu : Projenize İhtiyacınız Olmadığı Sürece Kütüphane Eklemeyin

Email ekranını yaptınız şimdi kullanıcıdan aldığınız bilgileri servise göndereceksiniz. Böyle bir durumda daha düzgün bir mimari oluşturmak isteyeceksiniz. Çünkü projeniz bildiğiniz uygulama gibi kullanıcının etkileşime gireceği bir kütüphane olacak. Hemen aklınıza “Projenin yapısına Dagger 2 ekleyebilirim” şeklinde fikirler gelecek. Arkadaşlar o fikirlerden uzak durun!!!! Kütüphaneniz olabildiğince yalın olmalı her eklediğini kütüphane başınıza büyük sıkıntılar açabilir.

Örneğin kütüphaneyi kendi projesine ekleyen bir yazılımcının projesinde Dagger 2 olabilir ve tahmin edilemez o kadar saçma sapan bir sebepten dolayı Dagger kütüphaneleri çakışabilir veya yazılımcının kendi projesinde kullancığı bir kütüphane ile çakışabilir. Bu yüzden elinizden geldiğince kütüphane eklemeyin.

Ama bu hiç kütüphane eklemeyin anlamına gelmiyor

Çünkü bazı kütüphaneler cidden ihtiyacınız olabilir. Örneğin OkHttp, Retrofit, Volley vb. mesela bu kütüphaneleri basit şekilde sırf servis işlemleri için kullanabilirsiniz.

3.Konu : Projenin Yapısı Basit Olmalı

Biz yazılımcılar yapı kurmayı çok severiz. Bundan dolayı kütüphanenize MVP, MVVM, MVI vb. yapılar koymak isteyebilirsiniz. Böyle birşeyi yapabilirsiniz ama olabildiğince uzak durun. Çünkü bir proje değil bir kütüphane geliştiriyorsunuz. Yapınız olabildiğince basit olmalı. Bu şu anlama gelmemeli “Allah ne verdiyse Fragment veya Activity’de yazayım :) “ yardımcı sınıflar kullanabilirsiniz :). Basefragment veya Baseactivity kullanabilirsiniz. Bu kod tekrarını azaltacaktır.

Projeniz olabildiğince yalın olmalı. Gereksiz kodlardan uzak durun. Örneğin mapper sınıflarından veya dependencies injection için çok fazla interface sınıflarından uzak durun. Ne kadar bu çözümler bizim genel olarak hayatımızı kolaylaştırsada ne yazık ki projenin yapısını karmaşıklaştıran şeyler.

4.Konu : Local Veri Tutmamaya Çalışın veya Şifreleyin

Arkadaşlar elinizden geldiğince local veri tutmayın. Mesela kütüphanenizi güvenliğin önemli olduğu bir uygulama kullanacak. Eğer localde veriyi tutarsanız developer “Güvenlik zafiyeti var” şeklinde bir geri dönüş olacak. Ama proje isterlerinden bir tanesi eğer kullanıcı daha önce giriş yapmış ise tekrar kullanıcıdan e-mail istemeyelim diye bir ister var ve local de veri tutmayalım diyoruz peki nasıl yapacağız? Böyle bir durumda eliniz kolunuz bağlanacak en iyi şekilde yapabileceğiniz şey local de veri tutarken şifrelemek. Bunun için güzel bir kaynak paylaşayım sizinle

https://developer.android.com/topic/security/data

5.Konu : Sınıflarınızı Internal Yapın (Opsiyoneldir ve Kotlin için geçerlidir)

Size tavsiyem eğer bir android kütüphane geliştiriyorsanız yazılımcı ile paylaşmak istemediğiniz sınıfların başına “internal” şeklinde bir key eklemeniz. Bu sayede kütüphanenin paket ismi dışında bulunan kütüphaneler bu sınıflara erişemeyecektir.

6.Konu : Loglarınızı Kütüphaneyi Dağıtırken Kapatın

Eğer güvenlik yazdığınız kütüphanede önemli ise servis istekleri veya bazı özel yazdırdığınız logları kapatın. Kütüphaneyi kendi projesine ekleyen her yazılımcının sizin sunucuya attığınız isteği görmesini istemezsiniz değil mi :)

7. Konu : Proguard Kullanın

Eğer kütüphanenizde güvenlik önemli ise kodunuzu Proguard ile karıştırmak iyi olacaktır. Açık kaynaklı olarak kullanabileceğiniz en iyi çözüm bu eğer decode edilebiliyorsa kodunuz bunu önlemek için güvenlik firmasından 30.000 Euro para isteyin onun bile açığı var. Amaç kötü niyetli birisinin işini zorlaştırmak. Örneğin SSL şifrelemesinin nasıl yapıldığı biliniyor ama kırmak uzun sürdüğü için caydırıcı özelliği mevcut.

https://developer.android.com/studio/build/shrink-code

8. Konu : SSL Pinning Kullanın ve HTTP İsteklerini Engelleyin

SSL kullanın demiyorum çünkü kullanmak zorundasınız en azından güvenlik için :) SSL Pinning Man in the Middle saldırısını engellemek için yapmalısınız. Bununla birlikte Cleartext Traffic kullanın

https://developer.android.com/training/articles/security-config

Size tavsiyelerim bu kadardı. Şimdi kütüphanenizi nasıl paylaşabileceğinizden bahsedeceğim :)

Projenizi birkaç yol ile diğer yazılımcılar ile paylaşabilirsiniz.

1. Yöntem : AAR Çıktı Alıp Paylaşmak (Tavsiye Etmem)

Ekranları olan bir kütüphane geliştirdiğiniz için projenizi .jar olarak çıktı alamazsınız .aar olarak çıktı alabilirsiniz.

https://developer.android.com/studio/projects/android-library

Projenizi .aar çıktı olarak alıp yazılımcıya verince yazılımcıdan şöyle bir şey duyabilirsiniz “Hacım bu kütüphane çalışmıyor” . Çünkü .aar olarak çıktı aldığınızda projenizin bağımlılıkları .aar dosyasının içine eklenmiyor. Bu yüzden yazılımcının kendi projesine sizin kütüphane içinde kullandığınız kütüphaneleri eklemesini istemelisiniz.

Ama biz yazılımcının işini rahatlatacaktık onun yerine dert çıkarıyoruz :) o yüzden bu seçeneği unutun olur mu öyle şey efendim.

Bunun için fat .aar şeklinde çıktı alabilirsiniz. Bu sizin istediğiniz bağımlılıkları .aar dosyasının içine ekleyecektir. Bunun için oldukça iyi bir Gradle Plugin var.

Ama bu yönteminde bir derdi var :) Eeee kütüphane geliştirmek kolay iş değil derdi çok. Fat .aar çıktısı aldınız ve yazılımcıya verdiniz eğer şanslı iseniz yazılımcıdan bir hata aldım şeklinde bir çıktı almazsınız ama büyük ihtimalle şanslı olmayacaksınız ve sizi arayacaklar “Şu şirket kütüphaneyi kendi projesine ekleyemiyor” gece vakti bakacaksınız sorun ne diye ve karşınıza şu çıkacak; Yazılımcının kendi projesine eklediği kütüphane ile sizin kendi kütüphanenize eklediğiniz kütüphane aynı ve Android Studio hata veriyor. Çünkü siz .aar dosyasının için bağımlılıkları elinizle eklediniz. Böyle bir durumda çok uğraşmanız gerekiyor. Bu yüzden 1. yolu tavsiye etmiyorum

2. Yöntem : Projenizi Publish Etmek (Bu maddeyi gördüyseniz 1. yöntemi okumayın bile)

Evet arkadaşlar kütüphanenizi diğer yazılımların rahatlıkla indirebileceği depolara publish edebilirsiniz. Publish edebileceğiniz yerler;

Eğer kütüphaneniz açık kaynaklı ise Jitpack’te rahatlıkla kütüphanenizi paylaşabilirsiniz ama açık kaynaklı değil ise ücret vermek zorundasınız.

Bir kütüphane geliştirken dikkat edilmesi gereken konulardan elimden geldiğince bahsettim. Umarım ki sizlere faydası olur.

--

--