Before we shipped our client's consumer app, the release APK weighed 74 MB. Everything worked fine in staging. But when we ran flutter build apk --analyze-size before submitting to the Play Store, the output was painfully oversized images, packages nobody was sure were still active, and fonts loaded for languages the app didn't support.
Here's why that matters: according to Google Play internal data, every 6 MB increase in app size drops install conversion rate by roughly 1%. At 74 MB, we were already leaking installs before a single user had a reason to leave.
Step 1: Measure First With the Size Analyzer
We ran:
flutter build apk --analyze-size --target-platform android-arm64
Load the output at devtools.flutter.dev/appsize for a visual treemap. Ours showed images and fonts at ~40% of total build weight. That told us exactly where to start.
Step 2: Switch to ABI Splits
Flutter's default universal APK bundles four CPU architectures. Most production devices need one. One flag changed that:
flutter build apk --split-per-abi
This alone took us from 74 MB to 44 MB. For Play Store releases, we moved to AAB format, Google Play then serves only the code and resources each device actually needs.
Step 3: Replace and Compress Assets
Images and fonts are where most Flutter app size bloat hides. We found three things fast:
Design exports at 4K resolution for 2x screens. Converted to WebP, typically 30–70% smaller than PNG/JPEG.
A custom font loaded in six weights. The app used two. Removed the rest.
Old asset files from abandoned features still listed in pubspec.yaml.
After this step: 44 MB → 31 MB. In an afternoon.
Step 4: Release Flags and Dependency Cleanup
Build with:
flutter build apk --release --obfuscate --split-debug-info=./debug-info
Obfuscation with --split-debug-info typically cuts code size by 15–20%. Keep the debug-info folder, you'll need it to read crash reports.
Then go through pubspec.yaml and question every package. Anything with a large native SDK (analytics, maps, camera) that isn't actively used on launch day is dead weight. We removed four packages. Final result:
The Takeaway
Flutter app size doesn't balloon overnight; it compounds quietly with every new package, uncompressed image, and unused font weight. Set a size budget before launch (under 20 MB is a solid target for most consumer apps) and run --analyze-size on every release build, not just the final one.
If you want developers who treat size and launch-readiness as first-class requirements rather than pre-submission cleanup, consider working with Hire Flutter Developers who build these checks into every release cycle.

Top comments (0)