Flutter 工具支持三种编译模式,以及一种用于测试的无头模式。您可以根据开发周期的不同阶段选择不同的编译模式。您是在调试代码吗?您需要性能分析信息吗?您准备好发布应用了吗?

以下是使用各种模式的快速摘要:

  • 在开发期间,当您想要使用 热重载 时,请使用 debug 模式。
  • 当您想要分析性能时,请使用 profile 模式。
  • 当您准备好发布应用时,请使用 release 模式。

页面其余部分将详细介绍这些模式。

Debug

#

debug 模式下,应用被设置为在物理设备、模拟器或仿真器上进行调试。

移动应用的 debug 模式意味着:

  • 断言已启用。
  • 服务扩展已启用。
  • 编译针对快速开发和运行周期进行了优化(但未针对执行速度、二进制文件大小或部署进行优化)。
  • 已启用调试,支持源代码级别调试的工具(如 DevTools)可以连接到进程。

Web 应用的 debug 模式意味着:

  • 构建经过压缩,也执行 tree shaking(移除未使用的代码)。
  • 应用使用 dartdevc 编译器进行编译,以便于调试。

默认情况下,flutter run 会编译到 debug 模式。您的 IDE 支持此模式。例如,Android Studio 提供了“Run > Debug...”菜单选项,以及项目页面上带有小三角形覆盖的绿色虫子图标。

Release

#

使用release 模式来发布应用,此时您需要最大的优化和最小的占用空间。对于移动应用,release 模式(在模拟器或仿真器上不支持)意味着:

  • 断言已禁用。
  • 调试信息已被剥离。
  • 调试已禁用。
  • 编译针对快速启动、快速执行和小型软件包大小进行了优化。
  • 服务扩展已禁用。

Web 应用的 release 模式意味着:

  • 构建经过压缩,并执行了 tree shaking。
  • 应用使用 dart2js 编译器进行编译,以获得最佳性能。

命令 flutter run --release 会编译到 release 模式。您的 IDE 支持此模式。例如,Android Studio 提供了“Run > Run...”菜单选项,以及项目页面上带有绿色三角形的运行按钮图标。您可以使用 flutter build <target> 为特定目标编译到 release 模式。有关支持的目标列表,请使用 flutter help build

有关更多信息,请参阅关于发布 iOSAndroid 应用的文档。

Profile

#

profile 模式下,会保留一些调试功能,足以分析应用的性能。Profile 模式在模拟器和仿真器上被禁用,因为它们的行为不能代表真实性能。对于移动应用,profile 模式与 release 模式类似,但有以下区别:

  • 一些服务扩展,例如启用性能覆盖的扩展,已启用。
  • 已启用跟踪,支持源代码级别调试的工具(如 DevTools)可以连接到进程。

Web 应用的 profile 模式意味着:

  • 构建经过压缩,但已执行 tree shaking。
  • 应用使用 dart2js 编译器进行编译。
  • DevTools 无法连接到以 profile 模式运行的 Flutter Web 应用。使用 Chrome DevTools 生成 Web 应用的时间线事件

您的 IDE 支持此模式。例如,Android Studio 提供了“Run > Profile...”菜单选项。命令 flutter run --profile 会编译到 profile 模式。

有关构建模式的更多信息,请参阅 Flutter 构建模式