Android

    What to Do When Android App Bundles (AAB) Hit Play Console Size Limits

    An Android App Bundle exceeding the 200 MB base module download limit in Play Console, fixed with app shrinking and Play Asset Delivery.

    When an Android App Bundle hits Play Console size limits, the number that matters is the compressed download size of your base module, which Google Play caps at 200 MB, so an app whose base exceeds it fails or warns at upload. You have two routes. The first is to reduce the app's size with code and resource shrinking and smaller assets, which is the preferred fix because a smaller app also installs more reliably. The second is to move the excess out of the base download using Play Feature Delivery for optional features and Play Asset Delivery for large assets, both of which let your app go well beyond 200 MB while keeping the base under the limit. For most apps, shrinking is enough; for large games or media apps, delivery services carry the bulk.

    Short answer

    The limit is on what a device downloads, not on the file you upload. Per Google's app size guidance, the compressed download size of the base module generated from your app bundle must be no more than 200 MB, and larger apps can exceed that only by using Play Feature Delivery and Play Asset Delivery. Per Android's reduce app size guide, you lower the size with code and resource shrinking and efficient assets. So first shrink the app, and if it is genuinely large, split optional features into feature modules and move big assets into asset packs so the base stays under 200 MB.

    What the size limit is

    Google Play limits the compressed download size of your app's base module to 200 MB, which is the amount a device actually downloads to install the base of your app, and exceeding it is what triggers the size error at upload. The typical message names the module that is too big, usually the base, and asks you to reduce it. So the check is not on the raw app bundle you upload but on the download Play generates from it for a device.

    There are related limits worth knowing. Any feature module delivered on demand must also stay within that compressed download size when it is fetched, and the total of the compressed APKs required to install your app has its own much larger ceiling. But the one that stops most uploads is the 200 MB base download, so that is the number to design around. Getting the base under it, by shrinking or by moving content out of it, is the whole task.

    Why the limit is on the download, not the bundle

    A common source of confusion is that the app bundle you upload can be larger than 200 MB while still being fine, because the limit applies to the per-device download, not the upload. Play uses your app bundle to generate optimized downloads tailored to each device, stripping out resources and code the device does not need, and the 200 MB cap is on that generated download. So a bundle that contains assets for many densities and architectures can be sizeable while each device's slice stays small.

    This is why the fix is about the base download rather than the upload file. You are not trying to make the uploaded bundle smaller for its own sake; you are trying to make the base download Play produces for a device fit under 200 MB. Understanding that distinction points you at the right levers, shrinking what ends up in the base and moving optional content into modules and asset packs that are delivered separately, rather than at the upload size.

    Option 1: reduce your app size

    The first and best option is to make the app smaller, because a smaller base download is not only under the limit but installs more reliably and reduces uninstalls. Enable code shrinking with R8, which removes unused code, and turn on resource shrinking to strip unused resources. Convert images to efficient formats such as WebP, compress or downsample large media, and remove libraries and assets you do not actually use, since unused dependencies are a frequent source of bloat.

    So audit what is inflating the base: large images, bundled media, and heavy libraries are the usual culprits. Shrinking often brings an app comfortably under 200 MB without any structural change, which is why it is the first thing to try. It also has no downside for users, unlike growing the app, so even if you later adopt delivery services, keeping the base lean with shrinking and efficient assets remains worthwhile.

    Option 2: Play Feature Delivery

    If your app has large optional features, Play Feature Delivery lets you split them into feature modules that are not part of the base download, so the base stays small. A feature module can be delivered at install time, conditionally based on device criteria, or on demand when the user needs it, and only the base plus the features a device requires count toward that device's base download. So a big feature used by some users does not have to inflate the download for everyone.

    This suits apps with distinct, separable capabilities that not every user needs immediately. You move the heavy, optional parts into their own modules, and Play delivers them separately, which keeps the base under the limit. Each on-demand module also has to meet the compressed download restriction when fetched, so you size modules accordingly, but spreading a large app across the base and feature modules is a clean way to stay within the base limit while shipping everything.

    Option 3: Play Asset Delivery

    For apps and especially games with large assets, textures, audio, video, or level data, Play Asset Delivery is the tool designed to carry that bulk outside the base. Asset packs are delivered by Play at the right time, install-time, fast-follow, or on demand, with much higher size allowances than the base module, so gigabytes of game assets can ship through asset packs while the base stays small. Play Asset Delivery also supports texture compression format targeting so each device gets assets in the format it handles best.

    So if your size problem is content rather than code, moving large assets into asset packs is the fix, keeping the base download under 200 MB while the assets are delivered separately and optimally. This is the standard approach for large games, which routinely exceed the base limit many times over in total size. Using asset delivery rather than cramming assets into the base is what makes a large game distributable through the app bundle at all.

    Options at a glance

    Matching your kind of bloat to the right tool guides the fix. The table below maps them.

    Your situationBest optionEffect
    General bloat, unused code and assetsReduce app size with R8 and resource shrinkingBase fits under 200 MB
    Large optional featuresPlay Feature DeliveryFeatures leave the base download
    Large game or media assetsPlay Asset DeliveryAssets ship in packs, base stays small
    Slightly over the limitShrink assets and images firstOften enough on its own
    Many gigabytes of contentAsset Delivery, or a content CDNBulk delivered outside the base

    Read the first row as the default: shrinking the app resolves most size-limit failures without restructuring anything.

    Fix checklist

    Working through these steps gets an oversized app bundle under the limit. The checklist below covers them.

    StepActionDone?
    Find the base sizeNote the module the error flags, usually base[ ]
    Enable shrinkingTurn on R8 and resource shrinking[ ]
    Optimize assetsUse WebP and compress large media[ ]
    Remove unused codeDrop libraries and assets you do not use[ ]
    Split optional featuresUse Play Feature Delivery for big features[ ]
    Move large assetsUse Play Asset Delivery for game media[ ]

    The step teams skip most is enabling shrinking, since R8 and resource shrinking frequently bring the base under 200 MB with no restructuring at all.

    Where a scan fits

    Getting under the size limit is a build and packaging task, but the smaller build you produce is worth a security check, which is independent of its size.

    A scanner like PTKD.com analyzes your Android build and flags security issues such as exposed keys, over-broad permissions, and risky third-party code, mapped to OWASP MASVS. To be clear about the boundary: PTKD does not shrink your app or configure delivery, which are your build setup. Since auditing what is in your app to reduce size overlaps with auditing it for security, a size cleanup is a natural moment to scan the build, and removing unused libraries often improves both size and security at once.

    What to take away

    • Google Play limits the compressed download size of your app bundle's base module to 200 MB, and exceeding it fails or warns at upload.
    • The limit is on the per-device download Play generates, not on the app bundle file you upload, so the fix targets the base download.
    • Reduce the app first with R8 code shrinking, resource shrinking, WebP images, and by removing unused libraries and assets, which also helps install rates.
    • For large apps, use Play Feature Delivery to move optional features out of the base and Play Asset Delivery to ship large game or media assets separately.
    • Match the tool to the bloat, shrink for general size, feature modules for optional features, asset packs for content, and use a tool like PTKD.com to scan the leaner build.
    • #android app bundle
    • #aab
    • #google play
    • #app size
    • #play asset delivery

    Frequently asked questions

    What is the Android App Bundle size limit on Google Play?
    Google Play limits the compressed download size of your app's base module to 200 MB, which is the amount a device downloads to install the base of your app, and exceeding it triggers the size error at upload, usually naming the base module. Any feature module delivered on demand must also stay within that compressed download size when fetched, and the total compressed APKs required to install has a much larger ceiling. But the 200 MB base download is the limit that stops most uploads, so it is the number to design around by shrinking or moving content out of the base.
    Can my uploaded AAB file be larger than 200 MB?
    Yes. The 200 MB limit applies to the per-device download Play generates, not to the app bundle file you upload, so a bundle that contains resources and code for many device densities and architectures can be sizeable while each device's optimized slice stays small. Play uses your bundle to build downloads tailored to each device, stripping out what a device does not need, and the cap is on that generated base download. So the fix targets what ends up in the base download, through shrinking and moving optional content into modules and asset packs, rather than the upload size.
    How do I reduce my Android app's size?
    Enable code shrinking with R8, which removes unused code, and turn on resource shrinking to strip unused resources. Convert images to efficient formats such as WebP, compress or downsample large media, and remove libraries and assets you do not actually use, since unused dependencies are a frequent source of bloat. Audit what is inflating the base, large images, bundled media, and heavy libraries are the usual culprits. Shrinking often brings an app comfortably under 200 MB with no structural change, and it also improves install success, so it is the first thing to try.
    How do apps exceed the 200 MB app bundle limit?
    By moving content out of the base download using Play delivery services. Play Feature Delivery splits large optional features into feature modules delivered at install time, conditionally, or on demand, so they are not part of the base, and Play Asset Delivery ships large assets like game textures, audio, and level data in asset packs with much higher size allowances, delivered by Play at the right time. Both keep the base under 200 MB while the app as a whole is much larger. Large games routinely use asset packs to distribute gigabytes of content through the app bundle.
    What is the difference between Play Feature Delivery and Play Asset Delivery?
    Play Feature Delivery is for code and features: you split large optional capabilities into feature modules that are delivered at install time, conditionally, or on demand, so they leave the base download. Play Asset Delivery is for large non-code assets such as textures, audio, video, and level data, which ship in asset packs with much higher size allowances than the base and support texture compression format targeting. So use Feature Delivery when the bulk is optional features and Asset Delivery when the bulk is game or media content, and use shrinking first in both cases to keep the base lean.
    Does a large app bundle affect installs?
    Yes. Increasing your app's download size can negatively impact install success and increase uninstalls, so keeping the download small benefits users as well as clearing the size limit. This is why reducing the app with shrinking and efficient assets is recommended as the first option rather than simply growing the app, and why even apps that adopt Play Feature Delivery or Play Asset Delivery should still keep the base lean. A smaller base download is faster to install and more likely to complete, which is a good outcome beyond just passing the 200 MB check.

    Keep reading

    Scan your app in minutes

    Upload an APK, AAB, or IPA. PTKD returns an OWASP-aligned report with copy-paste fixes.

    Try PTKD free