App size is an important aspect of technical quality that can affect your app’s install and uninstall metrics. Google Play also has size limits for apps and dynamic content, such as feature modules and asset packs. This article details Google Play’s size limits and explains how you can use the Play Console to understand sizes relating to your app, so you can continue to keep your app size as optimized as possible.
Understanding app size
It’s important to regularly monitor and understand how you can reduce your app’s download and install sizes since these can impact your install success and uninstalls respectively. Here’s how the two sizes differ from each other:
- App download size: The size of your app that users download on Google Play. When an app has a larger download size, it takes longer to download.
- App size on device: The amount of space required to install your app. Since apps are compressed when they’re downloaded, it can make install sizes larger than download sizes. When an app has a larger install size, more space is required on a user’s device to complete the installation. After the app is opened, its size on the disk varies depending on the app usage.
Google Play maximum size limits
App bundles, feature modules, and asset packs are subject to the size limits below. All Google Play size limits are based on the compressed download size, as calculated by Play Console upon uploading your app bundle. You can closely estimate size before uploading to Play Console using the bundletool command line tool, which uses a similar (but not identical) calculation.
Important: Google Play recommends keeping your app size as small and optimized as possible to help your install metrics. Most developers should stay well below these size limits.
App component |
App download size limit |
---|---|
Base module |
200 MB |
Individual feature modules |
200 MB |
Individual asset packs |
1.5 GB |
Cumulative total for all modules and install-time asset packs |
4GB |
Cumulative total for asset packs delivered on-demand or fast-follow |
4GB* |
* Developers in the Google Play Partner Program for Games are allowed to deliver additional asset packs. Their cumulative total for asset packs delivered on-demand and fast-follow is 30GB instead of 4GB.
In addition to the size limits listed above, note the following:
- Apps larger than 1GB must target minimum SDK version of Android Lollipop (API level 21) or higher.
- The maximum recommended number of feature modules is 100 for apps targeting a minimum SDK version of Android Oreo (API level 26) or higher. The maximum number of feature modules is 50 when targeting a lower minimum SDK version.
- The maximum number of asset packs in an individual app bundle is 100.
- If your app is above 200 MB in size, users on a mobile data connection will see a non-blocking dialog when installing the app from Google Play informing them of the app's large size on their Android device.
- Apps still publishing with APKs instead of app bundles are subject to legacy APK size limits (that is, a maximum APK size of 100MB) and not the size limits above.
View your apps download and install sizes
After you’ve released your app on a production track, here’s where you can see your app’s download and install sizes:
- Open Play Console and go to the App size page (Quality > Android vitals > App size).
- At the top right of the screen, you can filter the page data by App download size or App size on device.
You can find the following data on the App size page:
- App download size/App size on device: Your app’s size on a reference device and its size range across all device configurations.
- App download size/App size on device vs. peers: How your app’s size compares to peers.
- To create a custom peer group of 8-12 apps, click Edit peer group.
- App download size/App size on device over time: How your app’s size has changed and compares to peers over time.
- Near the top-right of the chart, you can select the date range that you want to view and check the checkbox to display your app’s size range across all device configurations.
- Active devices with <2GB free: The percentage of your app's active users with less than 2GB of device storage space remaining.
- Uninstalls on devices with <2GB free: The ratio of uninstalls on active devices with less than 2GB of storage space remaining to uninstalls on all active devices.
Notes:
- Note: All sizes are representative calculations based on your latest production release and the
XXXHDPI ARMv8
device configuration or the closest supported device configuration for your app. - The Active devices with <2GB free and Uninstalls on devices with <2GB free metrics are calculated based on a 30-day rolling average and are only shown when it is determined to be applicable to your app.
View size breakdowns
If you publish apps using the Android App Bundle, you can view a chart that’s organized by bundle version code. It also has a breakdown of how much space different components of your app account for when compared to your app’s total download or install size for your previous five releases.
You can use this breakdown to find out what parts of your app are taking up the most space and identify areas that you can further optimize for space. The breakdown is based on an APK generated from your app bundle for the reference device configuration.
The breakdowns show the following data:
- App download size breakdown:
- Code/DEX: All Java or Kotlin code in your app compiled for execution on Android in DEX format.
- Resources: Resources include the resource table and non-code components of your app in the res/ directory, such as strings or images.
- Assets: Assets are other files that your app uses in the assets/directory, such as sound files or videos.
- Native libraries: The native code in the libs/ directory of your app. This is typically any code that is not Java or Kotlin.
- Other: Other files in your app.
- App size on device breakdown additionally shows:
- Extracted native libraries: When native libraries are compressed in an APK, they must be extracted into local storage to run your app.
- Optimized DEX: DEX code converted to native code by the Android runtime for performance.