產品套件

產品設定封裝了一組必要的套件和元件 在基礎硬體上支援目標使用者體驗每項產品 設定會宣告其預設套件清單使用其 GN 標籤, GN 匯入 (.gni) 檔案。您可以擴增目前版本的內容 以不同方式實作

依附元件集

系統會將建構設定中的套件指派給三個依附元件集的其中一個:

  • Base:系統映像檔中隨附的系統重要套件。底座 套件一律會解析為系統映像檔中的版本,即使 套件存放區中提供的版本不同更新基礎 套件需要更新系統 (OTA)。
  • 快取:系統映像檔隨附的其他套件。快取套件 如果可以使用其他版本,則會從套件存放區更新。
  • 宇宙:所有其他項目。這組套件只能透過 並視需求提供套件存放區

這張圖表顯示套件如何在基礎、快取或反向依附元件中運作
一組不同的建構設定這項設定會決定新版本的
套件已解決

以下提供產品設定檔的程式碼片段範例。這項產品 繼承 core 產品中定義的所有套件,然後新增 每個依附元件集的幾個額外套件:

import("//products/core.gni")

legacy_base_package_labels += [
  "//src/chromium:web_engine",
  "//src/fonts",
]

legacy_cache_package_labels += [
  "//src/media/playback/bundles:services",
]

discoverable_package_labels += [
  "//src/ui/examples:bouncing_ball",
]

在此範例中,建構系統會套件執行階段、資源 複製到目標裝置的磁碟映像檔中這些範例只有 從套件伺服器中選取

手動建構自訂項目

建立新的完整產品設定並非自訂內容的唯一方式 建構過程您也可以使用以下項目為 fx set 指令提供其他標籤: 這些旗標

  • --with:為整個依附元件集新增目標標籤。
  • --with-base:為基礎依附元件集新增目標標籤。
  • --with-cache:將目標標籤新增至快取依附元件集。

對於不需要的開發,這是暫時啟用套件的好方法 例如測試等最終建構目標舉例來說, 下列指令會將 Fuchsia tests 組合中的所有套件新增到 標準 workstation_eng 版本

fx set workstation_eng.x64 --with //bundles/tests
敬上

使用套件進行開發

回想一下 Fuchsia 套件並未「安裝」連結裝置 這些容器會從本機套件快取或套件存放區「解析」。時間 開發 Fuchsia 軟體,這表示測試程式碼時會牽涉到 步驟如下:

  1. 使用任何程式碼變更建構更新後的套件。
  2. 將更新過的套件發布至套件存放區。
  3. 在目標裝置上觸發更新。

這張圖表顯示開發期間,開發人員工具發布套件的方式
至 TUF 存放區,可通知 Fuchsia 裝置解決
版本。

開發人員工具 (例如 fx build) 會將套件更新發布至本機套件 將存放區做為建構程序的一部分其中資料的依附元件集 產品宣告套件會決定如何觸發目標的更新作業 裝置:

  • 基本套件只能透過執行完整系統更新 (OTA) 的方式更新。 使用 fx ota 觸發系統更新,或是在 更新基本套件。
  • 快取和反向套件會在下次套件時自動更新 問題已解決。

練習:自訂版本

在本練習中,您將暫時自訂 workstation_eng 建構作業 納入宇宙套件組合中的其他套件,使 專屬於您的來源裝置

將套件新增至建構作業

您可以透過 fx set--with 標記。重新設定 workstation_eng 版本,將以下項目納入其中: Fuchsia 範例:

fx set workstation_eng.x64 --with //examples

這通常用於包含您需要在裝置上執行的測試套件,或 產品尚未包含你正在開發的新套件 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

確認範例套件已新增至建構作業:

fx list-packages example
敬上

使用 GN 探索建構目標

GN 具有一組強大的診斷工具 您在建構作業中設定的目標跟著說明,瞭解如何使用 fx gn 來探索建構目標

請先使用 desc 指令輸出 //examples 的相關詳細資料 先前新增到建構作業的套件

fx gn desc out/default //examples

這個指令會顯示目標類型及其所有依附元件的詳細資料。適用對象 //examples 套件,依附元件清單代表個別 範例套件已新增至建構作業。

使用相同指令探索 hello-world 目標的詳細資料。

fx gn desc out/default //examples/hello_world:hello-world

這個目標代表包含多個元件套件,因此 會看到元件資訊清單和套件等其他依附元件 中繼資料。

再往下一層即可探索 hello-world-rust 元件。

fx gn desc out/default //examples/hello_world/rust:hello-world-rust-component

從特定目標的角度,例如 hello-world-rust 元件中,您也可以使用 refs 指令在建構圖表中向上查詢。 這會回報對指定目標的連入參照。

fx gn refs out/default //examples/hello_world/rust:hello-world-rust-component

最後,使用 path 指令回報任兩份之間的參照鏈 目標。這有助於您決定納入目標的位置和方式 在您的目標與 //:default

fx gn path out/default //:default //examples/hello_world:hello-world

在模擬器中執行範例

再次執行 fx build,建構更新後的套件:

fx build

請使用 ffx component 指令執行 Hello World 元件範例:

ffx component run /core/ffx-laboratory:hello-world-cpp fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm

開啟新的終端機視窗,並篩選裝置記錄,找出來自 範例:

ffx log --filter hello

您應該會在裝置記錄中看到下列輸出內容:

[hello-world-cpp][I] Hello, World!

練習:建立新的建築產品

在下一個練習中,您會將這些額外套件封裝至新的 擴充 workstation_eng 的產品設定

宣告產品設定

//vendor 下建立名為 fuchsia-codelab 的新目錄:

mkdir -p vendor/fuchsia-codelab

在「//vendor/fuchsia-codelab/products」底下建立新檔案「fuchsialab.gni」 包含下列內容:

# Extend the workstation_eng product
import("//products/workstation_eng.gni")

這會建立名為 fuchsialab 的新產品,並擴充 workstation_eng。 來沿用其定義的所有套件標籤

請確認建構系統能產品 fx list-products 指令。產品清單中會顯示 fuchsialab

fx list-products

新增產品套件

如要自訂產品隨附的特定套件,請將這些套件新增至 產品設定中的適當套件標籤。

//vendor/fuchsia-codelab/products/fuchsialab.gni 中加入下列幾行內容 在自訂產品中加入 Hello World 範例:

discoverable_package_labels += [
    "//examples/hello_world",
]
敬上

打造新產品

重新設定 fuchsialab 產品的版本,在 FEMU 遊戲板上運作:

fx set fuchsialab.x64

確認 Hello World 範例套件現已包含在建構中:

fx list-packages hello

執行 fx build 來為自訂產品產生新的映像檔:

fx build

重新啟動模擬器

  1. 執行下列指令,關閉現有的所有模擬器執行個體 開啟:

    ffx emu stop --all
  2. 啟動新的模擬器執行個體:

    ffx emu start --headless

    啟動完成後,模擬器會顯示下列訊息並 會傳回:

    Logging to "$HOME/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log"
    Waiting for Fuchsia to start (up to 60 seconds)........
    Emulator is ready.
    

檢查裝置

開啟另一個終端機視窗,並執行下列指令來顯示詳細資料 :

ffx target show

尋找目標輸出內容的建構設定:

Version: "2000-01-01T12:00:00+00:00"
Product: "fuchsialab"
Board: "x64"
Commit: "2000-01-01T12:00:00+00:00"

恭喜!您剛根據 Fuchsia 打造的客製化產品!