使用應用程式大小工具
這是什麼?
#應用程式大小工具可讓您分析應用程式的總大小。您可以使用「分析」分頁檢視單一「大小資訊」快照,或使用「差異」分頁比較兩個不同的「大小資訊」快照。
什麼是「大小資訊」?
#「大小資訊」包含應用程式 Dart 程式碼、原生程式碼和非程式碼元素(例如應用程式套件、資源和字體)的大小資料。「大小資訊」檔案包含應用程式總大小的整體資料。
Dart 大小資訊
#Dart AOT 編譯器在編譯應用程式時會對程式碼執行 tree-shaking(僅限設定檔或發行模式,AOT 編譯器不適用於偵錯組建,偵錯組建會以 JIT 編譯)。這表示編譯器會嘗試移除未使用或無法存取的程式碼片段,以最佳化應用程式的大小。
在編譯器盡可能最佳化程式碼後,最終結果可以總結為二進位輸出中存在的套件、程式庫、類別和函式集合,以及它們的大小(以位元組為單位)。這是「大小資訊」的 Dart 部分,我們可以在應用程式大小工具中進行分析,以進一步最佳化 Dart 程式碼並找出大小問題。
如何使用
#如果 DevTools 已連線至執行中的應用程式,請導覽至「應用程式大小」分頁。
如果 DevTools 未連線至執行中的應用程式,您可以在啟動 DevTools 後顯示的登陸頁面存取此工具(請參閱啟動指示)。
分析索引標籤
#「分析」分頁可讓您檢查大小資訊的單一快照。您可以使用樹狀圖和表格檢視大小資料的階層結構,並使用主導者樹狀圖和呼叫圖檢視程式碼歸因資料(例如,為什麼程式碼片段會包含在編譯後的應用程式中)。
載入大小檔案
#當您開啟「分析」分頁時,會看到載入應用程式大小檔案的指示。將應用程式大小檔案拖放到對話方塊中,然後按一下「分析大小」。
請參閱下方的「產生大小檔案」以取得有關產生大小檔案的資訊。
樹狀圖和表格
#樹狀圖和表格會顯示應用程式大小的階層資料。
使用樹狀圖
#樹狀圖是階層資料的可視化呈現。空間會被分成矩形,每個矩形的大小和順序會依據某些量化變數(在此案例中為大小,以位元組為單位)。每個矩形的面積與節點在編譯後應用程式中所佔的大小成正比。在每個矩形(稱為 A)內部,還有一些矩形存在於資料階層中更深的一層(A 的子節點)。
若要向下鑽研樹狀圖中的儲存格,請選取該儲存格。這會重新定位樹狀圖,使選取的儲存格成為樹狀圖的視覺根節點。
若要向後或向上導覽一層,請使用樹狀圖頂端的麵包屑導覽器。
支配樹和呼叫圖
#頁面上的這個區段會顯示程式碼大小歸因資料(例如,為什麼程式碼片段會包含在編譯後的應用程式中)。此資料會以主導者樹狀圖和呼叫圖的形式顯示。
使用主導者樹狀圖
#主導者樹狀圖是一棵樹,其中每個節點的子節點都是它立即主導的節點。如果每個到達 `b` 的路徑都必須經過 `a`,則稱節點 `a`「主導」節點 `b`。
若要將其放入應用程式大小分析的背景,假設 `package:a` 同時匯入 `package:b` 和 `package:c`,且 `package:b` 和 `package:c` 都匯入 `package:d`。
package:a
|__ package:b
| |__ package:d
|__ package:c
|__ package:d
在此範例中,`package:a` 主導 `package:d`,因此此資料的主導者樹狀圖會如下所示:
package:a
|__ package:b
|__ package:c
|__ package:d
這項資訊有助於了解為什麼某些程式碼片段會存在於編譯後的應用程式中。例如,如果您正在分析應用程式大小,並發現編譯後的應用程式中包含未預期的套件,您可以使用主導者樹狀圖將套件追溯到其根來源。
使用呼叫圖
#在協助您了解程式碼為何存在於編譯後的應用程式中這方面,呼叫圖會提供與主導者樹狀圖類似的資訊。但是,呼叫圖顯示程式碼大小資料節點之間存在的多對多關係,而不是像主導者樹狀圖那樣顯示程式碼大小資料節點之間一對多的主導關係。
同樣使用以下範例:
package:a
|__ package:b
| |__ package:d
|__ package:c
|__ package:d
此資料的呼叫圖會將 `package:d` 連結到其直接呼叫者 `package:b` 和 `package:c`,而不是其「主導者」`package:a`。
package:a --> package:b -->
package:d
package:a --> package:c -->
這項資訊有助於了解程式碼片段(套件、程式庫、類別、函式)之間的細微相依性。
我應該使用主導者樹狀圖還是呼叫圖?
#如果您想了解程式碼片段為何包含在應用程式中的根本原因,請使用主導者樹狀圖。如果您想了解程式碼片段的所有呼叫路徑,請使用呼叫圖。
主導者樹狀圖是呼叫圖資料的分析或切片,其中節點由「主導」而非父子階層連結。在父節點主導子節點的情況下,呼叫圖和主導者樹狀圖中的關係會相同,但情況並非總是如此。
在呼叫圖完整(每對節點之間都存在邊)的情況下,主導者樹狀圖會顯示 `root` 是圖中每個節點的主導者。這是一個範例,說明呼叫圖可以讓您更好地了解程式碼片段為何包含在應用程式中。
差異索引標籤
#「差異」分頁可讓您比較大小資訊的兩個快照。您要比較的兩個大小資訊檔案應從同一應用程式的兩個不同版本產生;例如,在變更程式碼前後產生的大小檔案。您可以使用樹狀圖和表格將兩個資料集之間的差異視覺化。
載入大小檔案
#當您開啟「差異」分頁時,會看到載入「舊」和「新」大小檔案的指示。同樣地,這些檔案需要從同一應用程式產生。將這些檔案拖放到各自的對話方塊中,然後按一下「分析差異」。
請參閱下方的「產生大小檔案」以取得有關產生這些檔案的資訊。
樹狀圖和表格
#在差異檢視中,樹狀圖和樹狀表格只會顯示兩個匯入的大小檔案之間不同的資料。
若要取得有關使用樹狀圖的問題,請參閱上方的「使用樹狀圖」。
產生大小檔案
#若要使用應用程式大小工具,您需要產生 Flutter 大小分析檔案。此檔案包含應用程式(原生程式碼、Dart 程式碼、資源、字型等)的完整大小資訊,您可以使用 `--analyze-size` 旗標產生此檔案。
flutter build <your target platform> --analyze-size
這會建置您的應用程式,在命令列中印出大小摘要,並印出一行說明您可以在哪裡找到大小分析檔案的文字。
flutter build apk --analyze-size --target-platform=android-arm64
...
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
app-release.apk (total compressed) 6 MB
...
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
A summary of your APK analysis can be found at: build/apk-code-size-analysis_01.json
在此範例中,將 `build/apk-code-size-analysis_01.json` 檔案匯入應用程式大小工具以進行進一步分析。如需詳細資訊,請參閱「應用程式大小文件」。
其他資源
#若要了解如何使用 DevTools 對 Wonderous 應用程式執行逐步大小分析,請查看「應用程式大小工具教學」。本文也會討論各種縮減應用程式大小的策略。
除非另有說明,否則本網站上的文件反映 Flutter 的最新穩定版本。頁面上次更新時間為 2024-06-20。 檢視來源 或回報問題。