跳到主內容

測量你的應用大小

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

許多開發者關心編譯後的應用大小。由於 Flutter 應用的 APK、應用包或 IPA 版本是自包含的,並且包含執行應用所需的所有程式碼和資源,因此其大小可能是一個問題。應用越大,它在裝置上所需的空間就越多,下載時間就越長,並且可能突破即用型應用等實用功能的限制。

除錯構建不具代表性

#

預設情況下,使用 flutter run 啟動你的應用,或單擊 IDE(如在 編寫你的第一個 Flutter 應用 中使用的 IDE)中的 播放 按鈕,會生成 Flutter 應用的除錯構建。由於除錯構建包含允許熱過載和原始碼級別除錯的除錯開銷,因此其應用大小很大,不能代表終端使用者下載的生產應用。

檢查總大小

#

預設釋出構建,例如透過 flutter build apkflutter build ios 建立的構建,旨在方便地組裝上傳到 Play 商店和 App Store 的軟體包。因此,它們也不能代表你的終端使用者的下載大小。商店通常會重新處理並拆分你的上傳包,以針對特定的下載者和下載者的硬體,例如過濾針對手機 DPI 的資源,過濾針對手機 CPU 架構的本機庫。

估算總大小

#

要獲得每個平臺上最接近的近似大小,請使用以下說明。

Android

#

請遵循 Google Play Console 的說明,以檢查應用下載和安裝大小。

生成應用程式的上傳包

flutter build appbundle

登入到你的 Google Play Console。透過拖放 .aab 檔案來上傳你的應用程式二進位制檔案。

Android vitals -> 應用大小 選項卡中檢視應用程式的下載和安裝大小。

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. 單擊 分發應用
  4. 選擇分發方法。如果你不打算分發該應用程式,則 開發 是最簡單的方法。
  5. 應用瘦身 中,選擇“所有相容裝置變體”。
  6. 選擇 去除 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-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

此構建與標準釋出構建有兩點不同。

  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 中進行更深入的分析,其中樹形或樹狀圖檢視可以將應用程式的內容分解為單個檔案級別,並分解為 Dart AOT 工件的功能級別。

可以透過 dart devtools、選擇 開啟應用大小工具 並上傳 JSON 檔案來完成此操作。

Example breakdown of app in DevTools

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

減小應用大小

#

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

你可以採取的其他一些減小應用大小的方法是

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

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