Format Android App Bundle

Android App Bundle adalah file (dengan ekstensi file .aab) yang Anda upload ke Google Play.

App bundle adalah biner bertanda tangan yang mengatur kode dan resource aplikasi Anda ke dalam modul, seperti ditunjukkan dalam gambar 1. Kode dan resource untuk setiap modul diatur seperti halnya dalam APK—dan hal tersebut wajar karena setiap modul ini dapat dijadikan sebagai APK terpisah. Kemudian, Google Play menggunakan app bundle untuk membuat berbagai APK yang ditayangkan kepada pengguna, seperti APK dasar, APK fitur, APK konfigurasi, dan multi APK (untuk perangkat yang tidak mendukung APK terpisah). Direktori yang berwarna biru—seperti direktori drawable/, values/, dan lib/—merepresentasikan kode dan resource yang digunakan Google Play untuk membuat APK konfigurasi untuk setiap modul.

App bundle mengatur aplikasi Anda ke dalam direktori yang masing-masing merepresentasikan sebuah
            modul. Dalam setiap direktori modul, kode dan resource diatur
        seperti halnya APK biasa.

Gambar 1. Konten Android App Bundle dengan satu modul dasar, dua modul fitur, dan dua asset pack.

Daftar berikut menjelaskan beberapa file dan direktori app bundle secara lebih mendetail:

  • base/, feature1/, dan feature2/: Masing-masing direktori tingkat atas tersebut merepresentasikan modul yang berbeda dari aplikasi Anda. Modul dasar untuk aplikasi Anda selalu berada di direktori base app bundle. Namun, direktori untuk setiap modul fitur memiliki nama yang ditentukan oleh atribut split dalam manifes modul. Untuk mempelajari lebih lanjut, baca tentang manifes modul fitur.
  • aset_pack_1/ dan aset_pack_2/: Untuk aplikasi atau game yang besar dan membutuhkan grafis, Anda dapat memodulasi aset menjadi asset pack. Asset pack ideal untuk game karena batas ukurannya yang besar. Anda dapat menyesuaikan cara dan waktu setiap asset pack didownload ke perangkat sesuai dengan tiga mode pengiriman: saat penginstalan, fast-follow, dan on demand. Semua asset pack dihosting di dan ditayangkan dari Google Play. Untuk mempelajari lebih lanjut cara menambahkan asset pack ke app bundle, lihat Ringkasan Play Asset Delivery.
  • BUNDLE-METADATA/: Direktori ini mencakup file metadata yang berisi informasi yang berguna untuk alat atau app store. File metadata tersebut dapat mencakup pemetaan ProGuard dan daftar lengkap file DEX aplikasi Anda. File dalam direktori ini tidak dipaketkan ke dalam APK aplikasi Anda.
  • File Module Protocol Buffer (*.pb): File-file ini menyediakan metadata yang membantu menjelaskan konten setiap modul aplikasi ke app store, seperti Google Play. Misalnya, BundleConfig.pb memberikan informasi tentang paket itu sendiri, seperti versi alat build yang digunakan untuk membuat app bundle, dan native.pb serta resources.pb menjelaskan kode dan resource di setiap modul, yang berguna saat Google Play mengoptimalkan APK untuk konfigurasi perangkat yang berbeda.
  • manifest/: Tidak seperti APK, app bundle menyimpan file AndroidManifest.xml dari setiap modul di direktori yang terpisah ini.
  • dex/: Tidak seperti APK, app bundle menyimpan file DEX untuk setiap modul di direktori yang terpisah ini.
  • res/, lib/, dan assets/: Direktori ini identik dengan direktori pada APK biasa. Saat Anda mengupload app bundle, Google Play memeriksa direktori tersebut dan hanya memaketkan file yang memenuhi konfigurasi perangkat target, sembari mempertahankan jalur file.
  • root/: Direktori ini menyimpan file yang nantinya dipindahkan ke root APK yang mencakup modul tempat direktori ini berada. Misalnya, direktori base/root/ app bundle dapat mencakup resource berbasis Java yang dimuat aplikasi Anda menggunakan Class.getResource(). Kemudian, file tersebut dipindahkan ke direktori utama APK dasar aplikasi Anda dan semua multi-APK yang dibuat Google Play. Jalur dalam direktori ini juga dipertahankan. Artinya, direktori (beserta subdirektorinya) juga dipindahkan ke root APK.

Ringkasan APK terpisah

