跳到主內容

測量您的應用大小

如何測量 iOS 和 Android 應用的大小。

許多開發者都關心已編譯應用的大小。由於 Flutter 應用的 APK、App Bundle 或 IPA 版本是自包含的,並且包含了執行應用所需的所有程式碼和資源,因此其大小可能會成為一個問題。應用越大,它在裝置上佔用的空間就越多,下載時間也就越長,甚至可能會超出 Android 即時應用(Instant Apps)等功能的使用限制。

Debug 構建並不具有代表性

#

預設情況下,使用 flutter run 啟動應用或點選 IDE 中的執行(Play)按鈕,會生成 Flutter 應用的 Debug 構建版本。由於包含用於熱過載(Hot Reload)和原始碼級除錯的除錯開銷,Debug 構建的應用體積較大。因此,它無法代表終端使用者下載的生產環境應用。

檢查總大小

#

預設的 Release 構建版本(例如透過 flutter build apkflutter build ios 建立的版本)旨在方便您生成用於上傳到 Play Store 和 App Store 的程式包。因此,它們也無法代表終端使用者的下載大小。應用商店通常會對您上傳的程式包進行重處理和拆分,以針對特定的下載者及其硬體進行最佳化,例如過濾掉針對手機 DPI 的資源,或過濾掉針對手機 CPU 架構的本地庫。

估算總大小

#

若要獲取每個平臺上最接近的近似大小,請按照以下說明操作。

Android

#

請遵循 Google Play Console 指南 來檢查應用的下載和安裝大小。

為您應用生成上傳程式包

flutter build appbundle

登入您的 Google Play Console。透過拖放 .aab 檔案上傳您的應用二進位制檔案。

Android vitals -> App size(應用大小) 選項卡中檢視應用的下載和安裝大小。

App size tab in Google Play Console

下載大小是基於 arm64-v8a 架構上的 XXXHDPI (~640dpi) 裝置計算得出的。您終端使用者的下載大小可能會因其硬體而異。

頂部的選項卡包含下載大小和安裝大小的切換開關。頁面下方還包含最佳化建議。

iOS

#

建立 Xcode 應用大小報告

首先,按照 iOS 建立構建存檔說明配置應用版本和構建號。

然後

  1. 執行 flutter build ipa --export-method development
  2. 執行 open build/ios/archive/*.xcarchive 在 Xcode 中開啟該存檔。
  3. 點選 Distribute App(分發應用)
  4. 選擇分發方式。如果您不打算分發該應用,Development 是最簡單的選擇。
  5. App Thinning(應用瘦身) 中,選擇“all compatible device variants(所有相容的裝置變體)”。
  6. 選擇 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-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

此構建與標準 Release 構建在兩個方面有所不同:

  1. 該工具以記錄 Dart 包程式碼大小使用情況的方式編譯 Dart。
  2. 該工具會在終端顯示大小分解的高階摘要,並留下一個 *-code-size-analysis_*.json 檔案,以便在 DevTools 中進行更詳細的分析。

除了分析單個構建版本外,還可以透過將兩個 *-code-size-analysis_*.json 檔案載入到 DevTools 中來對比兩個構建版本。有關詳細資訊,請檢視 DevTools 文件

Size summary of an Android application in terminal

透過摘要,您可以快速瞭解每個類別(如資源、原生程式碼、Flutter 庫等)的大小佔用情況。已編譯的 Dart 原生庫會進一步按包進行細分,以便進行快速分析。

使用 DevTools 進行更深入的分析

#

上述生成的 *-code-size-analysis_*.json 檔案可以在 DevTools 中進行更深入的分析,透過樹狀檢視或矩形樹圖(Treemap)將應用內容細分到單個檔案級別,對於 Dart AOT 工件,甚至可以細分到函式級別。

這可以透過 dart devtools 完成,選擇 Open app size tool 並上傳 JSON 檔案即可。

Example breakdown of app in DevTools

有關使用 DevTools 應用大小工具的更多資訊,請檢視 DevTools 文件

減小應用大小

#

在構建應用的 Release 版本時,請考慮使用 --split-debug-info 標籤。此標籤可以顯著減小程式碼大小。有關使用此標籤的示例,請參閱 混淆 Dart 程式碼

減小應用大小的其他方法包括:

  • 移除未使用的資源
  • 最小化從庫中匯入的資源
  • 壓縮 PNG 和 JPEG 檔案

減小應用大小的另一種方法是使用特定於平臺的程式碼。Dart 編譯器會移除目標平臺上無法訪問的程式碼。例如,如果您有特定於 Windows 的程式碼,可以使用 dart:io 中的 Platform 類將其包裝在檢查中,例如 if (Platform.isWindows)。當您為 Android 構建應用時,編譯器會發現此檢查始終為 false,並從 Release 構建中移除 Windows 特定的程式碼。