Measure and reduce the size of the Flutter app bundle, APK, or IPA
Analyzes and optimizes Flutter application size by measuring build artifacts, generating size analysis reports, utilizing Dart DevTools for component breakdown, and implementing specific size reduction strategies such as debug info splitting, resource compression, and platform-specific tree-shaking. Assumes a configured Flutter environment and target platform availability.
Use the following decision tree to determine the correct measurement and optimization path:
flutter build <platform> --analyze-size. Proceed to DevTools analysis.flutter build ipa --export-method development and generate an Xcode App Thinning Size Report for accurate download estimates.dart devtools*-code-size-analysis_*.json--split-debug-info, compress assets, and implement Platform checks for aggressive tree-shaking.Determine Target Platform and Baseline STOP AND ASK THE USER: "Which platform (apk, appbundle, ios, linux, macos, windows) are you targeting for size optimization, and do you have a specific size reduction goal?"
Generate Size Analysis File
Execute the Flutter build command with the --analyze-size flag to compile Dart with code size usage recording.
# Replace <platform> with apk, appbundle, ios, linux, macos, or windows
flutter build <platform> --analyze-size
Note: This generates a *-code-size-analysis_*.json file in the build/ directory and prints a high-level summary to the terminal.
Generate iOS App Size Report (iOS Only)
If targeting iOS, the .app file generated by --analyze-size only evaluates relative size. For an accurate end-user download estimate, generate an Xcode App Size Report.
flutter build ipa --export-method development
build/ios/archive/*.xcarchive) in Xcode.App Thinning Size Report.txt.Analyze Components in DevTools Launch DevTools to inspect the JSON analysis file.
dart devtools
*-code-size-analysis_*.json file.Implement Size Reduction Strategies Apply the following strategies to the build process and codebase:
Strategy A: Split Debug Info and Obfuscate Extract debug symbols from the compiled binary to reduce the final artifact size.
flutter build appbundle --obfuscate --split-debug-info=build/app/outputs/symbols/
Strategy B: Platform-Specific Tree Shaking
Use dart:io Platform checks to ensure the Dart AOT compiler removes unreachable code for the target platform.
import 'dart:io';
void initializePlatformSpecificFeatures() {
if (Platform.isWindows) {
// Windows-specific imports and logic
// The AOT compiler will strip this out when building for Android/iOS
_initWindowsFeatures();
} else if (Platform.isAndroid) {
_initAndroidFeatures();
}
}
Validate and Fix After applying reduction strategies, regenerate the size analysis file.
flutter build <platform> --analyze-size
STOP AND ASK THE USER: "Please upload the new *-code-size-analysis_*.json file to DevTools and compare it with the original using the 'Diff' tab. Did the app size decrease to meet your requirements?"
--split-debug-info was applied correctly and that large assets (PNG/JPEG) have been compressed or removed.flutter run or standard IDE play buttons) to measure app size. They contain debugging overhead and are not representative of production sizes.--split-debug-info flag..app file size; always use the Xcode App Thinning Size Report for accurate iOS download size estimates.Platform checks use dart:io constants directly so the AOT compiler can accurately perform tree-shaking.