設有 config_data() 的產品專屬設定

有時某個元件是在一個存放區中定義,但其資料是在 另一個存放區舉例來說,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_pkgsubdir 使用適當的值即可轉送 再將測試資料傳送至測試元件

config_data() 的運作方式

建構設定中定義的所有 config_data() 目標會收集 並將相關檔案納入名為 config-data 的單一套件中。這個套件已定義 作為基本套件集一部分的系統組件中。這項內容的內容 套件會複製 config_data() 定義中的參數 能以子目錄的形式轉送至預期這些元件的元件。

已知問題

  • config-data 套件會收集 config_data() 中的所有檔案 定義是基本套件的一部分因此,其內容 未在 fx serve 開發人員工作流程中更新。如要更新資料檔案 必須重新修復裝置或執行 OTA,或者使用模擬器重建系統時 並重新啟動模擬器

  • 定義 config_data() 時也需要變更元件資訊清單 檔案,如上所示某些使用的字串會在多個 且容易出錯如果犯錯,可能並不容易 來排解問題

  • config_data() 個目標定義知道套件名稱 預期會使用這些資料的部分元件這麼做會宣揚賄賂 且難以改進。例如 向平台提供 ICU 資料至樹狀結構外元件 測試時 樹狀結構外套件名稱的硬式編碼清單, Fuchsia 來源樹狀結構。

由於上述問題,建議使用 配置機制