Format Android App Bundle (AAB) became a mandatory standard for all new applications in Google Play from August 2021, and from November 2026 the requirement extended to updates to existing APKs. This transition raised a lot of questions among developers: why is Google imposing a new format, how does it affect the size of the application, and why do users still download APKs and not AAB?

In practice AAB this is not just a replacement for APK, but a fundamentally different approach to app distribution. Instead of downloading a universal package with code for all devices, the user receives an optimized build for their specific device. This reduces the download size by up to 35% for new applications (according to Google), speeds up installation and reduces the load on servers. But how does it work technically and what does a developer need to do to switch to AAB? Let's take it step by step.

What is an Android App Bundle and how does it differ from APK

File Android App Bundle (.aab) is a published application format that contains all resources and code, but is not ready for installation. Unlike APK (universal package for all devices), AAB is transferred to Google Play Console, where the server automatically generates optimized split-APK for each user device.

Key differences:

  • ๐Ÿ“ฆ APK โ€”a ready-to-install file containing code for all architectures (armeabi-v7a, arm64-v8a, x86), all languages and screen resolutions. It weighs more because it includes data unnecessary for a specific device.
  • ๐Ÿ”ง AAB โ€” "source" for Google Play, which is disassembled into parts (split-APK) and assembled for a specific device. The user downloads only what his smartphone needs.
  • ๐Ÿ“ฑ Split-APK โ€”the final files that are installed on the device. Can be divided into base.apk (main code), config.arm64_v8a.apk (architecture), config.ru.apk (language), etc.

Example: if your application supports 10 languages and 3 processor architectures, then:

  • ๐Ÿ“Œ APK will weigh ~150 MB (all together).
  • ๐Ÿ“Œ AAB after optimization for a device in arm64 with the Russian language - ~50 MB.
โš ๏ธ Attention: From August 2026 Google Play blocks downloading new APKs for applications that have not yet been published. Updates to existing APKs are allowed to be downloaded until November 2026, but then this method will be completely disabled.

How Dynamic Delivery works in AAB

One โ€‹โ€‹of the key advantages Android App Bundle is dynamic delivery (Dynamic Feature Delivery). This is a mechanism that allows you to download only those parts of the application that the user needs right now, and the rest - upon request or upon first use.

For example, if your application has:

  • ๐ŸŽฎ Game module (weighs 200 MB),
  • ๐Ÿ“Š Analytical module (50 MB),
  • ๐Ÿ›’ Payment module (10 MB),

then during installation the user will receive only the basic functionality, and the remaining features will be loaded:

  • ๐Ÿ”น On request (on-demand) - when the user first opens a section (for example, a game).
  • ๐Ÿ”น Conditional (conditional) - if the condition is met (for example, a user from a certain country).
  • ๐Ÿ”น During installation (install-time) - if the feature is critical (for example, authorization).

This is especially true for games and large applications, where the basic APK can weigh 50 MB, and additional levels or localizations can weigh hundreds of megabytes. The user does not waste traffic on unnecessary data.

๐Ÿ“Š Do you use dynamic delivery in your applications?
Yes, for all modules
Yes, but only for large features
No, but I plan to
No and I donโ€™t plan
I donโ€™t know what it is
Delivery type When loaded Use example Max. module size
Install-time When installing the application Authorization, main UI Unlimited
On-demand When opening the feature for the first time Game levels, rarely used functions 10โ€“150 MB
Conditional When the condition is met (country, device, etc.) Local payment systems, regional features 10โ€“100 MB
Instant For Google Play Instant (launch without installations) Demo versions of games, quick viewing up to 15 MB

Advantages and disadvantages of Android App Bundle

The transition to AAB gives developers and users several key advantages, but there are also nuances that are worth considering.

Advantages:

  • โœ… Smaller download size โ€”users receive only the resources they need.
  • โœ… Quick installation โ€”split-APKs are optimized for a specific device.
  • โœ… Dynamic features โ€”you can add modules without updating the entire application.
  • โœ… Security โ€” Google Play signs the split-APK with its key, which reduces the risk of forgery.
  • โœ… Analytics โ€” in Play Console you can see which features are popular and which can be removed.

