跳到主内容

测量你的应用大小

如何测量 iOS 和 Android 应用的大小。

许多开发者关心编译后的应用大小。由于 Flutter 应用的 APK、应用包或 IPA 版本是自包含的,并且包含运行应用所需的所有代码和资源,因此其大小可能是一个问题。应用越大,它在设备上所需的空间就越多,下载时间就越长,并且可能突破即用型应用等实用功能的限制。

调试构建不具代表性

#

默认情况下,使用 flutter run 启动你的应用,或单击 IDE(如在 编写你的第一个 Flutter 应用 中使用的 IDE)中的 播放 按钮,会生成 Flutter 应用的调试构建。由于调试构建包含允许热重载和源代码级别调试的调试开销,因此其应用大小很大,不能代表最终用户下载的生产应用。

检查总大小

#

默认发布构建,例如通过 flutter build apkflutter build ios 创建的构建,旨在方便地组装上传到 Play 商店和 App Store 的软件包。因此,它们也不能代表你的最终用户的下载大小。商店通常会重新处理并拆分你的上传包,以针对特定的下载者和下载者的硬件,例如过滤针对手机 DPI 的资源,过滤针对手机 CPU 架构的本机库。

估算总大小

#

要获得每个平台上最接近的近似大小,请使用以下说明。

Android

#

请遵循 Google Play Console 的说明,以检查应用下载和安装大小。

生成应用程序的上传包

flutter build appbundle

登录到你的 Google Play Console。通过拖放 .aab 文件来上传你的应用程序二进制文件。

Android vitals -> 应用大小 选项卡中查看应用程序的下载和安装大小。

App size tab in Google Play Console

下载大小基于 arm64-v8a 架构的 XXXHDPI (~640dpi) 设备。你的最终用户的下载大小可能会因其硬件而异。

顶部选项卡有一个用于下载大小和安装大小的切换开关。页面下方还包含优化技巧。

iOS

#

创建一个 Xcode 应用大小报告

首先,按照 iOS 创建构建存档说明 中所述配置应用版本和构建。

然后

  1. 运行 flutter build ipa --export-method development
  2. 运行 open build/ios/archive/*.xcarchive 以在 Xcode 中打开存档。
  3. 单击 分发应用
  4. 选择分发方法。如果你不打算分发该应用程序,则 开发 是最简单的方法。
  5. 应用瘦身 中,选择“所有兼容设备变体”。
  6. 选择 去除 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-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

此构建与标准发布构建有两点不同。

  1. 该工具以记录 Dart 包的代码大小使用方式的方式编译 Dart。
  2. 该工具在终端中显示大小分解的高级摘要,并在 *-code-size-analysis_*.json 文件中留下更详细的分析,以便在 DevTools 中使用。

除了分析单个构建之外,还可以通过将两个 *-code-size-analysis_*.json 文件加载到 DevTools 中来比较两个构建。请查看 DevTools 文档 以获取详细信息。

Size summary of an Android application in terminal

通过摘要,你可以快速了解每个类别的空间使用情况(例如资源、本机代码、Flutter 库等)。编译的 Dart 本机库进一步分解为包,以便快速分析。

DevTools 中的深入分析

#

上述 *-code-size-analysis_*.json 文件可以在 DevTools 中进行更深入的分析,其中树形或树状图视图可以将应用程序的内容分解为单个文件级别,并分解为 Dart AOT 工件的功能级别。

可以通过 dart devtools、选择 打开应用大小工具 并上传 JSON 文件来完成此操作。

Example breakdown of app in DevTools

有关使用 DevTools 应用大小工具的更多信息,请查看 DevTools 文档

减小应用大小

#

在构建应用的发布版本时,请考虑使用 --split-debug-info 标签。此标签可以显著减小代码大小。有关使用此标签的示例,请参阅 混淆 Dart 代码

你可以采取的其他一些减小应用大小的方法是

  • 删除未使用的资源
  • 最小化从库导入的资源
  • 压缩 PNG 和 JPEG 文件

减小应用大小的另一种方法是使用特定于平台的代码。Dart 编译器会删除目标平台上无法访问的代码。例如,如果你有特定于 Windows 的代码,可以使用 dart:io 中的 Platform 类将其包装在检查中,例如 if (Platform.isWindows)。当你在 Android 上构建应用时,编译器会看到此检查始终为 false,并从发布构建中删除 Windows 特定的代码。