https://github.com/flutter/flutter/issues/16833
https://flutter.cn/docs/perf/app-size
app 编译后产物分析
App.framework:
dart 动态链接库(代码 插件 package)
assets资源
Release下apk的:AOT
App:dart代码Aot编译产物 动态链接库 (线性递增)
flutter_assets:(图片 字体等)
isolate_snapshot_data
isolate_snapshot_instr
vm_snapshot_data
vm_snapshot_instr
Debug :JIT
flutter_assets:
isolate_snapshot_data
kernel_blob.bin
platform.dill
vm_snapshot_data
Flutter.framework
flutter:flutter 引擎 ,c++动态链接库
icudtl.dat 国际化支持相关
优化
基础优化
删除:无用资源 无用的导入
缩减:压缩图片资源
挪:动态下发。app bundle。
官方建议:
- Remove unused resources
- Minimize resource imported from libraries
- Support a limited number of screen densities
- Compress PNG and JPEG files
动态下发
flutter_assets,icudtl 动态下发
dart 编译产物的分拆和下发:
isolate_snapshot_data
vm_snapshot_data
其他文件由于ios无法标记内存可读 所以需要保留
方案受益
(空壳 app demo)
包体积缩减6.3M
变化(patch.zip):
App 动态库移除两个data段 9.2M变成3.8M 减少5.4M
flutter_assets:整体移除
icudill 整体移除 减少0.8M
内置压缩方案
应对纯flutter应用或者无法动态下发的场景(头条采用)
1 patch.zip 内置 首次启动解压
对比:包体积减少3.8M
2 牺牲首次启动速读
遗留:双架构问题(32/64位)
flutter打包参数优化:
android 和ios都使用os-z