Android App Bundle biçimi

Android App Bundle, Google Play'e yüklediğiniz bir dosyadır (.aab dosya uzantısına sahip).

Uygulama paketleri, Şekil 1'de gösterildiği gibi uygulamanızın kodunu ve kaynaklarını modüller halinde düzenleyen imzalı ikili programlardır. Her modülün kodu ve kaynakları, APK'larda bulacağınıza benzer şekilde düzenlenmiştir. Bu mantıklıdır, çünkü bu modüllerin her biri ayrı APK'lar olarak oluşturulabilir. Google Play daha sonra uygulama paketini kullanarak kullanıcılara sunulan temel APK, özellik APK'ları, yapılandırma APK'ları ve (bölünmüş APK'ları desteklemeyen cihazlar için) çoklu APK'lar gibi çeşitli APK'ları oluşturur. Mavi renkli dizinler (ör. drawable/, values/ ve lib/ dizinleri) Google Play'in her modül için yapılandırma APK'ları oluşturmak amacıyla kullandığı kodu ve kaynakları temsil eder.

Uygulama paketleri, uygulamanızı her biri birer modülü temsil eden dizinler halinde düzenler. Her modül dizininde, kod ve kaynaklar tipik bir APK'nınkine benzer şekilde düzenlenmiştir.

Şekil 1. Bir temel modül, iki özellik modülü ve iki öğe paketi içeren bir Android App Bundle'ın içeriği.

Aşağıdaki listede, uygulama paketinin dosya ve dizinlerinden bazıları daha ayrıntılı olarak açıklanmaktadır:

  • base/, özellik1/ ve özellik2/: Bu üst düzey dizinlerin her biri, uygulamanızın farklı bir modülünü temsil eder. Uygulamanızın temel modülü her zaman uygulama paketinin bir base dizininde bulunur. Bununla birlikte, her özellik modülünün dizinine modüldeki split özelliği tarafından belirtilen ad verilir. Daha fazla bilgi için özellik modülü manifesti hakkında bilgi edinin.
  • asset_pack_1/ ve asset_pack_2/: Grafik açısından yüksek talep gören büyük uygulamalar veya oyunlar için öğeleri öğe paketleri halinde modüler hale getirebilirsiniz. Öğe paketleri, büyük boyut sınırlamaları nedeniyle oyunlar için idealdir. Her öğe paketinin bir cihaza nasıl ve ne zaman indirileceğini üç iletim moduna göre özelleştirebilirsiniz: yükleme zamanı, hızlı takip ve isteğe bağlı. Tüm öğe paketleri Google Play'de barındırılır ve sunulur. Uygulama paketinize öğe paketi ekleme hakkında daha fazla bilgi edinmek için Play Asset Delivery'ye genel bakış makalesini inceleyebilirsiniz.
  • BUNDLE-METADATA/: Bu dizin, araçlar veya uygulama mağazaları için yararlı bilgiler içeren meta veri dosyalarını içerir. Bu tür meta veri dosyaları, ProGuard eşlemelerini ve uygulamanızın DEX dosyalarının tam listesini içerebilir. Bu dizindeki dosyalar uygulamanızın APK'ları olarak paketlenmez.
  • Modül Protokolü Arabelleği (*.pb) dosyaları: Bu dosyalar, her bir uygulama modülünün içeriğini Google Play gibi uygulama mağazalarına açıklamaya yardımcı olan meta veriler sağlar. Örneğin, BundleConfig.pb, uygulama paketini oluşturmak için derleme araçlarının hangi sürümünün kullanıldığı gibi paketin kendisiyle ilgili bilgiler sağlar ve native.pb ve resources.pb, her bir modüldeki kod ve kaynakları açıklar. Bu, Google Play'in APK'ları farklı cihaz yapılandırmaları için optimize etmesi açısından faydalıdır.
  • manifest/: APK'ların aksine uygulama paketleri, her modülün AndroidManifest.xml dosyasını bu ayrı dizinde depolar.
  • dex/: APK'ların aksine uygulama paketleri, her modülün DEX dosyalarını bu ayrı dizinde depolar.
  • res/, lib/ ve assets/: Bu dizinler tipik bir APK'daki dizinlerle aynıdır. Uygulama paketinizi yüklediğinizde Google Play, bu dizinleri inceler ve dosya yollarını korurken yalnızca hedef cihaz yapılandırmasını karşılayan dosyaları paketler.
  • root/: Bu dizin, daha sonra bu dizinin içinde bulunduğu modülü içeren herhangi bir APK'nın kök dizinine taşınan dosyaları depolar. Örneğin, bir uygulama paketinin base/root/ dizini, uygulamanızın Class.getResource() kullanarak yüklediği Java tabanlı kaynakları içerebilir. Bu dosyalar daha sonra uygulamanızın temel APK'sının ve Google Play'in oluşturduğu her çoklu APK'nın kök dizinine taşınır. Bu dizin içindeki yollar da korunur. Yani, dizinler (ve bunların alt dizinleri) de APK'nın kök dizinine taşınır.

