跳至主要內容

測量應用程式的大小

許多開發人員關心編譯後的應用程式大小。由於 Flutter 應用程式的 APK、應用程式套件或 IPA 版本是獨立的,並包含執行應用程式所需的所有程式碼和資源,因此其大小可能是一個問題。應用程式越大,在裝置上需要的空間就越多,下載時間就越長,並且可能會超出 Android 即時應用程式等有用功能的限制。

除錯建置不具代表性

#

預設情況下,使用 flutter run 啟動應用程式,或按一下 IDE 中的 播放 按鈕(如「試駕」和「編寫您的第一個 Flutter 應用程式」中所用),會產生 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 中預設示範應用程式的應用程式大小報告顯示

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 應用程式,您必須將發行 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 檔案