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)。