测量应用大小

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

调试版本并不能代表实际情况

默认情况下,使用 flutter run 启动应用或单击 IDE 中的播放按钮(如 试用编写第一个 Flutter 应用 中所用),将生成 Flutter 应用的调试版本。由于允许热重载和源级调试的调试开销,调试版本的应用大小很大。因此,它并不能代表最终用户下载的生产应用。

检查总大小

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

估算总大小

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

Android

按照 Google Play 控制台说明检查应用下载和安装大小。

为您的应用制作一个上传包

flutter build appbundle

登录您的Google Play 控制台。通过拖放 .aab 文件上传您的应用二进制文件。

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

App size tab in Google Play Console

下载大小是根据 arm64-v8a 架构上的 XXXHDPI(~640dpi)设备计算的。您的最终用户下载大小可能会因其硬件而异。

顶部选项卡有一个用于下载大小和安装大小的切换按钮。该页面还包含进一步的优化提示。

iOS

创建Xcode App 大小报告

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

然后

  1. 运行 flutter build ipa --export-method development
  2. 运行 open build/ios/archive/*.xcarchive 在 Xcode 中打开存档。
  3. 点击分发应用
  4. 选择一种分发方法。如果您不打算分发该应用,开发是最简单的。
  5. App 精简中,选择“所有兼容设备变体”。
  6. 选择剥离 Swift 符号

对 IPA 进行签名并导出。导出的目录包含 App Thinning Size Report.txt,其中包含有关您在不同设备和 iOS 版本上预测的应用大小的详细信息。

Flutter 1.17 中的默认演示应用的应用大小报告显示

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

在此示例中,该应用在 iPhone12,1(型号 ID / 硬件编号适用于 iPhone 11)和 iPhone11,8(iPhone XR)上运行 iOS 13.0 时,其近似下载大小为 5.4 MB,近似安装大小为 13.7 MB。

要精确测量 iOS 应用,您必须将发布 IPA 上传到 Apple 的 App Store Connect(说明),并从那里获取大小报告。如 Flutter 常见问题解答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 工件的功能级别。

这可以通过 flutter pub global run devtools、选择 Open app size tool 和上传 JSON 文件来完成。

Example breakdown of app in DevTools

有关使用 DevTools 应用程序大小工具的更多信息,请参阅 DevTools 文档

减小应用大小

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

可以执行以下其他操作来减小应用程序的大小

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