Komponen dasar penayangan aplikasi yang dioptimalkan adalah mekanisme APK terpisah yang tersedia di Android 5.0 (API level 21) dan yang lebih tinggi. APK Terpisah sangat mirip dengan APK reguler. APK tersebut mencakup bytecode DEX yang dikompilasi, resource, dan manifes Android. Namun, platform Android dapat mengelola beberapa APK terpisah yang terinstal sebagai aplikasi tunggal. Artinya, Anda dapat menginstal beberapa APK terpisah yang memiliki akses ke resource dan kode umum, dan muncul sebagai satu aplikasi yang diinstal pada perangkat.

Manfaat APK terpisah adalah kemampuannya untuk memecah APK monolitik, yaitu APK yang menyertakan kode dan resource untuk semua konfigurasi perangkat dan fitur yang didukung aplikasi Anda, ke dalam paket terpisah lebih kecil yang diinstal di perangkat pengguna jika diperlukan.

Misalnya, satu APK terpisah dapat menyertakan kode dan resource untuk fitur tambahan yang hanya dibutuhkan beberapa pengguna, sedangkan APK terpisah lainnya mencakup resource hanya untuk bahasa atau kepadatan layar tertentu. Setiap APK terpisah tersebut didownload dan diinstal jika pengguna memintanya atau jika diperlukan oleh perangkat.

Berikut ini menjelaskan berbagai jenis APK yang dapat diinstal bersama pada perangkat untuk membentuk pengalaman aplikasi secara menyeluruh. Anda akan mempelajari cara mengonfigurasi project aplikasi untuk mendukung APK ini di bagian selanjutnya pada halaman ini.

  • APK Dasar: APK ini berisi kode dan resource yang dapat diakses oleh semua APK terpisah lainnya dan menyediakan fungsi dasar untuk aplikasi Anda. Jika pengguna meminta untuk mendownload aplikasi Anda, APK ini akan didownload dan diinstal terlebih dahulu. Hal ini terjadi karena hanya manifes APK dasar yang berisi deklarasi lengkap tentang layanan aplikasi Anda, penyedia konten, izin, persyaratan versi platform, dan dependensi pada fitur sistem. Google Play menghasilkan APK dasar untuk aplikasi Anda dari modul aplikasi (atau modul dasar) project Anda. Jika ingin mengurangi ukuran download awal aplikasi Anda, penting untuk diingat bahwa semua kode dan resource yang disertakan dalam modul ini disertakan dalam APK dasar aplikasi Anda.
  • APK Konfigurasi: Setiap APK ini berisi resource dan library native untuk kepadatan layar, arsitektur CPU, atau bahasa tertentu. Saat pengguna mendownload aplikasi Anda, perangkat mereka akan mendownload dan menginstal APK konfigurasi yang hanya menargetkan perangkatnya. Setiap APK konfigurasi bergantung pada APK dasar atau APK modul fitur. Artinya, APK tersebut didownload dan diinstal bersama dengan APK yang mereka beri kode dan resource. Berbeda dengan modul dasar dan modul fitur, Anda tidak membuat modul terpisah untuk APK konfigurasi. Jika menggunakan praktik standar untuk mengatur resource alternatif dengan konfigurasi khusus untuk modul dasar dan fitur, Google Play secara otomatis membuat APK konfigurasi untuk Anda.
  • APK modul fitur: Setiap APK ini berisi kode dan resource untuk fitur aplikasi yang Anda memodularkan menggunakan modul fitur. Kemudian, Anda dapat menyesuaikan cara dan waktu fitur tersebut didownload ke perangkat. Misalnya, menggunakan Play Core Library, fitur dapat diinstal on demand setelah APK dasar terinstal di perangkat untuk memberikan fungsi tambahan kepada pengguna. Pertimbangkan aplikasi chat yang mendownload dan menginstal kemampuan untuk menangkap dan mengirim foto hanya ketika pengguna meminta untuk menggunakan fungsi tersebut. Karena modul fitur mungkin tidak tersedia sewaktu penginstalan, sebaiknya sertakan kode dan resource umum dalam APK dasar. Artinya, modul fitur Anda hanya akan memuat kode dan resource untuk APK dasar yang tersedia sewaktu penginstalan. Google Play membuat APK modul fitur untuk aplikasi Anda dari modul fitur project.

