Android App Bundle (.aab) vs Apk Android Package Delivery

Mustafa Yiğit
HardwareAndro
Published in
3 min readAug 13, 2020

--

android app bundle

Merhaba dostlar, bu yazıda Android ekosisteminde Google I/O 2018'de tanıtılan yeni nesil paket yapısı Android App Bundle (.aab) nedir? avantajları nelerdir? nasıl kullanılır? gibi başlıkları inceleyeceğiz.

Android projelerinde eğer dağıtım için bir paket almak istersek önümüze iki seçenek çıktığını görüyoruz:

  • .apk: Android Application Package
  • .aab: Android App Bundle
android package types

Bu iki dosya arasındaki farklara bakacak olursak:

→ App Bundle dosyaları, apk dosyalarına göre daha küçük boyutlara sahiptir.

→ App Bundle dosyaları kurulum esnasında daha hızlı kurulur. Ve kurulduktan sonra diskte daha az yer kaplar.

→ App Bundle yapısı ile isteğe bağlı dağıtım sunulabilir.

→ Google Play tarafında tercih edilen paket yapısı App Bundle yapısıdır.

Peki App Bundle bu avantajları nasıl sağlıyor? Gelin beraber App Bundle detaylarına inelim.

Android App Bundle

Apk dosyası, projeye ait tüm dosyaları ve kodları bünyesinde barındırır. İmzalı olduğunu belirten bir sertifikası vardır. Eğer .apk uzantılı dosya ile markete dağıtım yapıyorsak bu sertifikanın önemi oldukça kritiktir. Bu sertifika uygulama işlemleri için (örn. güncelleme) saklanmalıdır.
Bir apk dosyası, projenin mevcut kaynaklarını(ses,video,fotoğraf,zorunlu data) tek pakette toplar. Dynamic Featureları ya da Assetleri cihaz grup spesifik olarak barındırmaz.

android app bundle

App Bundle ise, bir uygulamanın derlenmiş kodlarını ve kaynaklarını içeren ve apk oluşturmak - dağıtmak için gereken tüm bilgileri barındıran bir dosya yapısıdır. Yukarıdaki resimden gidecek olursak bir apk dosyası turuncu alan iken; app bundle dosyası resimdeki tüm alanı kapsar. Fakat markette cihaza indirme esnasında sadece gerekli olan assetleri çeker.

Bir başka farka bakacak olursak, App Bundle ile core uygulamada zorunlu olmayan ama isteğe, ihtiyaca göre uygulamaya dahil edilen Dynamic Featureları barındırabiliriz.

App Bundle yapısında farklı farklı dizinler mevcuttur.

Base/ and features/
Bu dizinler core uygulama ve featureları temsil eden modüllerdir.

Asset Packs
Uygulamanın ihtiyaç duyduğu assetleri tanımlayan modüllerdir. Bazı yüksek grafikli uygulamalar ya da oyunlarda bu yapılar modülerleştirilebilir. Bu yapıları üç farklı şekilde cihaza teslim edebiliriz: Install-time, Fast-follow, On-demand. ( Asset Delivery )

BUNDLE-METADATA
Bu dizinde ise, uygulama mağazalarında ihtiyaç duyulan meta veriler barındırılır. Bu dizindeki dosyalar apk içine dahil olmaz.

Manifest/
Her modülün manifest dosyası bu dizinde tutulur.

Dex/
Bu dizinde modüllerin dex dosyaları tutulur.

Res,Lib,Assets
Bu dizin apk dosyasına en çok benzeyen kısımdır. Google Play hedef cihaz yapılandırması yaparken bu dizinleri kontrol eder.

Root/
Bu dizin, oluşturulan apk’nın rootuna taşınacak dosyaları barındırır. Örn. java resources.

Split APk’s

Apk optimizasyonunda en önemli bileşen split apk yapısıdır. API 21 - Android 5.0 ve sonrasında bulunan bu mekanizma,normal bir apk dosyasının küçük parçalı halidir. Her split apk bir uygulama olabilir. Yukarıda bahsedilen cihaz spesifik kurulum bu parçalanmış apk dosyaları ile gerçekleşir. Sadece cihaz grubuna özel dosyaları bünyesinde barındırdığı için kullanıcı daha küçük bir indirme boyutu ile karşılaşır. Bir parçalanmış apk core appi sağlarken; başka bir parçalanmış apk belirli ekranlara ya da belirli dile özgü kaynakları saklar.

split apks

Tam uygulama deneyimi için tavsiye edilen apk yapısı üçe ayrılır:

  • Base Apk: Core uygulamanın ve diğer apkların erişebileceği kod ve kaynakları barındırır.
  • Configuration APKs: Google Play tarafından oluşturulan, ekran, dil, cpu farklılıklarına özgü konfigürasyonları barındırır.
  • Feature module APKs: Core uygulamaya ek özellik ya da ihtiyaç üzerine gerekli olan yapıları barındırır.

Bu apk dosyalarını Google Play bizim için oluşturuyor. Tabiki de imzalı bir App Bundle ile.

Bu yazıda anlattıklarım umarı faydalı olmuştur. Her türlü feedbacke açığım. Görüşmek üzere :)

Kaynaklar:

https://developer.android.com/guide/app-bundle

https://medium.com/better-programming/android-app-bundles-vs-apks-8b0306b38436

--

--