App Bundle Delivery
AndroidPublishing as universal APK instead of Android App Bundle. AAB enables automatic configuration splits, reducing download size by 15% on average and up to 50% with dynamic features.
The Android App Bundle (AAB) is a publishing format that defers APK generation to Google Play. Instead of building a single universal APK containing resources for every device configuration, the AAB contains all compiled code, resources, and native libraries. Google Play then generates and serves configuration APKs tailored to each user's device, including only the appropriate screen density resources, CPU architecture native libraries, and language resources. Additionally, AAB supports dynamic feature modules for on-demand delivery and Play Asset Delivery for large game assets.
Why this happens
Universal APK bloat: A universal APK includes all density drawables (ldpi through xxxhdpi), all ABI native libraries, and all language strings, even though each device only needs one variant.
Monolithic app architecture: Large apps that ship all features at install time force users to download functionality they may never use.
Large game assets: Games with textures, audio, and video assets embedded in the APK inflate download size far beyond the code footprint.
Library localization overhead: Dependencies like AppCompat and Google Play Services include translations for 70+ languages, most of which the app does not support.
Size impact
AAB is required for new Google Play apps since August 2021. The compressed download size limit for AABs is 200 MB vs. 100 MB for APKs.
Average AAB savings
15% smaller download vs universal APK
With dynamic features
On average 35% smaller, up to 50%
How we detect it
Checks whether the app is published as APK or AAB. Uses bundletool to estimate per-device size savings from configuration splits across ABI, screen density, and language dimensions.
How to fix
1
Build as AAB
Use bundleRelease Gradle task instead of assembleRelease. This is the default in modern Android Studio projects.
./gradlew bundleRelease2
Configure split dimensions
Enable language, density, and ABI splits for maximum size reduction per device.
build.gradle.kts (app module)
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}3
Create a dynamic feature module
Move large or rarely-used features into dynamic feature modules that are downloaded on-demand rather than at install time.
app/build.gradle.kts
android {
dynamicFeatures += ":feature_camera"
}4
Use Play Asset Delivery for large assets
Configure asset packs for large game textures, audio, or video assets. Choose install-time, fast-follow, or on-demand delivery based on when assets are needed.
Important: AAB-based dynamic delivery only works through Google Play. For other distribution channels (Samsung Galaxy Store, Huawei AppGallery, sideloading), you need universal APKs or per-channel builds. Dynamic features must be tested through Google Play's internal test track or using bundletool locally.
Powered by Bitrise, trusted by 8,500+ brands
Size Analyzer is built by Bitrise, the leading mobile DevOps platform used by over 400,000 developers at companies like Shopify, TripAdvisor, and BuzzFeed. Free forever. No signup required.
Bitrise provides a full-stack mobile DevOps solution that unites the tools, processes, and testing frameworks engineering teams need to ship best-in-class mobile experiences.