有時某個元件是在一個存放區中定義,但其資料是在
另一個存放區舉例來說,fuchsia.git
定義了字型提供者服務。
但 workstation_eng
產品設定 (在其他存放區中定義)
定義字型供應程式可用的字型。
config_data()
範本可讓開發人員將檔案提供給
其他套件中的元件,而不必直接變更內容
該套件的映像檔版本
import("//build/config.gni")
config_data("workstation_fonts") {
for_pkg = "fonts"
sources = [
"RobotoMono-Light.ttf",
"RobotoMono-Medium.ttf",
"RobotoMono-Regular.ttf",
]
outputs = [ "fonts/{{source_file_part}}" ]
}
在元件中使用 config_data()
在元件資訊清單 (.cml
) 檔案中加入以下內容:
{
use: [
{
directory: "config-data",
rights: [ "r*" ],
path: "/config/data",
},
],
}
在執行階段,您的元件將可讀取路徑的設定檔
/config/data
。
您必須向元件提供 "config-data"
,上述指令才能正常運作。
舉例來說,您的父項可能會擁有如下所示的宣告:
{
children: [
{
name: "font-provider",
url: "fuchsia-pkg://fuchsia.com/fonts#meta/font-provider.cm",
},
],
offer: [
{
directory: "config-data",
from: "parent",
to: [ "#font-provider" ],
subdir: "fonts",
},
],
}
請注意,上述的 for_pkg = ...
和 subdir: ...
是互相協調的
他們設定了相同的值 "fonts"
。
正在測試 config_data()
在測試領域中受測試的元件可擁有 "config-data"
目錄
轉送至該元件的方式與正式版元件大致相同。
如果要以測試不同設定資料來提供元件,
只對 for_pkg
和 subdir
使用適當的值即可轉送
再將測試資料傳送至測試元件
config_data()
的運作方式
建構設定中定義的所有 config_data()
目標會收集
並將相關檔案納入名為 config-data
的單一套件中。這個套件已定義
作為基本套件集一部分的系統組件中。這項內容的內容
套件會複製 config_data()
定義中的參數
能以子目錄的形式轉送至預期這些元件的元件。
已知問題
config-data
套件會收集config_data()
中的所有檔案 定義是基本套件的一部分因此,其內容 未在fx serve
開發人員工作流程中更新。如要更新資料檔案 必須重新修復裝置或執行 OTA,或者使用模擬器重建系統時 並重新啟動模擬器定義
config_data()
時也需要變更元件資訊清單 檔案,如上所示某些使用的字串會在多個 且容易出錯如果犯錯,可能並不容易 來排解問題config_data()
個目標定義知道套件名稱 預期會使用這些資料的部分元件這麼做會宣揚賄賂 且難以改進。例如 向平台提供 ICU 資料至樹狀結構外元件 測試時 樹狀結構外套件名稱的硬式編碼清單, Fuchsia 來源樹狀結構。
由於上述問題,建議使用 配置機制。