[ Web Proxy ]
URL:
Viewing: https://developer.android.com/guide/app-bundle/app-bundle-format [Back]  [Original]

The Android App Bundle format  |  Other Play guides  |  Android Developers Skip to main content
Essentials Design & Plan Develop Google Play Blog
Search:
Android Studio
Android Developers [Android Developers]

The Android App Bundle format Stay organized with collections Save and categorize content based on your preferences.

An Android App Bundle is a file (with the .aab file extension) that you upload to Google Play.

App bundles are signed binaries that organize your apps code and resources into modules, as illustrated in figure 1. Code and resources for each module are organized similarly to what you would find in an APKand that makes sense because each of these modules may be generated as separate APKs. Google Play then uses the app bundle to generate the various APKs that are served to users, such as the base APK, feature APKs, configuration APKs, and (for devices that do not support split APKs) multi-APKs. The directories that are colored in bluesuch as the drawable/, values/, and lib/ directoriesrepresent code and resources that Google Play uses to create configuration APKs for each module.

App bundles organize your app into directories that each represent a
        module. Within each module directory, code and resources are organized
        similar to that of a typical APK. [App bundles organize your app into directories that each represent a module. Within each module directory, code and resources are organized similar to that of a typical APK.]

Figure 1. The contents of an Android App Bundle with one base module, two feature modules, and two asset packs.

Note: You build an app bundle for each unique app, or applicationID. That is, if you use product flavors to create multiple versions of your app from a single app project, and each of those versions use a unique applicationID, you need to build a separate app bundle for each version of your app.

The following list describes some of the app bundles files and directories in more detail:

Overview of split APKs

A fundamental component of serving optimized applications is the split APK mechanism available on Android 5.0 (API level 21) and higher. Split APKs are very similar to regular APKsthey include compiled DEX bytecode, resources, and an Android manifest. However, the Android platform is able to treat multiple installed split APKs as a single app. That is, you can install multiple split APKs that have access to common code and resources, and appear as one installed app on the device.

The benefit of split APKs is the ability to break up a monolithic APKthat is, an APK that includes code and resources for all features and device configurations your app supportsinto smaller, discrete packages that are installed on a users device as required.

For example, one split APK may include the code and resources for an additional feature that only a few of your users need, while another split APK includes resources for only a specific language or screen density. Each of these split APKs is downloaded and installed when the user requests it or its required by the device.

The following describes the different types of APKs that may be installed together on a device to form your full app experience. Youll learn how to configure your app project to support these APKs in later sections on this page.

Consider an app with three feature modules and support for multiple device configurations. Figure 1 below illustrates what the dependency tree for the apps various APKs may look like. Note that the base APK forms the head of the tree, and all other APKs depend on the base APK. (If you're curious about how the modules for these APKs are represented in an Android App Bundle, see The Android App Bundle format.)

The base APK is at the head of the tree with feature module APKs having
        a dependency on it. Configuration APKs, which include device
        configuration-specific code and resources for the base and each
        feature module APK, form the leaf nodes of the dependency tree. [The base APK is at the head of the tree with feature module APKs having a dependency on it. Configuration APKs, which include device configuration-specific code and resources for the base and each feature module APK, form the leaf nodes of the dependency tree.]

Figure 1. Dependency tree for an app served using split APKs

Keep in mind, you dont need to build these APKs yourselfGoogle Play does it for you using a single signed app bundle you build with Android Studio. To learn more about the app bundle format and how to build one, go to Build, deploy, and upload Android App Bundles.

Devices running Android 4.4 (API level 19) and lower

Because devices running Android 4.4 (API level 19) and lower dont support downloading and installing split APKs, Google Play instead serves those devices a single APK, called a multi-APK, thats optimized for the device's configuration. That is, multi-APKs represent your full app experience but do not include unnecessary code and resourcessuch as those for other screen densities and CPU architectures.

They do, however, include resources for all languages that your app supports. This allows, for example, users to change your app's preferred language setting without having to download a different multi-APK.

Multi-APKs do not have the ability to later download feature modules on demand. To include a feature module in this APK, you must either disable On-demand or enable Fusing when creating the feature module.

Keep in mind, with app bundles, you don't need to build, sign, upload, and manage APKs for each device configuration your app supports. You still build and upload only a single app bundle for your entire app, and Google Play takes care of the rest for you. So whether or not you plan to support devices running Android 4.4 or lower, Google Play provides a flexible serving mechanism for both you and your users.

User language changes

With app bundles, devices download only the code and resources they require to run your app. So, for language resources, a users device downloads only your apps language resources that match the one or more languages currently selected in the devices settings.

When a user switches their language in the device settings, Google Play may need to download and install some additional split APKs before the app can be displayed in the new language.

Google Play tries to download the additional languages immediately after the switch. If the user device is offline, the download fails, or the resources are too large, Google Play attempts the download again in the background when the device conditions are more favourable. When running on a device with Android 9.0 (API level 28) or lower, if your app is in the foreground during the installation of the new language split APKs, then the app is killed.

If your app requires all languages to be available on the device at any time, you can disable language splitting in your build configuration.

If your app requires downloading additional languages independently from the user languages selected in the device settingsfor instance to implement an in-app language pickeryou can use the Play Core library to download them on demand.

Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Last updated 2026-02-26 UTC.

[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-02-26 UTC."],[],[]]

Web Proxy Viewer  |  New URL  |  Original Page