# flutter_package_size_lab **Repository Path**: TTGF/flutter_package_size_lab ## Basic Information - **Project Name**: flutter_package_size_lab - **Description**: Flutter 包体积瘦身实验室:资源治理、APK、AAB、ABI 拆分与 analyze-size - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-31 - **Last Updated**: 2026-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Flutter 包体积瘦身实验室 一个用于学习 Flutter 包体积分析和瘦身方法的实验 Demo。 ## 运行环境 ```text Flutter SDK:3.41.6 stable Dart SDK:3.11.4 Android SDK:35.0.0 Xcode:26.4.1 ``` ## 先分清四个指标 - 安装包体积:本地构建得到的 APK、AAB 或 IPA 文件大小。 - 商店下载体积:应用商店针对设备拆分和压缩后的实际下载大小。 - 安装后占用:安装到设备并解压后的磁盘空间。 - 运行时内存:App 运行过程中的内存占用,不属于包体积指标。 ## 实验内容 1. Release 构建:不要使用 Debug 包判断最终体积。 2. 资源治理:删除未使用资源,只声明真正需要打包的目录。 3. ABI 拆分:通过 `--split-per-abi` 生成不同 CPU 架构 APK。 4. 体积分析:通过 `--analyze-size` 生成可查看的报告。 5. 依赖审计:使用 `flutter pub deps` 检查依赖树。 6. 符号与混淆:通过 `--obfuscate` 和 `--split-debug-info` 分离调试符号。 ## 资源对照 ```text assets/ ├── baseline/ # 用于统计未优化资源,不声明进 pubspec └── optimized/ # 实际打包资源 ``` `baseline` 目录模拟清理前的大图和历史资源。`optimized` 目录只保留 App 实际需要的资源。 项目提供两份资源清单: ```text pubspec.baseline.yaml # 基线包:只声明 assets/baseline/ pubspec.optimized.yaml # 优化包:只声明 assets/optimized/ ``` 报告脚本会在构建前切换 `pubspec.yaml`,构建结束后自动恢复优化版配置。这样生成的 APK 和 AAB 可以真实反映资源治理前后的差异。 ## 运行 Demo ```bash flutter pub get flutter run ``` ## 生成体积报告 执行: ```bash ./tool/package_size_report.sh ``` 脚本会: 1. 统计 `baseline` 和 `optimized` 资源体积。 2. 输出依赖树。 3. 构建基线 APK 和基线 AAB。 4. 构建优化 APK 和优化 AAB。 5. 构建优化版拆分 ABI APK。 6. 输出 APK 内容清单。 7. 自动计算基线 APK 与优化 APK 的字节差值。 8. 生成 `build/package-size/report.md`。 如果本机 Android 许可证未接受,可以先执行: ```bash flutter doctor --android-licenses ``` 首次 Android Release 构建可能需要下载或初始化 Gradle 依赖,耗时会明显长于后续构建。 ## 生成 analyze-size 报告 `--analyze-size` 会生成 DevTools 可以查看的详细体积报告。为了让主脚本执行时间可控,建议在优化版构建完成后单独执行: ```bash cp pubspec.optimized.yaml pubspec.yaml flutter pub get flutter build apk --release \ --analyze-size \ --target=lib/main.dart ``` 终端会显示分析文件路径和打开 DevTools 的命令。 ## 查看 APK 内容 报告脚本会自动生成: ```text build/package-size/baseline/apk-contents.txt build/package-size/optimized/apk-contents.txt ``` 也可以手动执行: ```bash unzip -l build/app/outputs/flutter-apk/app-release.apk ``` ## 常用命令 ```bash # 通用 Release APK flutter build apk --release # 按 ABI 拆分 APK flutter build apk --release --split-per-abi # Android App Bundle flutter build appbundle --release # 生成体积分析报告 flutter build apk --release --analyze-size # 混淆并分离调试信息 flutter build apk --release \ --obfuscate \ --split-debug-info=build/symbols # 查看依赖树 flutter pub deps ``` `--obfuscate` 主要用于提高逆向成本,`--split-debug-info` 主要用于分离符号文件。它们需要妥善保存符号文件,但不是包体积瘦身的核心手段。 ## 验证 ```bash flutter analyze flutter test ```