Flutter · One codebase, native feel

How do you reduce Flutter app size?

Hardapp sizeobfuscationassetstree shakingUpdated Oct 2026
Quiz this track

Short answer

Measure with size analysis, split debug symbols, obfuscate release builds, shrink assets and remove unused packages. Use Android App Bundles and avoid shipping every ABI in one artifact.

App size has several contributors: the Flutter engine, compiled Dart code, native libraries, assets, fonts and third-party SDKs. Measure before changing anything. The size analysis output breaks down what contributes, so effort goes to the largest removable item rather than cosmetic tweaks.

sh
flutter build appbundle --analyze-size
flutter build ipa --analyze-size
flutter build appbundle --obfuscate --split-debug-info=build/symbols
  • Use App Bundles so each device downloads only the needed ABI and density resources
  • Split debug info and upload symbols to crash reporting before releasing
  • Remove unused icon fonts and subset custom fonts
  • Compress or convert images, and avoid shipping multiple oversized variants
  • Audit SDKs that bundle large native libraries or model files

Deferred components and trade-offs

Android deferred components can move rarely used features into dynamic feature modules, reducing the initial download. They add build and delivery complexity and are not a universal solution. Obfuscation reduces symbol names but requires retaining and uploading symbol files, otherwise crash reports become unreadable.

Do not optimise download size at the cost of startup time or crash diagnosability. A smaller binary that cannot be debugged in production is a bad trade.

Follow-ups you should expect

Interviewers use these to check whether the first answer was understanding or memorisation.

  1. 1What does split-debug-info do and what must you keep?
  2. 2Why does an App Bundle produce smaller downloads than a universal APK?
  3. 3When are deferred components worth the complexity?
  4. 4How do you find which dependency is inflating the binary?

Say it in the interview

I measure with the size analysis tools first, because engine, Dart code, native libraries and assets all contribute differently. Then I split debug info, obfuscate release builds, shrink assets and remove unused SDKs. App Bundles handle per-device delivery. I keep the symbol files for crash reporting, and I only consider deferred components when a feature is large and rarely used.

Use this as a model, not a script. Saying it in your own words is what makes it survive follow-up pressure.

Related questions

Reading is step one

Now say it out loud.

Understanding an answer and delivering it under pressure are different skills. Rehearse this topic in a live Flutter mock interview and get scored feedback on depth, clarity and confidence.