Flutter 的构建模式
介绍 Flutter 的构建模式,以及何时应该使用调试、发布或性能分析模式。
Flutter 工具在编译应用程序时支持三种模式,以及一种用于测试的 Headless 模式。你需要根据开发周期所处的阶段来选择编译模式。你是在调试代码吗?你需要性能分析信息吗?你准备好部署应用了吗?
以下是何时使用何种模式的简要总结:
- 在开发过程中,当你想要使用 热重载 (hot reload) 时,使用 调试 (debug) 模式。
- 当你想要分析性能时,使用 性能分析 (profile) 模式。
- 当你准备好发布应用程序时,使用 发布 (release) 模式。
本页面的其余部分将详细介绍这些模式。
- 要了解 Headless 测试模式,请参阅引擎 Wiki 文档中的 Flutter 构建模式 (Flutter's build modes)。
- 要了解如何检测构建模式,请查看 在 Flutter 应用中检查调试/发布模式 博客文章。
调试 (Debug)
#在 调试模式 (debug mode) 下,应用已针对物理设备、模拟器或仿真器上的调试进行了配置。
移动应用的调试模式意味着:
- 断言 (Assertions) 已启用。
- 服务扩展已启用。
- 编译针对快速开发和运行周期进行了优化(但未针对执行速度、二进制大小或部署进行优化)。
- 已启用调试,支持源代码级调试的工具(如 DevTools)可以连接到该进程。
Web 应用的调试模式意味着:
- 构建内容未进行压缩(minified),也未执行摇树优化(tree shaking)。
- 应用使用 dartdevc 编译器进行编译,以便于调试。
默认情况下,flutter run 会编译为调试模式。你的 IDE 支持此模式。例如,Android Studio 提供 Run > Debug... 菜单选项,以及项目页面上带有一个小三角形的绿色虫子图标。
发布 (Release)
#在部署应用时使用 发布模式 (release mode),以获得最佳的优化效果和最小的安装包体积。对于移动端,发布模式(模拟器或仿真器不支持)意味着:
- 断言已禁用。
- 调试信息已被剥离。
- 调试功能已禁用。
- 编译针对快速启动、快速执行和小包体积进行了优化。
- 服务扩展已禁用。
Web 应用的发布模式意味着:
- 构建内容已压缩,且已执行摇树优化。
- 应用使用 dart2js 编译器进行编译,以获得最佳性能。
命令 flutter run --release 可编译为发布模式。你的 IDE 支持此模式。例如,Android Studio 提供 Run > Run... 菜单选项,以及项目页面上的三角形绿色运行按钮图标。你可以使用 flutter build <target> 为特定目标编译发布模式。如需查看支持的目标列表,请使用 flutter help build。
有关详细信息,请参阅发布 iOS 和 Android 应用的文档。
性能分析 (Profile)
#在 性能分析模式 (profile mode) 下,保留了一定的调试能力——足以分析应用的性能。性能分析模式在模拟器和仿真器上被禁用,因为它们的行为不能代表真实性能。在移动端,性能分析模式类似于发布模式,区别如下:
- 某些服务扩展(例如启用性能分析覆盖层的扩展)已启用。
- 已启用跟踪,支持源代码级调试的工具(如 DevTools)可以连接到该进程。
Web 应用的性能分析模式意味着:
- 构建内容未进行压缩,但已执行摇树优化。
- 应用使用 dart2js 编译器进行编译。
- DevTools 无法连接到处于性能分析模式下的 Flutter Web 应用。请使用 Chrome DevTools 为 Web 应用生成时间轴事件 (timeline events)。
你的 IDE 支持此模式。例如,Android Studio 提供 Run > Profile... 菜单选项。命令 flutter run --profile 可编译为性能分析模式。
有关构建模式的详细信息,请参阅 Flutter 构建模式 (Flutter's build modes)。