AAB (Android App Bundle), 2021 yılından itibaren Google Play'de APK'nın yerini alan Android uygulamaları için bir yayınlama biçimidir. APK'nın aksine AAB bir kurulum dosyası değildir — Google Play'in her cihaz için dinamik olarak optimize edilmiş APK'lar ürettiği bir kapsayıcıdır. Android Developers, 2026'ya göre, bu biçim kullanılmayan kaynakları hariç tutarak indirilen uygulama boyutunu ortalama %15 azaltır.
Önemli Noktalar
AAB (Android App Bundle), Google tarafından Google Play üzerinden dağıtım için APK'nın yerine geçmek üzere geliştirilmiş bir yayınlama biçimidir. AAB'nin içinde derlenmiş kod, kaynaklar ve meta veriler içeren .aab uzantılı bir ZIP arşivi bulunur. Temel fark: AAB doğrudan bir cihaza kurulmaz.
Geliştirici AAB'yi Google Play Console'a yükler. Bir kullanıcı uygulamayı yüklemeye çalıştığında, Google Play cihaz yapılandırmasını analiz eder: ekran yoğunluğu (DPI), CPU mimarisi, dil ve Android sürümü. Bu analize dayanarak yalnızca gerekli bileşenleri içeren minimum bir APK oluşturulur.
Google, AAB'yi 2018 yılında I/O konferansında tanıttı. 2021 yılı Ağustos ayından itibaren Google Play'deki tüm yeni uygulamalar için bu biçim zorunlu hale geldi. Mevcut uygulamalar APK kullanmaya devam edebilir, ancak yenileri yalnızca AAB biçiminde yayınlanmalıdır.
AAB ve APK arasındaki fark temeldir: APK, kuruluma hazır tam bir kurulum dosyasıdır. AAB, işlem gerektiren kaynak bileşenleri içeren bir kapsayıcıdır.
| Parametre | APK | AAB |
|---|---|---|
| Tür | Kurulum dosyası | Yayın kapsayıcısı |
| Kurulum | Doğrudan cihaza | Google Play üzerinden |
| Boyut | Tam arşiv | Kaynak bileşenler |
| Modüller | Hepsi tek dosyada | Ayrı modüller |
| İmza | Geliştirici | Google Play |
| Dağıtım | Herhangi bir kanal | Google Play |
APK, Google Play dışında (web siteleri, e-posta veya kurumsal MDM sistemleri) dağıtım için uygundur. AAB, Google Play altyapısına bağlıdır ve doğrudan kurulamaz. AAB'yi test etmek için yerel makinede APK oluşturmayı simüle eden bundletool aracı kullanılır.
AAB'nin iç yapısı APK'ya benzer ancak modülleri ve bağımlılıklarını tanımlamak için ek dizinler ve dosyalar içerir.
| Dosya/dizin | Amaç |
|---|---|
| base/ | Temel modül: kod, kaynaklar, manifest |
| BundleConfig.pb | Protobuf biçiminde paket yapılandırması |
| Bundle-metadata/ | Modül sürümleri hakkında meta veriler |
| feature/ | Dinamik modüller (isteğe bağlı) |
| assets/ | Uygulama varlıkları |
| manifest/ | Her modülün manifestleri |
base modülü AAB'nin zorunlu bir bileşenidir. Ana kodu, kaynakları ve uygulama manifestini içerir. Temel modül olmadan uygulama oluşturulamaz. Diğer tüm modüller isteğe bağlıdır ve Dynamic Delivery aracılığıyla bağlanır.
AAB yapılandırması XML yerine Protocol Buffers (protobuf) kullanır. .pb dosyaları daha derli topludur ve Google'ın sunucu altyapısı tarafından daha hızlı ayrıştırılır. Bundletool aracı, hata ayıklama için protobuf'u okunabilir bir biçime dönüştürür.
Dynamic Delivery, AAB'nin üzerine inşa edildiği anahtar teknolojidir. Kullanıcıya yalnızca cihazına ve diline uygun uygulama bölümlerini teslim etmenin yanı sıra talep üzerine ek modüller yüklemeyi sağlar.
Install-time modülleri kurulum sırasında temel APK ile birlikte yüklenir. Conditional modüller yalnızca koşullar karşılandığında teslim edilir — örneğin, 4K ekranlar için materyaller içeren bir modül. On-demand modüller uygulama içinde kullanıcı talebi üzerine yüklenir.
Büyük kaynaklar (2 GB'a kadar) için OBB dosyaları yerine Play Asset Delivery kullanılır. PAD aynı üç teslim modunu destekler: install-time, fast-follow (kurulumdan hemen sonra) ve on-demand.
// SplitInstallManager ile isteğe bağlı modül yükleme
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Module installed")
}
Her dinamik modül, teslim türü belirtilerek ayrı bir build.gradle dosyasında tanımlanır. Bir modül, temel uygulamadan bağımsız olarak kendi kaynaklarına, koduna ve manifestine sahip olabilir.
AAB oluşturma, Android Gradle Plugin aracılığıyla bundleRelease (veya bundleDebug) göreviyle gerçekleştirilir. Sonuç, build/outputs/bundle/ dizininde bir .aab dosyasıdır.
AAB oluşturmak için özel bir yapılandırma gerekmez — Android Gradle Plugin varsayılan olarak paketleri destekler. Sadece assemble yerine bundle görevini belirtin.
// build.gradle.kts — imzalı AAB derlemesi
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// Görev: ./gradlew bundleRelease
Google, yerel makinede AAB'den APK oluşturmak için bundletool aracını sağlar. `bundletool build-apks --bundle=app.aab --output=app.apks` komutu, farklı cihaz yapılandırmalarında test etmek için bir dizi APK oluşturur.
bundletool ayrıca AAB'yi açabilir, yapılandırmasını görüntüleyebilir ve Google Play Console'a yüklemeden önce imza bütünlüğünü doğrulayabilir. Hata ayıklama için, temel modül manifestini gösteren `bundletool dump manifest --bundle=app.aab` komutu kullanılır.
Varsayılan olarak AAB, kaynakları üç boyuta ayırır: dil, ekran yoğunluğu (density) ve CPU mimarisi (abi). Geliştirici, build.gradle'da herhangi bir bölünmeyi devre dışı bırakabilir — örneğin, uygulama yalnızca İngilizceyi destekliyorsa. Bir bölünmeyi devre dışı bırakmak, tüm varyantlar için kaynakların temel APK'ya dahil edileceği anlamına gelir.
Kaynak optimizasyonu — AAB, PNG'yi kalite kaybı olmadan otomatik olarak WebP'ye dönüştürür, kullanılmayan kaynakları sıkıştırır ve yinelenen dizeleri kaldırır. Bu optimizasyonlar, nihai APK oluşturulurken Google Play tarafında uygulanır. Sonuç olarak, kullanıcı tam arşivden %15–25 daha küçük bir APK alır.
Google Play Console'da AAB yayınlama süreci, yalnızca yüklenen dosyanın biçimi açısından APK'dan farklıdır. Konsol .aab dosyasını kabul eder, yapısını, imzasını ve modül yapılandırmasını kontrol eder, ardından her cihaz türü için APK oluşturur.
AAB yüklenirken, Google Play imza anahtarı yönetimini devralır. Geliştirici bir upload anahtarıyla imzalanmış bir paket yükler ve Google, oluşturulan APK'ları kendi anahtarıyla yeniden imzalar. Bu, anahtar döndürmeyi ve keystore kaybı durumunda erişim kurtarmayı basitleştirir.
Google Play Console, yerleşik bir AAB testi sağlar: belirli bir cihaz için oluşturulan APK'yı indirebilir veya Internal Testing, Closed Alpha ve Open Beta kanalları aracılığıyla dahili test çalıştırabilirsiniz.
AAB'ye geçiş, özellikle çok sayıda dinamik modül veya karmaşık kaynak yapılandırması olan projelerde sorunlara neden olabilir.
Dinamik bir modül, temel modül kaynaklarına yanlış bir adla başvurursa, Google Play doğrulama aşamasında AAB'yi reddeder. Çözüm — derlemeden önce lint kontrolü kullanın ve tüm modülleri yerel olarak bundletool aracılığıyla test edin.
Dile göre bölünme, geçerli yerel ayar için kaynaklar dinamik olarak yükleniyorsa uygulama başlatmayı yavaşlatabilir. Google'ın önerisi, 10'dan az dil varsa bölünmemek veya en popüler olanlar için install-time kullanmaktır.
Bazı SDK'lar (analitik, reklam, haritalar) tam manifest ve kaynaklara erişim gerektirir. Geçişten önce AAB uyumluluğunu kontrol etmek zorunlu bir adımdır. Çoğu büyük SDK (Firebase, Google Ads, Crashlytics) 2022'den beri AAB'yi tam olarak desteklemektedir. Uyumluluk doğrulaması için, sunucu tarafı APK oluşturmayı simüle eden --validate bayrağıyla bundletool kullanılır.
AAB, temel modül manifestinden versionCode'u kullanır. APK'nın aksine AAB, her modül için ayrı bir versionCode'u da destekler — bu, tamamen yeniden kurulum olmadan uygulamanın ayrı ayrı bölümlerinin güncellenmesine olanak tanır. Dynamic Delivery, yüklü modülleri izler ve Google Play üzerinden güncellemeler sırasında yalnızca değiştirilen bileşenleri teslim eder.
Google Play Console, her AAB için ayrıntılı analitik sağlar: kaç APK oluşturulduğu, hangi bölünmelerin talep edildiği, cihaz başına ortalama indirme boyutu. Android Vitals, oluşturulan APK'ların performans metriklerini gösterir. Bu veriler, bölünme yapılandırmasını optimize etmeye ve farklı cihaz kategorileri için indirme boyutunu azaltmaya yardımcı olur.
Sıkça Sorulan Sorular
Hayır, AAB doğrudan kurulum için tasarlanmamıştır. Google Play onu belirli bir cihaz için APK'ya dönüştürür. Telefonda test etmek için, yerel olarak AAB'den APK oluşturan bundletool kullanılır.
Google Play, yalnızca kullanıcının cihazıyla eşleşen kaynaklarla (bir ekran yoğunluğu, bir CPU mimarisi, bir dil) APK oluşturur. Diğer yapılandırmalar için kaynaklar dahil edilmez, bu da indirme trafiğinde %15–30 tasarruf sağlar.
Hayır, mevcut uygulamalar APK yayınlamaya devam edebilir. AAB gereksinimi yalnızca yeni uygulamalar için geçerlidir. Google, mevcut projelerin AAB'ye güncellenmesini önerir ancak zorunlu tutmaz.
Derleme görevini assembleRelease'dan bundleRelease'a değiştirin, tüm SDK'ların uyumluluğunu kontrol edin, Google Play Console'da App Signing'i yapılandırın ve ilk AAB'yi mevcut bir kanal üzerinden yükleyin.
Evet, AAB modüllerde yerel kitaplıklar içerir. Google Play, cihazın CPU mimarisi için yalnızca .so dosyalarını teslim eder. Bu, özellikle Unity ve Unreal Engine'de büyük yerel derlemelere sahip oyunlar için önemlidir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun