測量你的應用大小
如何測量 iOS 和 Android 應用的大小。
許多開發者關心編譯後的應用大小。由於 Flutter 應用的 APK、應用包或 IPA 版本是自包含的,並且包含執行應用所需的所有程式碼和資源,因此其大小可能是一個問題。應用越大,它在裝置上所需的空間就越多,下載時間就越長,並且可能突破即用型應用等實用功能的限制。
除錯構建不具代表性
#預設情況下,使用 flutter run 啟動你的應用,或單擊 IDE(如在 編寫你的第一個 Flutter 應用 中使用的 IDE)中的 播放 按鈕,會生成 Flutter 應用的除錯構建。由於除錯構建包含允許熱過載和原始碼級別除錯的除錯開銷,因此其應用大小很大,不能代表終端使用者下載的生產應用。
檢查總大小
#預設釋出構建,例如透過 flutter build apk 或 flutter build ios 建立的構建,旨在方便地組裝上傳到 Play 商店和 App Store 的軟體包。因此,它們也不能代表你的終端使用者的下載大小。商店通常會重新處理並拆分你的上傳包,以針對特定的下載者和下載者的硬體,例如過濾針對手機 DPI 的資源,過濾針對手機 CPU 架構的本機庫。
估算總大小
#要獲得每個平臺上最接近的近似大小,請使用以下說明。
Android
#請遵循 Google Play Console 的說明,以檢查應用下載和安裝大小。
生成應用程式的上傳包
flutter build appbundle
登入到你的 Google Play Console。透過拖放 .aab 檔案來上傳你的應用程式二進位制檔案。
在 Android vitals -> 應用大小 選項卡中檢視應用程式的下載和安裝大小。

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

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