Disadvantages and limitations:

  • โŒ Complexity of testing โ€”you canโ€™t just install AAB on the device, you need bundletool or Google Play.
  • โŒ Size restrictions โ€”maximum size of downloaded AABโ€” 150 MB (for games - 1 GB when used Play Asset Delivery).
  • โŒ Not all stores support โ€” Amazon Appstore, Huawei AppGallery and others may require an APK.
  • โŒ Issues with obfuscation โ€” conflicts may arise when generating split-APK with ProGuard or R8.
โš ๏ธ Attention: If your application is distributed not only through Google Play (for example, through your own website or third-party stores), you will have to support both builds: AAB for Play i APK for others. This increases the load on CI/CD.

How to create and download Android App Bundle: step-by-step guide

Go on AAB requires changes in the project settings. Here is a step-by-step algorithm for Android Studio:

  1. Update Android Studio to the latest version (not lower Arctic Fox 2020.3.1) and the plugin com.android.tools.build:gradle to 7.0.0+.

  2. In file build.gradle (module app) add:

    android {
    

    bundle {

    language {

    enableSplit = true

    }

    density {

    enableSplit = true

    }

    abi {

    enableSplit = true

    }

    }

    }

  3. Collect the bundle with the command:

    ./gradlew bundleRelease

    The file will appear in app/build/outputs/bundle/release/app-release.aab.

  4. Download .aab to Google Play Console (section Production โ†’ App bundles).

Update Android Studio and Gradle|Configure split by languages/architectures|Assemble the bundle using the bundleRelease command|Check the size in the Play Console|Upload to Production-->

If you need to test AAB locally (without uploading to Play Console), use bundletool:

  1. Download bundletool from GitHub.

  2. Generate APK for your device:

    java -jar bundletool-all.jar build-apks --bundle=app.aab --output=app.apks
  3. Install via adb:

    java -jar bundletool-all.jar install-apks --apks=app.apks

Frequent errors when working with AAB and how to fix them

Even experienced developers encounter problems when switching to Android App Bundle. Here are the most common errors and their solutions:

1. Error "Missing signing config for release build"

๐Ÿ”น Cause: Not configured signingConfig for assembly release.

๐Ÿ”น Solution: Add to build.gradle:

android {

signingConfigs {

release {

storeFile file('keystore.jks')

storePassword 'password'

keyAlias 'alias'

keyPassword 'password'

}

}

buildTypes {

release {

signingConfig signingConfigs.release

}

}

}

2. Size limit exceeded (150 MB)

๐Ÿ”น Cause: In AAB unoptimized resources are included (for example, uncompressed textures or video).

๐Ÿ”น Solution:

  • ๐Ÿ–ผ๏ธ Compress images using webp or TinyPNG.
  • ๐ŸŽต For sound use .ogg instead of .mp3.
  • ๐Ÿ“ฆ Transfer heavy data to Play Asset Delivery (for games).

3. Dynamic features do not work after installation

๐Ÿ”น Cause: The dependency in AndroidManifest.xml.

๐Ÿ”น Solution: Check that the module is declared as dist:onDemand="true":

<manifest xmlns:android="..." xmlns:dist="http://schemas.android.com/apk/distribution">

<dist:module

dist:instant="false"

dist:onDemand="true"

dist:title="@string/feature_title"/>

</manifest>

๐Ÿ’ก

If after loading AAB in Play Console you see a warning about large sizes, use the report Download Size Report in the App Bundle Explorersection. It will show you which resources are taking up the most space.

How to update an existing app from APK to AAB

If your app is already published as an APK, migrating to Google Play as APK, go to AAB requires caution to avoid losing users. Here is the migration algorithm:

  1. Create a backup copy of the current APK (in case of rollback).

  2. Update the application version to build.gradle:

    defaultConfig {
    

    versionCode 2

    versionName "1.1"

    }

  3. Collect AAB and upload to Play Console as a new update.

  4. Test in a closed group (use Internal Testing or Closed Track).

  5. Submit for review and wait for approval (may take up to 3 days).

