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.
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.
5 yorum
Firebase gerçekten çok şişiriyor, ama çoğu zaman gerek yok.
gercekten de firebase'i ihtiyac olmadan cektikleri cok oluyor, ama belli etmiyor once.
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.
bende analytics kaldırınca 3 mb fark ettim gereksiz yere çektim işte
image analytics filan hiç kullanmıyorsan proguard ile bile kurtaramıyorsun o kadar, direkt çıkarmak daha mantıklı