Pertimbangkan aplikasi dengan tiga modul fitur dan dukungan untuk beberapa konfigurasi perangkat. Gambar 1 di bawah ini menggambarkan seperti apa hierarki dependensi untuk berbagai APK aplikasi. Perhatikan bahwa APK dasar membentuk puncak hierarki, dan semua APK lainnya bergantung pada APK dasar. (Jika Anda ingin mengetahui bagaimana modul APK ini direpresentasikan dalam Android App Bundle, baca Format Android App Bundle.)

APK dasar berada di bagian atas hierarki dengan APK modul fitur yang memiliki dependensi padanya. APK Konfigurasi, yang menyertakan kode khusus konfigurasi perangkat dan resource untuk setiap APK modul fitur dan dasar, membentuk simpul daun dari hierarki dependensi.

Gambar 1. Hierarki dependensi untuk aplikasi yang disajikan menggunakan APK terpisah

Perlu diingat, Anda tidak perlu mem-build APK ini sendiri. Google Play yang akan melakukannya untuk Anda menggunakan app bundle tunggal yang ditandatangani dan Anda build dengan Android Studio. Untuk mengetahui selengkapnya tentang format app bundle dan cara mem-build-nya, buka Mem-build, men-deploy, dan mengupload Android App Bundle.

Perangkat yang menjalankan Android 4.4 (API level 19) dan lebih rendah

Karena perangkat yang menjalankan Android 4.4 (API level 19) dan yang lebih rendah tidak mendukung download dan penginstalan APK terpisah, Google Play menyediakan APK tunggal, yang disebut multi-APK, yang dioptimalkan untuk konfigurasi perangkat. Artinya, multi-APK mewakili pengalaman aplikasi lengkap Anda, tetapi tidak menyertakan kode dan resource yang tidak perlu, misalnya untuk kepadatan layar lainnya dan arsitektur CPU.

Namun, APK tersebut menyertakan resource untuk semua bahasa yang didukung aplikasi Anda. Hal ini memungkinkan pengguna untuk, misalnya, mengubah setelan bahasa pilihan aplikasi Anda tanpa harus mendownload multi-APK lain.

Multi-APK tidak memiliki kemampuan untuk mendownload modul fitur on demand nantinya. Untuk menyertakan modul fitur dalam APK ini, Anda harus menonaktifkan On-demand atau mengaktifkan Fusing saat membuat modul fitur.

Perlu diingat, dengan app bundle, Anda tidak perlu membuat, menandatangani, mengupload, dan mengelola APK untuk setiap konfigurasi perangkat yang didukung aplikasi Anda. Anda tetap membuat dan mengupload hanya satu app bundle untuk seluruh aplikasi, dan Google Play yang akan menangani sisanya. Jadi, terlepas dari apakah Anda berencana mendukung perangkat yang menjalankan Android 4.4 atau yang lebih lama, Google Play menyediakan mekanisme penayangan yang fleksibel bagi Anda dan pengguna.

Perubahan bahasa pengguna

Dengan app bundle, perangkat hanya mendownload kode dan resource yang diperlukan untuk menjalankan aplikasi Anda. Jadi, untuk resource bahasa, perangkat pengguna hanya mendownload resource bahasa aplikasi Anda yang cocok dengan satu atau beberapa bahasa yang saat ini dipilih di setelan perangkat.

Jika pengguna mengganti bahasa di setelan perangkat, Google Play mungkin perlu mendownload dan menginstal beberapa APK terpisah tambahan sebelum aplikasi dapat ditampilkan dalam bahasa baru.

Google Play mencoba mendownload bahasa tambahan segera setelah bahasa diganti. Jika perangkat pengguna sedang offline, download akan gagal, atau jika resource terlalu besar, Google Play akan mencoba mendownload lagi di latar belakang saat kondisi perangkat lebih memungkinkan. Saat berjalan di perangkat dengan Android 9.0 (API level 28) atau yang lebih rendah, jika aplikasi Anda berada di latar depan selama penginstalan APK terpisah bahasa baru, aplikasi akan dihentikan.

Jika aplikasi Anda mengharuskan semua bahasa tersedia di perangkat kapan saja, Anda dapat menonaktifkan pemisahan bahasa di konfigurasi build.

Jika aplikasi Anda mengharuskan download bahasa tambahan secara terpisah dari bahasa pengguna yang dipilih di setelan perangkat—misalnya untuk mengimplementasikan alat pilih bahasa dalam aplikasi—Anda dapat menggunakan library Play Core untuk mendownloadnya sesuai permintaan.