Flutter · One codebase, native feel
How do you reduce Flutter app size?
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.
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.
Follow-ups you should expect
Interviewers use these to check whether the first answer was understanding or memorisation.
- 1What does split-debug-info do and what must you keep?
- 2Why does an App Bundle produce smaller downloads than a universal APK?
- 3When are deferred components worth the complexity?
- 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.