APK Size Optimization: Hangi Kütüphaneler Gerçekten Şişiriyor

APK boyutu mobil geliştirmenin göz ardı edilen ama ciddi sorunu. Bir kütüphanenin 500 KB gibi görünmesi 5 MB'a çıkabilir, bağımlılıkları ve transitif dependency'leri sayınca.

Google Play'in 2024 verilerine göre, 100 MB üstü uygulamalar %40 daha az indirilir. Oysa çoğu geliştirici bu sınırı aşıyor çünkü hangi kütüphanenin ne kadar yer kapladığını bilmiyor.

Firebase başı çekiyor. Firestore + Authentication + Analytics birlikte 8-12 MB ekliyor. Sadece Cloud Messaging gerekiyorsa, tüm Firebase'i çekmek yerine `firebase-messaging` ve `firebase-analytics` ayrı seçmelisin. Hiçbir şey seçmemek daha iyi.

Glide ve Picasso gibi görüntü yükleyicileri 2-3 MB'lık birer blok. Picasso daha hafif ama Glide'ın cache mekanizması uzun vadede veriye tasarruf ettiriyor. Hangisini seçersen seç, ikisini aynı anda çekme.

Jetpack Compose ile Material Design 3 kullanıyorsan, eski XML layout'lar yerine 1-2 MB daha fazla harcayacaksın. Değer mi? Evet, ama bunu bilmeden projeye ekleme.

OkHttp + Retrofit kombinasyonu 1.5 MB. Ama `HttpURLConnection` ile başlayıp sonra eklemek daha akıllı.

Transitif bağımlılıklar öldürücü. Bir kütüphane A'yı, A kütüphane B'yi, B de C'yi çekiyorsa, sen sadece birini import etsen de üçünün hepsi APK'da. `gradle dependencies` komutu bunu gösterir ama çoğu kişi çalıştırmaz.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Native kütüphaneler (.so dosyaları) gerçek canavar. Bir C++ kütüphanesi ARM64 + ARMv7 + x86 için derlenirse, her mimarinin ayrı binary'si APK'yı şişirir. Sadece ARM64 desteklemek (2024'te mantıklı) boyutu yarıya indirir.

`Build > Analyze APK` Android Studio'da. Hangi dosyanın kaç byte kapladığını göreceksin. `lib/` klasörü şaşırtıcı derecede büyükse, native dependency'leri gözden geçir. `res/` çok büyükse, çözünürlüklü drawable'ları dinamik yükle.

ProGuard/R8 ile minification şart. Kullanılmayan kod otomatik silinir, ama native kod silinmez. Burada manuel kontrol gerekir.

Yeni proje başlıyorsan, kütüphanesiz başla. Gerçekten gerekirse ekle. Mevcut projeyse, `gradle dependencies tree` çıktısını oku ve gereksiz transitif bağımlılıkları `exclude` et.

Firebase yerine REST API, Glide yerine Coil (daha hafif, Kotlin-first), Material Design 3 yerine Material 2 (zaman varsa), bu seçimler 10-15 MB fark yaratabilir.

APK boyutu performans değildir ama indirme oranı doğrudan dönüşüme etki eder. Bir kütüphane harika olsa da, 5 MB'lık overhead'i haklı çıkaramıyorsa, daha basit alternatifi tercih et.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz

5 yorum

  • birgunolur

    Firebase gerçekten çok şişiriyor, ama çoğu zaman gerek yok.

  • adlı kullanıcıya yanıt verdi
    birgunolur

    image analytics filan hiç kullanmıyorsan proguard ile bile kurtaramıyorsun o kadar, direkt çıkarmak daha mantıklı

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    bende analytics kaldırınca 3 mb fark ettim gereksiz yere çektim işte

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    aynen, sonra apk analiz ettiğinde fark ediyor insan. ben de başta tüm firebase'i almıştım, sonra sadece messaging gerekiyormuş gerçi.

  • uykuarasi

    gercekten de firebase'i ihtiyac olmadan cektikleri cok oluyor, ama belli etmiyor once.