Important: Google Play automatically transfers all user data (ratings, reviews, installations) when changing format However:

  • ๐Ÿ”„ VersionCode must be higher than the latest APK.
  • ๐Ÿ” Signature must match (use the same keystore).
  • ๐Ÿ“ฑ Package name cannot be changed.
โš ๏ธ Attention: If your application uses Native Code (for example, .so-libraries), make sure that AAB includes all the necessary architectures (arm64-v8a, armeabi-v7a etc.). Otherwise, on some devices the application will crash with an error unsatisfied link error.

Android App Bundle Alternatives: when to use APK

Although AAB has become the standard for Google Playthere are cases when APK remains the only option:

1. Distribution outside Google Play

If you distribute the application through:

  • ๐ŸŒ Your own website
  • ๐Ÿช Amazon Appstore,
  • ๐Ÿ“ฑ Huawei AppGallery,
  • ๐Ÿค– APKMirror or other platforms

you will need universal APK (universalApk). It can be generated from AAB using bundletool:

java -jar bundletool-all.jar build-apks --bundle=app.aab --output=app.apks --mode=universal

2. Applications for corporate use

If you are developing enterprise solutions for internal use (for example, for company employees), then:

  • ๐Ÿ”’ AAB not suitableas they require loading into Google Play.
  • ๐Ÿ”‘ APK is easier to distribute via MDM systems (for example, Intune or MobileIron).

3. Applications with modular architecture (without Dynamic Delivery)

If your application already uses modules (for example, via :feature1, :feature2 in Gradle), but you do not want to switch to Dynamic Feature Modules, then:

  • ๐Ÿ› ๏ธ Itโ€™s easier to assemble multi-flavor APK with the necessary combinations.
  • โšก AAB will not give any benefitif you do not use split by architecture/language.
๐Ÿ’ก

If your application is distributed only through Google Play and does not have specific requirements (for example, enterprise software), switching to AAB is mandatory and beneficial. In other cases, you will have to support both assemblies: AAB for Play and APK for other channels.

FAQ: Answers to frequently asked questions about the Android App. Bundle

โ“ Is it possible to install AAB directly on an Android device?

No, AAB it is not an executable file. To install you need:

  1. Generate split-APK or universal APK via bundletool.
  2. Install via adb install-multiple (for split-APK) or adb install (for universal APK).

Or upload AAB to Google Play Console and download the application from there.

โ“ Why does my AAB weigh more than the final APK?

File .aab contains all possible resources (for all architectures, languages, screen resolutions), while the final split-APK includes only what a specific device needs. For example:

  • ๐Ÿ“Œ AAB: 200 MB (all languages + all architectures).
  • ๐Ÿ“Œ Split-APK for arm64 + Russian: 60 MB.

This is normal - Google Play optimizes the size during generation.

โ“ How to test dynamic features (Dynamic Features) before publishing?

Use internal app sharing in Google Play Console:

  1. Download AAB to the section Internal Testing.
  2. Download the test link and install it on the device.
  3. Check the loading of features via SplitInstallManager:
SplitInstallManager splitInstallManager = SplitInstallManagerFactory.create(context);

splitInstallManager.startInstall(

SplitInstallRequest.newBuilder()

.addModule("dynamic_feature")

.build()

);

โ“ What to do if users complain about errors after switching to AAB?

The most common problems:

  1. No architecture support โ†’ Add ndk.abiFilters to build.gradle.
  2. Dynamic files are not loaded modules โ†’ Check your Internet connection and SplitInstallManager.
  3. The application crashes on older devices โ†’ Make sure that minSdkVersion is not lower than 21 (AAB requires Android 5.0+).

For diagnostics, use Android Vitals v Play Console.

โ“ Is it possible to return an APK after switching to AAB?

Technically yes, but:

  • ๐Ÿ”„ The new APK must have versionCode higherthan the last AAB.
  • โš ๏ธ Google Play can block an update if it considers it a โ€œdowngrade.โ€
  • ๐Ÿ“‰ Users who installed AAB will not receive an automatic update to the APK (they will have to delete and install again).

It is recommended to stay on AAB unless there are critical reasons to return.