测量你的应用大小
如何测量 iOS 和 Android 应用的大小。
许多开发者关心编译后的应用大小。由于 Flutter 应用的 APK、应用包或 IPA 版本是自包含的,并且包含运行应用所需的所有代码和资源,因此其大小可能是一个问题。应用越大,它在设备上所需的空间就越多,下载时间就越长,并且可能突破即用型应用等实用功能的限制。
调试构建不具代表性
#默认情况下,使用 flutter run 启动你的应用,或单击 IDE(如在 编写你的第一个 Flutter 应用 中使用的 IDE)中的 播放 按钮,会生成 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 中打开存档。 - 单击 分发应用。
- 选择分发方法。如果你不打算分发该应用程序,则 开发 是最简单的方法。
- 在 应用瘦身 中,选择“所有兼容设备变体”。
- 选择 去除 Swift 符号。
签名并导出 IPA。导出的目录包含 App Thinning Size Report.txt,其中包含有关不同设备和 iOS 版本上你的预计应用程序大小的详细信息。
Flutter 1.17 中默认演示应用的 App 大小报告显示
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(型号 ID / 硬件编号,适用于 iPhone 11)和 iPhone11,8(iPhone XR)上具有大约 5.4 MB 的下载大小和大约 13.7 MB 的安装大小。
要准确测量 iOS 应用的大小,你必须将发布 IPA 上传到 Apple 的 App Store Connect(说明)并从那里获取大小报告。如 Flutter FAQ 中的 Flutter 引擎有多大? 一节中所述,IPA 通常比 APK 大。
分解大小
#从 Flutter 1.22 版本和 DevTools 0.9.1 版本开始,包含一个大小分析工具,以帮助开发者了解其应用程序的发布构建的分解。
通过在构建时传递 --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
此构建与标准发布构建有两点不同。
- 该工具以记录 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、选择 打开应用大小工具 并上传 JSON 文件来完成此操作。

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