Bölünmüş APK'lara genel bakış

Optimize edilmiş uygulamalar sunmanın temel bir bileşeni, Android 5.0 (API seviyesi 21) ve sonraki sürümlerde bulunan bölünmüş APK mekanizmasıdır. Bölünmüş APK'lar normal APK'lara çok benzerler. Bunlar derlenmiş DEX bayt kodu, kaynaklar ve Android manifestini içerir. Bununla birlikte, Android platformu, yüklenmiş birden fazla bölünmüş APK'yı tek bir uygulama olarak işleyebilir. Yani, ortak kod ve kaynaklara erişimi olan birden fazla bölünmüş APK'yı yükleyebilir ve cihaza tek bir yüklenmiş uygulama olarak görünebilirsiniz.

Bölünmüş APK'ların avantajı, monolitik bir APK'yı, yani uygulamanızın desteklediği tüm özellik ve cihaz yapılandırmaları için kod ve kaynaklar içeren bir APK'yı kullanıcının cihazına gerektiği şekilde yüklenmiş daha küçük, ayrı paketlere bölebilme olanağıdır.

Örneğin, bölünmüş bir APK yalnızca kullanıcılarınızın yalnızca birkaçının ihtiyaç duyduğu ek bir özelliğin kodunu ve kaynaklarını, bir başka bölünmüş APK ise yalnızca belirli bir dil veya ekran yoğunluğuna yönelik kaynaklar içerebilir. Bu bölünmüş APK'ların her biri, kullanıcı istediğinde veya cihaz tarafından zorunlu tutulduğunda indirilip yüklenir.

Aşağıda, eksiksiz uygulama deneyiminizi oluşturmak için bir cihaza birlikte yüklenebilecek farklı APK türleri açıklanmıştır. Bu sayfanın sonraki bölümlerinde, uygulama projenizi bu APK'ları destekleyecek şekilde nasıl yapılandıracağınızı öğreneceksiniz.

  • Temel APK: Bu APK, diğer tüm bölünmüş APK'ların erişebileceği kod ve kaynakları içerir ve uygulamanız için temel işlevleri sağlar. Bir kullanıcı uygulamanızı indirmek istediğinde, önce bu APK indirilir ve yüklenir. Bunun nedeni, uygulamanızın hizmetleri, içerik sağlayıcıları, izinleri, platform sürümü gereksinimleri ve sistem özelliklerine bağımlılıkları ile ilgili tam beyanı yalnızca temel APK'nın manifestinin içermesidir. Google Play, projenizin uygulama (veya temel) modülünden uygulamanız için temel APK'yı oluşturur. Uygulamanızın ilk indirme boyutunu küçültme konusunda endişeniz varsa bu modüldeki tüm kod ve kaynakların, uygulamanızın temel APK'sında bulunduğunu göz önünde bulundurmanız önemlidir.
  • Yapılandırma APK'ları: Bu APK'ların her biri belirli bir ekran yoğunluğu, CPU mimarisi veya dil için yerel kitaplıklar ve kaynaklar içerir. Bir kullanıcı uygulamanızı indirdiğinde, kullanıcının cihazı yalnızca cihazını hedefleyen yapılandırma APK'larını indirir ve yükler. Her yapılandırma APK'sı, temel bir APK veya özellik modülü APK'sının bir bağımlılığıdır. Yani bu uygulamalar, kod ve kaynak sağladıkları APK ile birlikte indirilip yüklenir. Temel modüllerin ve özellik modüllerinin aksine, yapılandırma APK'ları için ayrı bir modül oluşturulmaz. Temel ve özellik modülleriniz için yapılandırmaya özel alternatif kaynaklar düzenlemek amacıyla standart uygulamalar kullanıyorsanız Google Play sizin için otomatik olarak yapılandırma APK'ları oluşturur.
  • Özellik modülü APK'ları: Bu APK'ların her biri, uygulamanızın özellik modüllerini kullanarak modüler hale getirdiğiniz bir özelliğine ait kod ve kaynaklar içerir. Ardından, bu özelliğin bir cihaza nasıl ve ne zaman indirileceğini özelleştirebilirsiniz. Örneğin, Play Core Kitaplığı kullanılarak, temel APK cihaza yüklendikten sonra, kullanıcıya ek işlevler sağlamak için özellikler isteğe bağlı olarak yüklenebilir. Yalnızca kullanıcı bu işlevi kullanmak istediğinde fotoğraf çekip gönderme özelliğini indirip yükleyen bir sohbet uygulaması düşünün. Özellik modülleri yükleme sırasında kullanıma sunulmayabilir. Bu nedenle ortak kod ve kaynakları temel APK'ya eklemeniz gerekir. Yani özellik modülünüz, yükleme sırasında yalnızca temel APK'nın kod ve kaynaklarının mevcut olduğunu varsaymalıdır. Google Play, projenizin özellik modüllerinden uygulamanız için özellik modülü APK'ları oluşturur.

