Mobile Apps

Reducing Flutter App Size Before You Hit the Store Limit

Flutter apps are convenient but not small, and a bloated download hurts twice: users on slow connections skip it, and you can bump into store size limits. Trimming Flutter app size is mostly about cutting what you don’t ship and building correctly for release.

Illustration of a mobile screen with a simple, tap-friendly interface, Reducing Flutter App Size Before You Hit the Store Limit
How to cut Flutter app size before release: build bundles per architecture, trim assets and packages, and measure where the bytes really go.

Why Flutter app size matters

Every Flutter app carries the engine and framework with it, so even a simple app starts heavier than a minimal native one. That baseline is fine. The problem is everything that piles on top during development: oversized images, spare fonts, debug settings and packages added for one small feature.

Size shows up in places you may not watch. People on limited data plans or nearly full phones hesitate before a large download, and they delete large apps first when space runs out. Stores show the download size on the listing, so a heavy app also looks heavy before anyone installs it.

Build for release, split by architecture

A debug build is far larger than release. For Android, building an App Bundle lets the store deliver only the code for each device’s architecture instead of bundling all of them, which alone can roughly halve the download.

In practice that means a few habits:

  • Never judge size from a debug build. Measure the release output only.
  • Publish to Google Play with flutter build appbundle, so Play generates optimised downloads per device. Android’s guide to Android App Bundles explains how that delivery works.
  • If you distribute APK files directly, use flutter build apk --split-per-abi so each file contains one architecture rather than all of them.
  • On iOS the App Store also thins the app for each device, so the size a user downloads is smaller than the archive you upload.

Audit assets and dependencies

Bundled images, fonts, and files are often the biggest contributors. Compress images, ship only the font weights you actually use, and remove placeholder assets that crept in during development: a single uncompressed background image can cost more than all your code.

A few specific checks catch most asset bloat:

  • Image format and resolution. Export photos as WebP or well-compressed JPEG at the size they are displayed, not straight from the camera or design tool.
  • Resolution variants. Every 2.0x and 3.0x variant you add is shipped in the app. Keep them for images that need them, not for everything by default.
  • Large or rarely used media. Onboarding videos and big illustrations can often be loaded from the network when needed instead of bundled.
  • Fonts. A full font family with every weight and italic is heavy. Bundle the two or three weights the design actually uses.
  • The assets folder itself. Declaring a whole folder in pubspec.yaml ships everything in it, including files nobody uses anymore.

Every package adds weight, and it’s easy to pull in a heavy library for one small feature. Review your dependencies and drop the ones you barely use. Then enable code shrinking and obfuscation for release so the build strips unused code from libraries you only partly use.

For the Dart side, building with --obfuscate --split-debug-info=<directory> moves debug symbols out of the app. Keep that directory safe, because you need it to read crash reports later. Release builds also strip unused Material icons from the icon font, as long as icons are referenced as constants.

Infographic summarising “Reducing Flutter App Size Before You Hit the Store Limit”: Why Flutter app size matters; Build for release, split by architecture; Audit assets and dependencies; Measure where the bytes go; Common mistakes when shrinking a Flutter app; Size is part of the first impression
The article at a glance.

Measure where the bytes go

Finally, check what’s actually in the build: Flutter’s size analysis tools show where the bytes go, so you can target the real offenders instead of guessing. Release builds, per-architecture delivery, compressed assets, and lean dependencies usually get an app comfortably under the limit.

To run the analysis, build with the --analyze-size flag, for example flutter build apk --analyze-size --target-platform android-arm64. The build prints a summary and writes a file you can open in DevTools to see how much each package and asset contributes. Flutter’s guide to measuring your app’s size covers the iOS side as well.

Run the analysis before and after each change. It keeps you honest about which fixes actually mattered, and it catches the next oversized asset before it ships.

Common mistakes when shrinking a Flutter app

  • Comparing a debug build with a release build and assuming something broke.
  • Uploading a universal APK when an App Bundle would let the store trim it.
  • Deleting a package while another package still depends on it, so nothing gets smaller.
  • Losing the split debug info, which makes production crash reports unreadable.

Size is part of the first impression

A lean download is where the user’s experience starts, not where it ends. Budget phones are also the ones that struggle to render smoothly, so check why your Flutter app janks on older Android phones while you have one on your desk.

If the app sits in front of a subscription product, the first session after install decides most of what happens next. Why your SaaS trial-to-paid conversion is stuck covers that stage. Before launch, it is also worth reviewing the authentication mistakes found in small SaaS apps, since mobile apps usually share the same backend.

Size, speed and security are all things I check before a release goes out, and they are part of every mobile app build I take on.

Questions people ask

Why is my Flutter app so large?

Every Flutter app includes the engine and framework, so it starts heavier than a minimal native app. Beyond that, the usual causes are measuring a debug build, bundling every architecture in one APK, uncompressed images, unused font weights and packages pulled in for small features.

How do I check what is taking up space in my Flutter app?

Build with the analyze-size flag, for example flutter build apk --analyze-size --target-platform android-arm64. Flutter prints a summary and writes a file you can open in DevTools, which shows how much each package, asset and part of your code contributes to the final size.

Should I upload an APK or an App Bundle to Google Play?

An App Bundle. Google Play uses it to generate downloads tailored to each device, so users only receive the code for their own architecture. If you distribute APK files outside the store, build them with split-per-abi so each file contains one architecture.

Does obfuscation make a Flutter app smaller?

Building with obfuscate and split-debug-info moves debug symbols out of the app, which trims some size and makes the code harder to reverse engineer. Keep the debug info directory it produces, because you need it to make sense of crash reports from production.

Comments

Leave a comment

0 / 3000
Comments are moderated. Links are not clickable and your email is never published. See the privacy policy.
keep reading

Related articles

Usually replies within a day
let’s talk

Tell me what you want to build

A website, an app, some automation, or something you’re still figuring out. Tell me the problem and I’ll give you a straight answer on what it takes. No pressure, no sales team.