测量应用大小
许多开发者都关心编译后应用的大小。由于 Flutter 应用的 APK、应用包或 IPA 版本是独立的,并且包含运行应用所需的所有代码和资源,因此其大小可能会引起关注。应用越大,它在设备上需要的空间就越多,下载所需的时间就越长,并且它可能会突破 Android 即时应用等有用功能的限制。
调试版本并不能代表实际情况
默认情况下,使用 flutter run
启动应用或单击 IDE 中的播放按钮(如 试用 和 编写第一个 Flutter 应用 中所用),将生成 Flutter 应用的调试版本。由于允许热重载和源级调试的调试开销,调试版本的应用大小很大。因此,它并不能代表最终用户下载的生产应用。
检查总大小
默认的发布版本(例如由 flutter build apk
或 flutter build ios
创建的版本)旨在方便地将上传包组装到 Play 商店和 App Store。因此,它们也不能代表最终用户的下载大小。商店通常会重新处理并拆分上传包,以针对特定的下载者及其硬件,例如过滤针对手机 DPI 的资源,过滤针对手机 CPU 架构的本机库。
估算总大小
若要在每个平台上获得最接近的近似大小,请使用以下说明。
Android
按照 Google Play 控制台说明检查应用下载和安装大小。
为您的应用制作一个上传包
flutter build appbundle
登录您的Google Play 控制台。通过拖放 .aab 文件上传您的应用二进制文件。
在Android vitals -> App size 选项卡中查看应用的下载和安装大小。
下载大小是根据 arm64-v8a 架构上的 XXXHDPI(~640dpi)设备计算的。您的最终用户下载大小可能会因其硬件而异。
顶部选项卡有一个用于下载大小和安装大小的切换按钮。该页面还包含进一步的优化提示。
iOS
首先,通过配置应用版本和构建,如iOS 创建构建存档说明中所述。
然后
- 运行
flutter build ipa --export-method development
。 - 运行
open build/ios/archive/*.xcarchive
在 Xcode 中打开存档。 - 点击分发应用。
- 选择一种分发方法。如果您不打算分发该应用,开发是最简单的。
- 在App 精简中,选择“所有兼容设备变体”。
- 选择剥离 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
此构建与标准发布构建在两个方面有所不同。
- 该工具以记录 Dart 包的代码大小使用情况的方式编译 Dart。
- 该工具在终端中显示大小分解的高级摘要,并留下一个
*-code-size-analysis_*.json
文件,以便在 DevTools 中进行更详细的分析。
除了分析单个构建之外,还可以通过将两个 *-code-size-analysis_*.json
文件加载到 DevTools 中来对两个构建进行差异化处理。有关详细信息,请参阅 DevTools 文档。
通过摘要,您可以快速了解每个类别(例如资源、原生代码、Flutter 库等)的大小使用情况。编译的 Dart 原生库按包进一步分解,以便快速分析。
在 DevTools 中进行更深入的分析
上面生成的 *-code-size-analysis_*.json
文件可以在 DevTools 中进行更深入的详细分析,其中树或树状图视图可以将应用程序的内容分解到各个文件级别,并分解到 Dart AOT 工件的功能级别。
这可以通过 flutter pub global run devtools
、选择 Open app size tool
和上传 JSON 文件来完成。
有关使用 DevTools 应用程序大小工具的更多信息,请参阅 DevTools 文档。
减小应用大小
在构建应用程序的发布版本时,请考虑使用 --split-debug-info
标记。此标记可以显著减小代码大小。有关使用此标记的示例,请参阅 混淆 Dart 代码。
可以执行以下其他操作来减小应用程序的大小
- 删除未使用的资源
- 最小化从库中导入的资源
- 压缩 PNG 和 JPEG 文件