測量你的應用體積
許多開發者都會關注應用編譯後的大小。Flutter 應用編譯出的 APK、app bundle 和 IPA 均持有應用執行需要的所有程式碼和資源,是完全獨立的。一個應用越大,在裝置上佔用的空間就越多,下載時間就越長,還可能超出 Android 即時應用等實用功能的限制。
除錯版本不具有代表性
預設情況下,使用 flutter run
命令啟動應用,或者點選 IDE 的 Play 按鈕(如 開發體驗初探 和 編寫第一個 Flutter 應用 中所使用的),會產生 Flutter 應用的 除錯 版本。除錯版本體積很大,用於熱重載和原始碼除錯。因此,它不能代表使用者最終下載的正式版本的應用。
檢查總大小
由 flutter build apk
或 flutter build ios
等產生的預設發行版本,是為了方便在 Play 商店和 App Store 上組裝你上傳的應用套件。因此,它們也無法代表你的使用者最終下載的大小。應用商店通常會針對不同的下載程式及其硬體,重新處理和拆分你上傳的應用套件,例如根據手機的 DPI 過濾資源、根據手機的 CPU 架構過濾原生庫。
估算總大小
請使用以下指南,獲取各個平臺下最接近的估算大小。
Android
根據 Google 的 Play 控制檯說明 來檢視應用的下載大小。
產生你的應用的上傳包:
flutter build appbundle
登入你的 Google Play 控制檯。透過拖放 .abb 檔案來上傳應用的二進位制檔案。
在 Android vitals -> App size 選項卡中檢視應用的下載和安裝大小。

該下載大小是基於 XXXHDPI (~640dpi) 且架構為 arm64-v8a 的裝置來計算的。使用者最終的下載大小可能因硬體而異。
頂部選項卡有一個切換下載大小和安裝大小的開關。該頁面還包含了進一步的最佳化提示。
iOS
建立一份 Xcode 應用大小報告。
首先,參照 iOS 建立建構歸檔指南,配置應用的版本,並開始建構。
然後:
-
執行命令
flutter build ipa --export-method development
。 -
Run
open build/ios/archive/*.xcarchive
to open the archive in Xcode. 執行命令open build/ios/archive/*.xcarchive
開啟 Xcode 產生的歸檔檔案。 -
點選 Distribute App。
-
選擇一種釋出方式。如果你不打算釋出該應用,Development 模式是最簡單的。
-
在 App Thinning 中,選擇「all compatible device variants」。
-
選擇 Strip Swift symbols。
簽名並匯出 IPA 套件,匯出目錄中有一個 App Thinning Size Report.txt
檔案,其中記錄了在不同裝置和 iOS 版本上預估的應用程式大小的詳細資訊。
Flutter 1.17 上的預設 demo app 的應用大小報告顯示如下:
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(iPhone 11 的 Model ID / Hardware number)和 iPhone11,8 (iPhone XR) 執行在 iOS 13.0 版本下時,下載大小約為 5.4 MB,安裝大小約為 13.7 MB。
想要精確測量一個 iOS 應用的體積,你需要先將一個發行版本的 IPA 包上傳至 App Store Connect(簡介),再獲取它的大小報告。 IPA 包一般都比 APK 包要大,這在 Flutter FAQ 中的 Flutter 引擎有多大? 一節中已經闡述過了。
大小拆分
從 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 套件的程式碼大小使用情況。
-
該工具在終端上展示了大小拆分的摘要資訊,並在 DevTools 中生成了一個
*-code-size-analysis_*.json
檔案,用於進行更詳細的分析。
除了分析單個建構,你還可以在 DevTools 中載入兩個 *-code-size-analysis_*.json
檔案比較差異。詳情請閱讀 DevTools 文件。

透過總結,你可以快速瞭解每種型別(例如資源、原生程式碼、Flutter 庫等)的大小使用情況。編譯後的 Dart 原生庫會按包進一步拆分,以便快速分析。
在 DevTools 中深入分析
上面產生的 *-code-size-analysis_*.json
檔案可以在 DevTools 中進一步深入分析,樹和樹狀圖可以將應用內容分割至單檔案級別,也可以達到 Dart AOT 產物的函式級別。
可以透過 flutter pub global run devtools
開啟 DevTools,選擇 Open app size tool
,然後上傳 JSON 檔案。

更多關於 DevTools 中應用大小工具的使用,請看 DevTools 文件。
減少應用大小
當建構應用的發行版本時,考慮使用 --split-debug-info
標記。該標記會顯著減少程式碼量。關於使用此標記的範例,請檢視文件 Obfuscating Dart code。
其他減少應用大小的方式:
-
刪除無用的資源
-
儘量減少從庫中引入的資源
-
壓縮 PNG 和 JPEG 檔案