测量您的应用大小
如何测量 iOS 和 Android 应用的大小。
许多开发者都关心已编译应用的大小。由于 Flutter 应用的 APK、App Bundle 或 IPA 版本是自包含的,并且包含了运行应用所需的所有代码和资源,因此其大小可能会成为一个问题。应用越大,它在设备上占用的空间就越多,下载时间也就越长,甚至可能会超出 Android 即时应用(Instant Apps)等功能的使用限制。
Debug 构建并不具有代表性
#默认情况下,使用 flutter run 启动应用或点击 IDE 中的运行(Play)按钮,会生成 Flutter 应用的 Debug 构建版本。由于包含用于热重载(Hot Reload)和源代码级调试的调试开销,Debug 构建的应用体积较大。因此,它无法代表最终用户下载的生产环境应用。
检查总大小
#默认的 Release 构建版本(例如通过 flutter build apk 或 flutter build ios 创建的版本)旨在方便您生成用于上传到 Play Store 和 App Store 的程序包。因此,它们也无法代表最终用户的下载大小。应用商店通常会对您上传的程序包进行重处理和拆分,以针对特定的下载者及其硬件进行优化,例如过滤掉针对手机 DPI 的资源,或过滤掉针对手机 CPU 架构的本地库。
估算总大小
#若要获取每个平台上最接近的近似大小,请按照以下说明操作。
Android
#请遵循 Google Play Console 指南 来检查应用的下载和安装大小。
为您应用生成上传程序包
flutter build appbundle
登录您的 Google Play Console。通过拖放 .aab 文件上传您的应用二进制文件。
在 Android vitals -> App size(应用大小) 选项卡中查看应用的下载和安装大小。

下载大小是基于 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 应用,您必须将 Release 版 IPA 上传到 Apple 的 App Store Connect(说明)并从那里获取大小报告。正如 Flutter 常见问题解答 中 Flutter 引擎有多大? 一节所解释的那样,IPA 通常比 APK 大。
分解大小
#从 Flutter 1.22 和 DevTools 0.9.1 版本开始,包含了一个大小分析工具,旨在帮助开发者了解其应用 Release 构建版本的构成。
通过在构建时添加 --analyze-size 标志来调用大小分析工具
flutter build apk --analyze-sizeflutter build appbundle --analyze-sizeflutter build ios --analyze-sizeflutter build linux --analyze-sizeflutter build macos --analyze-sizeflutter build windows --analyze-size
此构建与标准 Release 构建在两个方面有所不同:
- 该工具以记录 Dart 包代码大小使用情况的方式编译 Dart。
- 该工具会在终端显示大小分解的高级摘要,并留下一个
*-code-size-analysis_*.json文件,以便在 DevTools 中进行更详细的分析。
除了分析单个构建版本外,还可以通过将两个 *-code-size-analysis_*.json 文件加载到 DevTools 中来对比两个构建版本。有关详细信息,请查看 DevTools 文档。
通过摘要,您可以快速了解每个类别(如资源、原生代码、Flutter 库等)的大小占用情况。已编译的 Dart 原生库会进一步按包进行细分,以便进行快速分析。
使用 DevTools 进行更深入的分析
#上述生成的 *-code-size-analysis_*.json 文件可以在 DevTools 中进行更深入的分析,通过树状视图或矩形树图(Treemap)将应用内容细分到单个文件级别,对于 Dart AOT 工件,甚至可以细分到函数级别。
这可以通过 dart devtools 完成,选择 Open app size tool 并上传 JSON 文件即可。

有关使用 DevTools 应用大小工具的更多信息,请查看 DevTools 文档。
减小应用大小
#在构建应用的 Release 版本时,请考虑使用 --split-debug-info 标签。此标签可以显著减小代码大小。有关使用此标签的示例,请参阅 混淆 Dart 代码。
减小应用大小的其他方法包括:
- 移除未使用的资源
- 最小化从库中导入的资源
- 压缩 PNG 和 JPEG 文件
减小应用大小的另一种方法是使用特定于平台的代码。Dart 编译器会移除目标平台上无法访问的代码。例如,如果您有特定于 Windows 的代码,可以使用 dart:io 中的 Platform 类将其包装在检查中,例如 if (Platform.isWindows)。当您为 Android 构建应用时,编译器会发现此检查始终为 false,并从 Release 构建中移除 Windows 特定的代码。