產品設定封裝了一組必要的套件和元件
在基礎硬體上支援目標使用者體驗每項產品
設定會宣告其預設套件清單使用其 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 軟體,這表示測試程式碼時會牽涉到 步驟如下:
- 使用任何程式碼變更建構更新後的套件。
- 將更新過的套件發布至套件存放區。
- 在目標裝置上觸發更新。
開發人員工具 (例如 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
重新啟動模擬器
執行下列指令,關閉現有的所有模擬器執行個體 開啟:
ffx emu stop --all
啟動新的模擬器執行個體:
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 打造的客製化產品!