测量您的应用大小
许多开发者都关心其编译后应用的大小。由于 Flutter 应用的 APK、应用包或 IPA 版本是自包含的,并包含运行应用所需的所有代码和资源,因此其大小可能是一个问题。应用越大,在设备上所需的空间越多,下载时间越长,并且可能会突破像 Android 即时应用这样有用功能的限制。
调试版本不具有代表性
#默认情况下,使用 flutter run
启动应用,或点击 IDE 中的 Play 按钮(如编写您的第一个 Flutter 应用中所述),会生成 Flutter 应用的调试版本。调试版本的应用大小较大,这是由于调试开销允许热重载和源级别调试。因此,它不代表最终用户下载的生产应用大小。
检查总大小
#默认的发布版本(例如由 flutter build apk
或 flutter build ios
创建的版本)旨在方便地组装您的上传包到 Play 商店和 App Store。因此,它们也不代表您最终用户的下载大小。商店通常会重新处理和拆分您的上传包,以针对特定的下载者和下载者的硬件,例如过滤针对手机 DPI 的资源,过滤针对手机 CPU 架构的原生库。
估算总大小
#要在每个平台上获得最接近的近似大小,请使用以下说明。
Android
#按照 Google Play Console 的说明检查应用下载和安装大小。
为您的应用生成上传包
flutter build appbundle
登录您的 Google Play Console。通过拖放 .aab 文件上传您的应用二进制文件。
在 Android vitals -> 应用大小 选项卡中查看应用的下载和安装大小。

下载大小是根据 arm64-v8a 架构上的 XXXHDPI (~640dpi) 设备计算的。您的最终用户的下载大小可能因其硬件而异。
顶部选项卡有下载大小和安装大小的切换。该页面下方还包含优化技巧。
iOS
#创建 Xcode 应用大小报告。
首先,按照iOS 创建构建存档说明中的描述配置应用版本和构建。
然后
- 运行
flutter build ipa --export-method development
。 - 运行
open build/ios/archive/*.xcarchive
以在 Xcode 中打开存档。 - 点击 Distribute App。
- 选择分发方法。如果您不打算分发应用,Development 是最简单的。
- 在 App Thinning 中,选择 'all compatible device variants'(所有兼容设备变体)。
- 选择 Strip Swift symbols(剥离 Swift 符号)。
签名并导出 IPA。导出的目录包含 App Thinning Size Report.txt
,其中包含您的应用在不同设备和 iOS 版本上的预计大小详情。
Flutter 1.17 中默认演示应用的 App Size Report 显示
Variant: Runner-7433FC8E-1DF4-4299-A7E8-E00768671BEB.ipa
Supported variant descriptors: [device: iPhone12,1, os-version: 13.0] and [device: iPhone11,8, os-version: 13.0]
App + On Demand Resources size: 5.4 MB compressed, 13.7 MB uncompressed
App size: 5.4 MB compressed, 13.7 MB uncompressed
On Demand Resources size: Zero KB compressed, Zero KB uncompressed
在此示例中,该应用在运行 iOS 13.0 的 iPhone12,1 (iPhone 11 的型号 ID / 硬件编号) 和 iPhone11,8 (iPhone XR) 上的近似下载大小为 5.4 MB,近似安装大小为 13.7 MB。
要精确测量 iOS 应用的大小,您必须将发布 IPA 上传到 Apple 的 App Store Connect(说明),并从那里获取大小报告。IPA 通常比 APK 大,这在 Flutter FAQ 中的 Flutter 引擎有多大?一节中有所解释。
分解大小
#从 Flutter 1.22 版和 DevTools 0.9.1 版开始,包含了一个大小分析工具,以帮助开发者了解其应用发布版本的构成。
在构建时通过传递 `--analyze-size` 标志来调用大小分析工具
flutter build apk --analyze-size
flutter build appbundle --analyze-size
flutter build ios --analyze-size
flutter build linux --analyze-size
flutter build macos --analyze-size
flutter build windows --analyze-size
此构建与标准发布构建在两个方面有所不同。
- 该工具以记录 Dart 包的代码大小使用情况的方式编译 Dart。
- 该工具在终端中显示大小分解的高级摘要,并生成一个
*-code-size-analysis_*.json
文件,以便在 DevTools 中进行更详细的分析。
除了分析单个构建外,还可以通过将两个 *-code-size-analysis_*.json
文件加载到 DevTools 中来比较两个构建。有关详细信息,请查看 DevTools 文档。

通过摘要,您可以快速了解每个类别(如资源、原生代码、Flutter 库等)的大小使用情况。编译后的 Dart 原生库会按包进一步分解,以便快速分析。
在 DevTools 中进行更深入的分析
#上面生成的 *-code-size-analysis_*.json
文件可以在 DevTools 中进行更深入的详细分析,其中树视图或树状图视图可以将应用内容分解到单个文件级别,对于 Dart AOT 工件,甚至可以分解到函数级别。
这可以通过运行 dart devtools
,选择 Open app size tool
并上传 JSON 文件来完成。

有关使用 DevTools 应用大小工具的更多信息,请查看 DevTools 文档。
减小应用大小
#在构建应用的发布版本时,请考虑使用 --split-debug-info
标志。此标志可以显著减小代码大小。有关使用此标志的示例,请参阅混淆 Dart 代码。
您可以采取的其他一些减小应用大小的方法是
- 移除未使用的资源
- 最小化从库导入的资源
- 压缩 PNG 和 JPEG 文件