Üç özellik modülü olan ve birden fazla cihaz yapılandırmalarını destekleyen bir uygulama düşünün. Aşağıdaki Şekil 1'de, uygulamanın çeşitli APK'ları için bağımlılık ağacının nasıl görünebileceğini gösterilmektedir. Ağacın başını temel APK'nın oluşturduğunu ve diğer tüm APK'ların temel APK'ya bağlı olduğunu unutmayın. (Bu APK'ların modüllerinin Android App Bundle'da nasıl gösterildiğini merak ediyorsanız Android App Bundle biçimini inceleyin.)

Temel APK, ağacın başında yer alır ve özellik modülü APK'ları kendisine bağımlıdır. Taban ve her özellik modülü APK'sı için cihaz yapılandırmasına özel kod ve kaynaklar içeren yapılandırma APK'ları, bağımlılık ağacının yaprak düğümlerini oluşturur.

Şekil 1. Bölünmüş APK'lar kullanılarak sunulan bir uygulama için bağımlılık ağacı

Bu APK'ları sizin oluşturmanız gerekmediğini unutmayın. Google Play bunu Android Studio ile oluşturduğunuz tek bir imzalı uygulama paketi kullanarak yapar. Uygulama paketi biçimi ve uygulama paketi oluşturma hakkında daha fazla bilgi edinmek için Android App Bundle oluşturma, dağıtma ve yükleme bölümüne gidin.

Android 4.4 (API düzeyi 19) ve önceki sürümleri çalıştıran cihazlar

Android 4.4 (API düzeyi 19) ve önceki sürümleri çalıştıran cihazlar bölünmüş APK'ların indirilmesini ve yüklenmesini desteklemediğinden Google Play, bu cihazlara cihaz yapılandırması için optimize edilmiş çoklu APK adı verilen tek bir APK sunar. Diğer bir deyişle, çoklu APK'lar tam uygulama deneyiminizi temsil eder ancak diğer ekran yoğunlukları ve CPU mimarileri gibi gereksiz kod ve kaynakları içermez.

Ancak bu listeler, uygulamanızın desteklediği tüm diller için kaynaklar içerir. Bu, örneğin, kullanıcıların farklı bir çoklu APK indirmelerine gerek kalmadan uygulamanızın tercih ettiği dil ayarını değiştirmelerine olanak tanır.

Çoklu APK'ların isteğe bağlı olarak daha sonra özellik modüllerini indirme özelliği yoktur. Bu APK'ya bir özellik modülü eklemek için özellik modülünü oluştururken İsteğe bağlı özelliğini devre dışı bırakmanız veya Fusing'i etkinleştirmeniz gerekir.

Uygulama paketleri sayesinde, uygulamanızın desteklediği her cihaz yapılandırması için APK oluşturmanız, imzalamanız, yüklemeniz ve yönetmeniz gerekmediğini unutmayın. Ancak uygulamanızın tamamı için yalnızca tek bir uygulama paketi oluşturup yüklersiniz ve Google Play gerisini sizin için halleder. Bu nedenle, Android 4.4 veya daha önceki sürümleri çalıştıran cihazları desteklemeyi planlasanız da etmeseniz de Google Play hem siz hem de kullanıcılarınız için esnek bir sunum mekanizması sağlar.

Kullanıcı dilindeki değişiklikler

Uygulama paketleri sayesinde cihazlar yalnızca uygulamanızı çalıştırmak için gereken kodu ve kaynakları indirir. Böylece, dil kaynakları için kullanıcının cihazı yalnızca uygulamanızın ayarlarında yalnızca cihaz ayarlarında seçili olan bir veya daha fazla dille eşleşen dil kaynaklarını indirir.

Bir kullanıcı, cihaz ayarlarında dilini değiştirdiğinde, uygulamanın yeni dilde görüntülenebilmesi için Google Play'in ek bölünmüş APK'lar indirip yüklemesi gerekebilir.

Google Play, geçişten hemen sonra ek dilleri indirmeye çalışır. Kullanıcı cihazı çevrimdışıysa, indirme işlemi başarısız olursa veya kaynaklar çok büyükse Google Play, cihaz koşulları daha uygun olduğunda arka planda tekrar indirmeyi dener. Android 9.0 (API düzeyi 28) veya önceki sürümleri çalıştıran bir cihazda çalışırken, yeni dile bölünmüş APK'ların yüklenmesi sırasında uygulamanız ön plandaysa uygulama sonlandırılır.

Uygulamanız her zaman cihazda tüm dillerin kullanılmasını gerektiriyorsa derleme yapılandırmanızda dil bölme özelliğini devre dışı bırakabilirsiniz.

Uygulamanız, cihaz ayarlarında seçilen kullanıcı dillerinden bağımsız olarak ek dillerin indirilmesini gerektiriyorsa (örneğin, uygulama içi dil seçici kullanmak için) Play Core kitaplığını kullanarak bu dilleri indirebilirsiniz.