測量您的應用大小
如何測量 iOS 和 Android 應用的大小。
許多開發者都關心已編譯應用的大小。由於 Flutter 應用的 APK、App Bundle 或 IPA 版本是自包含的,並且包含了執行應用所需的所有程式碼和資源,因此其大小可能會成為一個問題。應用越大,它在裝置上佔用的空間就越多,下載時間也就越長,甚至可能會超出 Android 即時應用(Instant Apps)等功能的使用限制。
Debug 構建並不具有代表性
#預設情況下,使用 flutter run 啟動應用或點選 IDE 中的執行(Play)按鈕,會生成 Flutter 應用的 Debug 構建版本。由於包含用於熱過載(Hot Reload)和原始碼級除錯的除錯開銷,Debug 構建的應用體積較大。因此,它無法代表終端使用者下載的生產環境應用。
檢查總大小
#預設的 Release 構建版本(例如透過 flutter build apk 或 flutter build ios 建立的版本)旨在方便您生成用於上傳到 Play Store 和 App Store 的程式包。因此,它們也無法代表終端使用者的下載大小。應用商店通常會對您上傳的程式包進行重處理和拆分,以針對特定的下載者及其硬體進行最佳化,例如過濾掉針對手機 DPI 的資源,或過濾掉針對手機 CPU 架構的本地庫。
估算總大小
#若要獲取每個平臺上最接近的近似大小,請按照以下說明操作。
Android
#請遵循 Google Play Console 指南 來檢查應用的下載和安裝大小。
為您應用生成上傳程式包
flutter build appbundle
登入您的 Google Play Console。透過拖放 .aab 檔案上傳您的應用二進位制檔案。
在 Android vitals -> App size(應用大小) 選項卡中檢視應用的下載和安裝大小。

下載大小是基於 arm64-v8a 架構上的 XXXHDPI (~640dpi) 裝置計算得出的。您終端使用者的下載大小可能會因其硬體而異。
頂部的選項卡包含下載大小和安裝大小的切換開關。頁面下方還包含最佳化建議。
iOS
#建立 Xcode 應用大小報告。
首先,按照 iOS 建立構建存檔說明配置應用版本和構建號。
然後
- 執行
flutter build ipa --export-method development。 - 執行
open build/ios/archive/*.xcarchive在 Xcode 中開啟該存檔。 - 點選 Distribute App(分發應用)。
- 選擇分發方式。如果您不打算分發該應用,Development 是最簡單的選擇。
- 在 App Thinning(應用瘦身) 中,選擇“all compatible device variants(所有相容的裝置變體)”。
- 選擇 Strip Swift symbols(剝離 Swift 符號)。
簽名並匯出 IPA。匯出的目錄中包含 App Thinning Size Report.txt,其中詳細說明了應用在不同裝置和 iOS 版本上的預計大小。
Flutter 1.17 中預設演示應用的 App Size Report 顯示
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
在此示例中,該應用在執行 iOS 13.0 的 iPhone12,1(iPhone 11 的型號 ID/硬體編號)和 iPhone11,8 (iPhone XR) 上的大約下載大小為 5.4 MB,安裝大小約為 13.7 MB。
要精確測量 iOS 應用,您必須將 Release 版 IPA 上傳到 Apple 的 App Store Connect(說明)並從那裡獲取大小報告。正如 Flutter 常見問題解答 中 Flutter 引擎有多大? 一節所解釋的那樣,IPA 通常比 APK 大。
分解大小
#從 Flutter 1.22 和 DevTools 0.9.1 版本開始,包含了一個大小分析工具,旨在幫助開發者瞭解其應用 Release 構建版本的構成。
透過在構建時新增 --analyze-size 標誌來呼叫大小分析工具
flutter build apk --analyze-sizeflutter build appbundle --analyze-sizeflutter build ios --analyze-sizeflutter build linux --analyze-sizeflutter build macos --analyze-sizeflutter build windows --analyze-size
此構建與標準 Release 構建在兩個方面有所不同:
- 該工具以記錄 Dart 包程式碼大小使用情況的方式編譯 Dart。
- 該工具會在終端顯示大小分解的高階摘要,並留下一個
*-code-size-analysis_*.json檔案,以便在 DevTools 中進行更詳細的分析。
除了分析單個構建版本外,還可以透過將兩個 *-code-size-analysis_*.json 檔案載入到 DevTools 中來對比兩個構建版本。有關詳細資訊,請檢視 DevTools 文件。
透過摘要,您可以快速瞭解每個類別(如資源、原生程式碼、Flutter 庫等)的大小佔用情況。已編譯的 Dart 原生庫會進一步按包進行細分,以便進行快速分析。
使用 DevTools 進行更深入的分析
#上述生成的 *-code-size-analysis_*.json 檔案可以在 DevTools 中進行更深入的分析,透過樹狀檢視或矩形樹圖(Treemap)將應用內容細分到單個檔案級別,對於 Dart AOT 工件,甚至可以細分到函式級別。
這可以透過 dart devtools 完成,選擇 Open app size tool 並上傳 JSON 檔案即可。

有關使用 DevTools 應用大小工具的更多資訊,請檢視 DevTools 文件。
減小應用大小
#在構建應用的 Release 版本時,請考慮使用 --split-debug-info 標籤。此標籤可以顯著減小程式碼大小。有關使用此標籤的示例,請參閱 混淆 Dart 程式碼。
減小應用大小的其他方法包括:
- 移除未使用的資源
- 最小化從庫中匯入的資源
- 壓縮 PNG 和 JPEG 檔案
減小應用大小的另一種方法是使用特定於平臺的程式碼。Dart 編譯器會移除目標平臺上無法訪問的程式碼。例如,如果您有特定於 Windows 的程式碼,可以使用 dart:io 中的 Platform 類將其包裝在檢查中,例如 if (Platform.isWindows)。當您為 Android 構建應用時,編譯器會發現此檢查始終為 false,並從 Release 構建中移除 Windows 特定的程式碼。