← Blog'a Dön

APK vs AAB Savaşı

APK vs AAB Savaşı
Bir Formatın Diğerinin Yerini Alması
2018'e kadar Android uygulama dağıtımı tek bir format üzerine kuruluydu: APK. Sonra Google bir rakip çıkardı — AAB. Ve bu çıkışla birlikte sessiz ama kararlı bir geçiş süreci başladı.
Bugün bu savaşın kazananı neredeyse kesin belli. Ama her geliştiricinin bu geçişi neden yapması gerektiğini, APK'nın nerede hâlâ vazgeçilmez olduğunu ve iki format arasındaki farkın gerçekte ne anlama geldiğini anlamak önemlidir.

APK'nın Yirmi Yıllık Saltanatı
APK, Android'in ilk günlerinden beri var olan ve her şeyi tek bir pakette toplayan formattır. Uygulamanın tüm DEX dosyaları, tüm diller için tüm string kaynakları, her işlemci mimarisi için her native kütüphane, her çözünürlük için her görsel — bunların tamamı tek bir dosyaya paketlenir.
Bu yaklaşım son derece basittir. Tek bir dosya üretilir, bu dosya her cihaza yüklenir, her cihazda çalışır. Geliştirici bakış açısından anlaşılması ve yönetilmesi kolaydır.
Ama bu basitliğin ciddi bir bedeli vardır.

APK'nın Gizli Boyut Sorunu
Bir APK tüm kullanıcılar için tüm kaynakları içerir. Ama hiçbir kullanıcı bu kaynakların tamamına ihtiyaç duymaz.
ARM64 işlemcili bir telefon x86 kütüphanelerine ihtiyaç duymaz. Türkçe dil ayarına sahip bir cihaz Japonca, Arapça ve İsveççe string dosyalarına ihtiyaç duymaz. Düşük çözünürlüklü bir ekran xxxhdpi görsellere ihtiyaç duymaz.
Ama APK bunların hepsini birlikte gönderir. Kullanıcı yalnızca kendi cihazı için gerekli içeriği alır, geri kalanı boşu boşuna indirir, depolar ve yer kaplar.
Büyük bir uygulama için bu fark onlarca megabayta ulaşabilir. Veri kotası kısıtlı kullanıcılar için bu megabaytlar önemlidir. Depolama alanı dolu olan bir cihazda bu fark uygulamanın yüklenip yüklenmeyeceğini belirleyebilir.

AAB'nin Farklı Yaklaşımı
AAB, Android App Bundle, bu sorunu temelinden farklı bir yaklaşımla çözer.
APK'da dağıtım birimi tek ve bölünemez bir pakettir. AAB'de dağıtım birimi Play Store'a yüklenen bir şablondur. Bu şablon tüm kaynakları içerir ama kullanıcıya doğrudan gönderilmez.
Play Store her cihaz için bu şablondan özel bir APK üretir. ARM64 cihaz için ARM64 kütüphaneleri ve yalnızca Türkçe kaynaklar içeren bir APK. xxxhdpi ekranlı cihaz için yüksek çözünürlüklü görseller içeren bir APK. Her cihaz kendi profiline özel, optimize edilmiş paketi indirir.
Google'ın kendi ölçüm verilerine göre bu optimizasyon ortalama yüzde yirmi ila kırk arasında indirme boyutu küçülmesi sağlar. Bu oran uygulamanın ne kadar çok dil, mimari ve ekran yoğunluğu desteklediğine bağlı olarak değişir.

Zorunluluk: Google'ın Kararı
Google, 2021'de yeni uygulamalar için AAB formatını zorunlu hale getirdi. Ağustos 2021'den sonra Play Store'a yüklenen yeni uygulamalar yalnızca AAB formatında kabul edilir.
Mevcut uygulamalar için bu zorunluluk hâlâ APK ile devam etmeye imkân tanıyor. Ama Play Store'un sunduğu yeni özelliklerin büyük çoğunluğu yalnızca AAB kullanan uygulamalara açık. Dynamic delivery, play feature delivery ve gelecekteki optimizasyonlar AAB ekosistemi üzerine inşa edilmeye devam ediyor.
Bu kararın mesajı nettir: Google'ın vizyonu AAB üzerine kuruludur ve APK desteği zamanla daralmaya devam edecektir.

APK Hâlâ Nerede Zorunlu?
AAB'nin kazandığı bu savaşta APK tamamen yok olmadı. Hâlâ vazgeçilmez olduğu senaryolar vardır.
Play Store dışı dağıtım APK gerektirir. Şirket içi uygulama dağıtımı, beta test araçları, yan yükleme (sideloading), APK paylaşım platformları — bunların tamamı APK formatıyla çalışır. AAB yalnızca Play Store altyapısı tarafından işlenebilir, başka bir sistem bu şablondan cihaza özel APK üretemez.
Geliştirme ve test sürecinde APK kullanılmaya devam eder. Android Studio'dan cihaza doğrudan yükleme APK üzerinden gerçekleşir. Debug build'ler, CI/CD pipeline'larındaki test kurulumları ve emülatör testleri APK formatını kullanır.
Belirli özel dağıtım senaryoları da APK gerektirebilir. Kurumsal cihaz yönetimi (MDM) çözümleri, kiosk uygulamaları ya da internet erişimi olmayan ortamlar için hazırlanan uygulamalar APK dağıtımına ihtiyaç duyabilir.

Geçiş Ne Kadar Zor?
Çoğu proje için AAB'ye geçiş birkaç dakikadan fazla sürmez.
Android Studio'da "Generate Signed Bundle / APK" seçeneği her ikisini de üretir. Gradle yapılandırmasında köklü değişiklik gerekmez. Mevcut imzalama altyapısı olduğu gibi çalışır.
Dikkat gerektiren tek alan ProGuard ve R8 kurallarıdır. AAB, Dynamic Delivery özelliğini kullandığında modüller ayrı paketler halinde dağıtılır. Modüller arası kod referansları için keep kurallarının doğru yazılmış olması gerekir.
Dynamic Feature Modules kullanacaksanız bu kısım daha karmaşık hale gelir. Her modülün bağımlılıkları, indirme zamanlaması ve kullanıcı deneyimi ayrı ayrı tasarlanmalıdır. Ama temel AAB geçişi bu karmaşıklığı gerektirmez.

Savaşın Kazananı
Bu savaşın kazananı AAB'dir ve bu sonuç değişmeyecektir. Google'ın stratejik kararları, zorunluluk politikası ve gelecek geliştirmelerin AAB üzerine odaklanması bunu net biçimde ortaya koyuyor.
APK ortadan kalkmayacak. Ama giderek daha niş kullanım senaryolarına çekilmeye devam edecek. Play Store için AAB, geliştirme ve test için APK — bu iki formatın birbirini tamamladığı bir düzen oluşmuş durumda.
Yeni bir proje başlatıyorsanız AAB'yi Play Store dağıtımı için baştan benimseyin. Mevcut bir projeniz varsa ve henüz geçmediyseniz geçiş için daha iyi bir zaman olmayacak — hem indirme boyutunuz küçülür hem de Play Store'un sunduğu tüm özelliklerden yararlanmaya başlarsınız.