跳至主要内容

测量应用的大小

许多开发者都关注其编译后应用的大小。由于 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 性能指标** -> **应用大小**选项卡中查看应用的下载和安装大小。

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 中默认演示应用的应用大小报告显示

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(说明)并从那里获取大小报告。如 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 工件细分到函数级别。

这可以通过 dart devtools 完成,选择 打开应用大小工具 并上传 JSON 文件。

Example breakdown of app in DevTools

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

减小应用大小

#

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

您可以采取的其他一些措施来减小应用的大小:

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