Recent from talks
Contribute something
Nothing was collected or created yet.
Android App Bundle
View on Wikipedia| Android App Bundle | |
|---|---|
| Filename extension | .aab |
| Type of format | Package format |
| Container for | Android |
| Open format? | yes |
| Website | developer |
Android App Bundle is the Android application publishing file format. The App Bundle must include the application's compiled code and resources, which allows for the signing and generation of APK files to be deferred to the app store, reducing the initial download size of the app.[1] The file extension used for this format is ".aab".[2]
Google Play requires Android App Bundles for all new apps since August 2021 and for all updates to preexisting apps since November 2021.[3][4] Since May 2023, Android TV requires AABs.[5]
Split APKs
[edit]Without Android App Bundles, an APK can support multiple languages, up to four different CPU architectures, and several display resolutions.[6] This meant that each installation file could contain potentially large amounts of bloat irrelevant for a device's specific combination of CPU, locale, and screen size.[6]
Split APKs, which are generated by an app store like Google Play, contain only the code and resources that are needed for the specific device downloading the app.[7] If the user changes their device language or feature set, the app store can then deliver additional split APKs on demand to meet the changed requirements.[8]
Android App Bundles are required for using "play as you download" feature of Google Play, which lets users download and install a portion of the game to start playing and then download the rest while the user is occupied by the first level.[9]
See also
[edit]References
[edit]- ^ "About Android App Bundles". Android Developers. Archived from the original on 2021-08-09. Retrieved 2021-08-15.
- ^ "bundletool". Android Developers. Archived from the original on 2023-03-15. Retrieved 2021-10-19.
- ^ Peters, Jay (2021-06-30). "Google is moving away from APKs on the Play Store". The Verge. Archived from the original on 2021-08-04. Retrieved 2021-08-15.
- ^ "New Android App Bundle and target API level requirements in 2021". Android Developers Blog. Archived from the original on 2023-03-14. Retrieved 2022-11-22.
- ^ Amadeo, Ron (2022-11-22). "Android TV will require App Bundles in 2023, should reduce app size by 20%". Ars Technica. Archived from the original on 2022-12-09. Retrieved 2022-11-22.
- ^ a b Amadeo, Ron (2021-07-01). "Google Play dumps APKs for the more Google-controlled "Android App Bundle"". Ars Technica. Archived from the original on 2021-08-12. Retrieved 2021-08-15.
- ^ Tim Anderson. "Android devs prepare to hand over app-signing keys to Google from August". www.theregister.com. Archived from the original on 2021-07-24. Retrieved 2021-08-15.
- ^ Elliott, Dom (2020-11-23). "A new publishing format for the future of Android". Medium. Archived from the original on 2021-07-16. Retrieved 2021-08-15.
- ^ Amadeo, Ron (2021-11-15). "Android 12: The Ars Technica Review". Ars Technica. Archived from the original on 2021-11-21. Retrieved 2021-11-21.
External links
[edit]Android App Bundle
View on GrokipediaOverview
Definition and Purpose
The Android App Bundle (AAB) is a publishing format that includes all of an app's compiled code and resources, deferring APK generation and signing to Google Play.[2] This approach allows Google Play to build and deliver APKs optimized for each user's specific device configuration, such as screen size, CPU architecture, and language preferences.[2] The primary purpose of the AAB is to enable dynamic and personalized app delivery, ensuring that users download only the code and resources necessary for their device.[2] By tailoring APKs on the server side, it significantly reduces initial download sizes compared to universal APKs and enhances installation speed, addressing inefficiencies in traditional APK distribution across Android's varied ecosystem.[2] Launched by Google in 2018, the AAB format emerged as a solution to optimize app publishing for the diverse hardware landscape of Android devices, minimizing unnecessary assets and improving overall user experience.[1][2]Core Components
The Android App Bundle (AAB) is structured around several core components that enable modular app construction, allowing developers to package code and resources in a way that supports optimized delivery tailored to device configurations. These components include the base module, configuration-specific modules, asset packs, and integrated signing and metadata, each contributing to the bundle's ability to reduce app size and improve delivery efficiency.[3] The base module serves as the foundational element of an AAB, containing the core app functionality, the full Android manifest file, and essential resources that are shared across all device configurations. It includes compiled code such as DEX files, the base APK's resources like layouts and drawables, and declarations for services, permissions, and activities that apply universally. This module ensures that every installation receives the minimal set of assets necessary for basic operation, regardless of the user's device specifics.[3] Configuration-specific modules extend the base by providing splits for device variations, including language locales, screen density, Application Binary Interfaces (ABIs) for CPU architectures, and texture compression formats. For instance, language modules contain localized strings and assets for specific regions, while ABI splits deliver native libraries optimized for architectures like ARM64 or x86. Screen density and texture compression modules handle varying display resolutions and graphics formats, such as ETC2 or ASTC, ensuring that only relevant resources are downloaded and installed. These modules promote targeted delivery, minimizing the initial download size by excluding unnecessary variants.[3][4] Asset packs represent a separate category of components designed for large, non-essential assets such as graphics, media files, or game levels, which are delivered on-demand through Play Asset Delivery. Unlike core code modules, asset packs contain no executable content and are hosted on Google Play's servers, supporting delivery modes like install-time (bundled with the app), fast-follow (post-install download), or on-demand (runtime fetching). This separation allows apps, particularly graphically intensive ones like games exceeding 200 MB, to keep the base installation lightweight while enabling dynamic asset loading.[5][6] Signing and metadata are integrated at the bundle level to facilitate secure processing by Google Play. The AAB is signed with an upload key by the developer, which Google Play verifies before applying an app signing key for distribution, enhancing security through key separation and enabling features like key rotation. Metadata in the BUNDLE-METADATA directory includes optimization details such as ProGuard mappings and DEX file lists, which are used by Google Play for processing but excluded from final APKs. This structure ensures integrity and provides tools for app store optimization without bloating the delivered packages.[3][7]History
Introduction and Development
The Android App Bundle (AAB) was developed by Google as a response to the limitations of traditional Android Package Kit (APK) files, particularly the issue of large universal APKs that bundled unnecessary code and resources for specific devices, leading to bloated downloads and inefficient storage usage. Announced at Google I/O 2018, the format aimed to leverage dynamic delivery mechanisms to optimize app distribution across Android's diverse ecosystem.[8][9] This development was motivated by the growing complexity of Android hardware, including varying processor architectures (such as ARM and x86), screen sizes, and densities, as well as the steady increase in average app sizes, which had exceeded 15 MB by 2018 and often included irrelevant assets for individual users. By building on earlier concepts like dynamic feature modules introduced alongside the announcement, AAB enabled Google Play to generate device-specific APKs on the server side, reducing download sizes by up to 15% on average without requiring developers to manage multiple APK variants manually.[1][9][8] Launched in 2018 as an optional publishing format for Google Play, AAB integration began with the Android Studio 3.2 canary release in May 2018, allowing developers to build and test bundles during the preview phase. The stable version of Android Studio 3.2, released on September 24, 2018, provided full production support, marking the format's early evolution toward broader adoption while remaining voluntary for app uploads.[1][10][11]Adoption Milestones
The adoption of Android App Bundles (AAB) accelerated following its initial launch, driven by policy mandates from Google Play and growing developer support. In August 2021, Google Play began requiring all new apps to be published using the AAB format, replacing traditional APKs to enable optimized, device-specific deliveries and reduce app sizes.[12] This policy shift marked a pivotal enforcement point, ensuring that subsequent app releases on the platform would leverage AAB's modular architecture for better performance and user experience. Subsequent expansions of the mandate further solidified AAB's role in the ecosystem. By November 2021, while the core AAB requirement remained focused on new apps, related updates emphasized compatibility with Android 11 (API level 30), indirectly promoting AAB migration for broader optimization.[13] In June 2023, the requirement extended to TV apps, with Google Play ceasing support for APK-based updates; all new and existing TV app updates must now use AAB to facilitate efficient storage and delivery on devices like Google TV and Android TV.[12] Growth metrics highlight AAB's rapid uptake. By August 2020, over 600,000 apps and games had already been published using AAB on Google Play, accounting for more than 40% of all releases and demonstrating early enthusiasm among developers for its efficiency gains.[14] As of 2025, AAB has become the de facto standard publishing format on Google Play, with near-universal adoption for new apps and significant migration among existing ones, reflecting its integration into core development workflows.[2] Ecosystem integration has further propelled adoption through tool enhancements and multi-platform support. Android Studio has provided native AAB building capabilities since version 3.2 in 2018, with ongoing updates streamlining bundle configuration and testing.[2] Third-party tools, including Unity and Xamarin, added AAB export options by 2019-2020, enabling cross-framework compatibility. Beyond Google Play, app stores like the Amazon Appstore began supporting AAB submissions around 2021, allowing developers to generate optimized APKs from bundles for distribution on Fire OS devices.[15] This broader tooling and store compatibility has minimized barriers to adoption, positioning AAB as a cornerstone of modern Android app publishing.Technical Architecture
Bundle Structure
The Android App Bundle (AAB) is a signed binary file in ZIP archive format that organizes an app's code and resources into distinct modules for optimized delivery.[3] This structure allows developers to package the entire app, including compiled code, resources, and assets, without generating device-specific APKs during the build process.[3] At its core, the AAB contains aBUNDLETOOL_VERSION entry and a BundleConfig.pb file, which encodes metadata such as the bundletool version used for building, compression settings, and module configurations in Protocol Buffer format.[3] The bundle is divided into modules, primarily a base module in the base/ directory and optional split modules (such as feature or dynamic-delivery modules) in named directories like feature1/ or dynamic1/.[3] Each module includes essential files: an AndroidManifest.xml in a manifest/ subdirectory declaring the module's components and permissions; a resources.arsc file in the res/ directory serving as the compiled resource table; DEX files in a dex/ directory for executable code; resources in res/ subdirectories (e.g., drawable/, values/); native libraries in lib/; and raw assets in assets/.[3]
Additional metadata supports advanced optimizations, such as assets.json in the BUNDLE-METADATA/ directory for indexing asset packs and enabling on-demand delivery.[3] Similarly, densities.json lists supported screen densities to facilitate configuration splits, while resources.pb defines resource configurations for generating tailored APKs based on device characteristics like language or screen size.[3] The base module, which must be present, houses the core app functionality and is referenced briefly as the foundational element among core components.[3]
APK Generation and Optimization
Upon uploading an Android App Bundle (AAB) to Google Play, the platform employs bundletool, Google's command-line tool, to process the bundle and generate optimized, device-specific APKs. This generation occurs server-side and dynamically assembles APKs tailored to the requesting device's configuration, such as CPU architecture (e.g., ARM64 or x86), screen density (DPI), language, and supported features. The process extracts only the relevant code and resources from the AAB's modular components, resulting in a base APK that contains the core application manifest and essential elements, supplemented by configuration-specific split APKs for additional optimizations.[2][16] Optimization techniques integrated into this generation include code shrinking, which removes unused code paths via tools like R8 or ProGuard, and resource shrinking, which eliminates redundant assets while compressing files such as images and XML to minimize payload sizes. Split APKs further enhance efficiency by segregating content into targeted modules—for instance, density-specific resources or feature-based components—avoiding the inclusion of irrelevant data that would inflate universal APKs. These methods, combined with the AAB's inherent modularity, enable support for on-demand delivery of dynamic feature modules through Play Feature Delivery, where non-essential parts are downloaded only when needed by the user.[2][17][18] In the delivery flow, Google Play serves the minimal base APK alongside the required split APKs to the user's device, ensuring the initial compressed download size remains at or below 200 MB to comply with platform limits and promote faster installations. For larger applications exceeding this threshold, expansions via on-demand feature modules or Play Asset Delivery allow additional content to be fetched post-installation, maintaining overall app sizes up to 4 GB when including all modules and asset packs. This targeted approach reduces bandwidth usage and storage demands compared to traditional monolithic APKs.[1][6]Benefits
Advantages for Developers
The Android App Bundle (AAB) streamlines the publishing process for developers by allowing a single bundle upload to Google Play, which automatically generates and signs optimized APKs for various device configurations, eliminating the need to manually build and manage multiple APK variants.[2] This approach reduces complexity, as developers no longer have to handle signing for each APK split, with Play App Signing securely managing the app signing key to prevent loss or compromise and ensuring consistent signatures for updates.[19] Over 1 million apps and games on Google Play utilize AABs, demonstrating its widespread adoption for efficient distribution across app stores.[1] Testing efficiency is enhanced through tools like bundletool, which enables local generation of APK sets from an AAB without requiring the full Play Console infrastructure, allowing developers to deploy and test on emulators or physical devices via ADB for specific configurations such as screen densities or languages.[20] This facilitates verification of feature modules and on-demand downloads in a controlled environment, estimating download sizes to ensure compliance with restrictions, and supports code transparency to inspect distributed artifacts against originals.[1] By emulating Google Play's delivery process locally, developers can iterate quickly without repeated uploads, minimizing development cycles.[20] For analytics and updates, AAB integrates seamlessly with Google Play's staged rollouts, enabling developers to release updates to a gradual percentage of users—starting as low as 5%—to monitor performance metrics like crash rates via Android Vitals before full deployment, thus reducing risks associated with broad releases.[21] This is complemented by easier A/B testing through Play Console experiments and reduced maintenance for configuration splits, as the bundle format automatically handles resource optimization, avoiding manual APK variants for different ABI or screen sizes.[2] Additionally, features like Play Feature Delivery allow modular updates that can be rolled out on demand, further simplifying maintenance for large apps exceeding 200 MB by replacing legacy expansion files.[1]Advantages for Users
The Android App Bundle (AAB) format delivers significant benefits to end users by optimizing app delivery through Google Play, ensuring that only the essential components tailored to a user's device, language, and configuration are downloaded. This results in reduced initial download sizes, with official reports indicating average savings of 20% compared to traditional universal APKs, as the bundle excludes unnecessary code and resources such as unused language strings or screen density variants.[22] For instance, a device configured for English and a specific screen resolution receives solely the relevant assets, minimizing data usage and storage requirements without compromising functionality.[2] Faster installations are another key advantage, as Play generates device-specific APKs from the bundle that load more efficiently on diverse hardware configurations, avoiding the overhead of bloated universal files. On-demand delivery of dynamic feature modules further enhances this by deferring non-essential content until needed, preventing upfront bloat and allowing quicker access to core app features.[2] This optimization is particularly beneficial for users on varied devices, where tailored APKs reduce installation time and improve overall performance.[17] AAB improves accessibility for users in low-bandwidth regions or on storage-constrained devices by supporting smaller, incremental updates and conditional feature delivery, which helps overcome connectivity and capacity barriers common in emerging markets. Google Play data shows that smaller app sizes directly correlate with higher install success rates, with every 6 MB reduction in download size potentially increasing conversion by 1%, leading to fewer abandoned installations.[23]Comparison to APK
Key Differences
The Android App Bundle (AAB) and the traditional Android Package (APK) represent two distinct approaches to packaging and distributing Android applications, with AAB serving as a modern publishing format introduced to enhance optimization and efficiency over the longstanding APK method.[2] While APKs have been the standard installable format since Android's inception, AAB shifts the responsibility of APK generation to distribution platforms like Google Play, enabling tailored delivery.[1] This comparison highlights fundamental contrasts in their design, functionality, and implications for developers and users.| Aspect | Android App Bundle (AAB) | Traditional APK |
|---|---|---|
| Format Scope | A publishing format that bundles all compiled code and resources but cannot be directly installed on devices; it serves as input for generating multiple optimized APKs.[2][1] | A single, self-contained installable file that includes all necessary code, resources, and metadata for direct deployment on Android devices.[1] |
| Delivery Model | Enables server-side processing by platforms like Google Play to generate and deliver device-specific APKs, supporting automatic splits based on configuration (e.g., architecture, screen density) without manual variant creation.[2][3] | Requires developers to manually build and manage multiple APK variants for different device configurations, leading to potential redundancy and broader distribution challenges.[2] |
| Size and Modularity | Natively supports dynamic feature modules via Play Feature Delivery for on-demand loading and asset packs via Play Asset Delivery for optimized resource handling, allowing base APK sizes up to 200 MB and total downloads up to 4 GB with modular expansion.[2][1][18][6] | Permits APK splits for configuration-specific optimizations but lacks built-in support for dynamic features or dedicated asset delivery, relying instead on legacy expansion files (OBBs) that are less integrated and not compatible with AAB workflows.[1][24] |
Migration Strategies
To migrate an existing APK-based Android project to the Android App Bundle (AAB) format, developers should begin by updating the build configuration to support bundle generation. This involves upgrading to Android Gradle Plugin (AGP) version 3.2.0 or higher, which introduced AAB support, and ensuring the project uses Gradle 4.6 or later for compatibility. Once updated, refactor the codebase into modular components if leveraging dynamic delivery features; create feature modules via Android Studio by applying thecom.android.dynamic-feature plugin in the module's build.gradle file and declaring dependencies on the base app module. Enable Play Feature Delivery by adding the feature module to the base module's dynamicFeatures list and configuring delivery options in the feature manifest, such as <dist:on-demand /> for conditional downloads.
Common pitfalls during migration include issues with legacy APK splits or custom signing setups. If the project relies on manual APK splits for ABI or density variants, these must be removed, as AAB handles such optimizations automatically via Google Play's servers; failure to consolidate can result in build errors or oversized bundles. Custom signing configurations may conflict with Play App Signing, which is required for AAB uploads—developers must enroll in Play App Signing and upload an upload key rather than the app signing key, or risk upload failures.[25] To verify compatibility, test the bundle locally using bundletool's install-apks command, which generates and installs device-specific APKs from the AAB; this helps identify runtime issues like missing resources or module loading failures before publishing.[20]
Best practices emphasize a phased approach to minimize disruption. Start by building and uploading AABs alongside APKs as optional releases in the Google Play Console's internal testing track, allowing validation of functionality without affecting production users.[26] Monitor key metrics in the Play Console, such as download sizes and crash rates from split APKs, to assess performance gains—typically 15% smaller downloads compared to universal APKs.[2] Align full migration with Google Play's 2021 mandates, which required AAB for all new apps starting August 2021, while existing apps could continue with APK updates but benefit from switching for optimized delivery.[2] For apps exceeding 200 MB, prioritize enabling dynamic feature modules early to stay under the 4 GB compressed bundle limit.[27]
Implementation Guide
Building the Bundle
To build an Android App Bundle (AAB), developers require Android Studio version 3.2 or higher, which integrates support for bundle creation through its build system, along with the Gradle build tool via the Android Gradle Plugin (AGP) version 3.2.0 or later.[2][28] For command-line operations independent of the IDE, bundletool—a command-line tool provided by Google—must be downloaded and used; it handles bundle generation, APK extraction, and local testing from AABs.[16] The build process begins with configuring the module-levelbuild.gradle file to enable bundle output. Within the android block, developers specify bundle settings, such as enabling density or ABI splits for optimization, for example:
android {
bundle {
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
signingConfigs {
release {
storeFile file("my-release-key.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
android {
bundle {
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
signingConfigs {
release {
storeFile file("my-release-key.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
./gradlew bundleRelease from the project root directory, which compiles the code, packages resources, and outputs the app-release.aab file in the app/build/outputs/bundle/release/ directory.[29]
For verification, bundletool can generate a set of test APKs from the AAB using the build-apks command, such as bundletool build-apks --bundle=app-release.aab --output=app.apks --ks=keystore.jks --ks-pass=pass:password --ks-key-alias=keyAlias --key-pass=pass:password, allowing installation on a device or emulator with bundletool install-apks --apks=app.apks to confirm functionality.[16] Sizes and splits can then be checked using bundletool's get-size command, for instance bundletool get-size total --apks=app.apks, which reports estimated download sizes for the generated APKs and highlights split configurations like ABI or density variants.[16] This process ensures the bundle adheres to the expected structure, including base and configuration modules, before further deployment.[3]
Publishing Process
The publishing process for Android App Bundles (AABs) involves uploading a signed bundle to the Google Play Console, where Google handles optimization and distribution. Developers must enroll in Play App Signing prior to upload, a requirement for new apps since August 2021 that delegates app signing key management to Google's secure infrastructure for enhanced protection against key loss or compromise.[19] Once enrolled, the AAB is built and signed with an upload key, then submitted via the Play Console's "Create new release" workflow. Google Play automatically generates and signs optimized, device-specific APKs from the bundle, staging the release in testing tracks for validation: the internal track for up to 100 trusted testers in quick QA cycles, the closed track for targeted pre-release groups via opt-in links, or the open track for broader public testing with store listing visibility.[25][30] These tracks allow iterative testing before production rollout, with internal tests propagatable in hours and closed/open tests supporting concurrent versions alongside production.[30] Updating an AAB requires incrementing the bundle version code, an internal integer that must exceed the prior release's value (up to a maximum of 2100000000) to enable upgrades and block downgrades on user devices.[31] The updated signed AAB is uploaded similarly, with Google Play facilitating phased rollouts that distribute the update to an initial percentage of users (from 1% to 100%), adjustable in production or test tracks to minimize risk.[32] During rollouts, developers can monitor user eligibility—randomly selected across new and existing users—and pause or halt if needed, ensuring the same cohort remains consistent across adjustments. This process integrates with Play Console's crash analytics, providing filtered views of crash rates, ANR errors, and stability metrics by track to guide safe expansion.[32][33] Key policies govern AAB publishing, including a maximum compressed download size of 4 GB for the cumulative total of all modules and install-time asset packs. Apps larger than 1 GB must target Android 5.0 (API level 21) or higher. Apps exceeding 200 MB may trigger mobile data warnings for users on cellular networks.[34] As of November 2025, new apps and updates must target Android 15 (API level 35) or higher. Additionally, starting November 1, 2025, apps targeting Android 15 or higher must support 16 KB page sizes, requiring Android SDK Build-Tools version 35.0.0 or higher and the Android NDK.[35][36] Play App Signing enforces these through secure key handling via Google's Key Management Service, including support for APK Signature Scheme v4 on Android 11+ devices, while requiring acceptance of terms and permission for release management.[19] Non-compliance, such as exceeding size limits without optimization, prevents upload and distribution.[34]Advanced Features
Dynamic Feature Modules
Dynamic feature modules enable developers to modularize Android applications by separating non-essential functionality into independent components that can be delivered separately from the base application within an Android App Bundle (AAB). These modules are packaged as split APKs, allowing Google Play to generate and deliver only the necessary parts based on device configuration, user behavior, or other conditions, thereby optimizing the initial download and installation process. For instance, in a social app, a chat module might be excluded from the base APK and downloaded on demand when the user accesses messaging features.[18] To implement dynamic feature modules, developers apply thecom.android.dynamic-feature plugin in the module's build.gradle file and declare a dependency on the base app module. Delivery options—such as on-demand, install-time, or conditional—are configured in the module's AndroidManifest.xml using <dist:module> and <dist:delivery> elements; for on-demand delivery, the module is marked to exclude it from initial installation. At runtime, the Play Feature Delivery library's SplitInstallManager API handles module requests, as shown in the following Kotlin example for requesting a module named "pictureMessages":
val splitInstallManager = SplitInstallManagerFactory.create(context)
val request = SplitInstallRequest.newBuilder()
.addModule("pictureMessages")
.build()
splitInstallManager.startInstall(request)
.addOnSuccessListener { missionId ->
// Handle successful install
}
.addOnFailureListener { exception ->
// Handle error
}
val splitInstallManager = SplitInstallManagerFactory.create(context)
val request = SplitInstallRequest.newBuilder()
.addModule("pictureMessages")
.build()
splitInstallManager.startInstall(request)
.addOnSuccessListener { missionId ->
// Handle successful install
}
.addOnFailureListener { exception ->
// Handle error
}
SplitCompat in the base application's Application class to ensure seamless access to module resources and code post-installation. This setup supports Android 5.0 (API level 21) and higher, with a recommendation to limit removable install-time modules to 10 or fewer to minimize installation time.[37][18]
In practice, dynamic feature modules significantly reduce the initial app download size by deferring non-critical components, improving user retention on slower networks or devices with limited storage; for example, a marketplace app can modularize features like payments or selling tools, delivering them only to relevant users and potentially lowering the base APK by excluding unused code and resources. This approach also enables conditional delivery based on device capabilities, such as downloading AR features only for supported hardware, enhancing overall app performance and personalization without increasing the core bundle size.[18]
Asset Delivery
Asset packs in Android App Bundles enable the efficient delivery of large, non-executable assets such as textures, shaders, sounds, and videos, which are bundled separately to optimize app size and download experience. These packs are collections of assets hosted on Google Play and delivered through Play Asset Delivery (PAD), a feature that replaces legacy expansion files (OBBs) for apps exceeding 200 MB.[6] PAD allows developers to publish a single app bundle artifact while deferring the delivery of these assets based on user needs, ensuring faster initial installs and reduced storage requirements.[6] Asset packs are structured as archive files containing the assets, with install-time packs delivered as split APKs integrated into the initial app installation, while fast-follow and on-demand packs are provided as standalone archives post-installation. There are three primary delivery types: install-time assets, which are downloaded and installed alongside the base app and count toward the app's Play Store size; fast-follow assets, which are automatically downloaded immediately after installation without user intervention and do not contribute to the initial app size; and on-demand assets, which are fetched dynamically during app runtime only when required, further minimizing upfront downloads. This tiered approach supports progressive loading, where critical assets are prioritized for immediate access, and supplementary ones are deferred.[38] To integrate asset packs, developers configure them within the Android App Bundle using build tools like bundletool, specifying delivery modes and asset locations in the bundle configuration, then upload the bundle via the Google Play Console for hosting and distribution. The AssetPackManager API from the Play Core library is used in the app to request packs, monitor download status (such as progress, completion, or errors like network failures), and access asset locations once available, enabling robust handling of asynchronous delivery.[38] For example, developers can query pack states with methods likegetPackStates() to ensure assets are ready before use, and handle errors through callbacks.
Asset packs are particularly suited for resource-intensive applications like games requiring high-resolution graphics, where they facilitate delivering expansive content without inflating the core app size—for instance, titles such as NBA 2K Mobile and GWENT leverage PAD to provide enhanced visuals and audio. As of 2025, each individual asset pack is limited to 1.5 GB, with cumulative totals for install-time packs capped at 4 GB, and on-demand or fast-follow packs at 4 GB for standard developers (up to 30 GB for those in the Level Up program or Android XR titles); these limits are separate from the base bundle size, allowing total app downloads up to 8 GB (or 34 GB for eligible programs).[27] This complements dynamic feature modules by focusing solely on non-code assets, enabling modular content expansion without altering app functionality.[6]
