設定功能

設定功能可讓元件定義、轉送及使用設定值。使用設定能力的元件會看到該值出現在其結構化設定中。

定義設定功能

如要定義設定能力,元件必須為其新增 capabilities 宣告:

{
    capabilities: [
        {
            config: "fuchsia.config.MyBool",
            type: "bool",
            value: true,
        },
    ],
}

這會定義 bool 類型的能力 fuchsia.config.MyBool,其值為 true。如要進一步瞭解 typevalue 支援的欄位,請參閱功能參考資料

轉送設定功能

元件會將設定功能exposing給父項,或提供至其子項,藉此轉送設定功能。

如要進一步瞭解架構路徑元件功能,請參閱「功能轉送」。

公開

公開設定能力可讓元件的父項存取該能力:

{
    expose: [
        {
            config: "fuchsia.config.MyBool",
            from: "self",
        },
    ],
}

您可以選擇指定:

提供

提供設定能力可讓子項元件存取該能力:

{
    offer: [
        {
            config: "fuchsia.config.MyBool",
            from: "parent",
            to: [ "#child-a", "#child-b" ],
        },
    ],
}

您可以選擇指定:

使用設定功能

如要使用設定能力,元件必須新增 use 定義,將能力連結至結構化設定值。然後,此元件將能夠在執行階段讀取其結構化設定,進而瞭解能力的值。

假設元件的結構如下: json5 { config: { say_hello: { type: "bool" }, }, }

如要使用設定能力,請為該功能新增 use 宣告:

{
    use: [
        {
            config: "fuchsia.config.MyBool",
            key: "say_hello",
            from: "parent",
        },
    ],
}

當元件讀取其結構化設定的 say_hello 欄位時,該元件會接收 fuchsia.config.MyBool 的值。

您可以選擇指定:

重新命名

您可以透過不同的名稱來 exposeoffer 能力:

{
    offer: [
        {
            config: "fuchsia.config.MyBool",
            from: "#child-a",
            to: [ "#child-b" ],
            as: "fuchsia.childB.SayHello",
        },
    ],
}

設定類型

設定值支援的類型有很多。

無正負號整數具有下列類型:

  • uint8
  • uint16
  • uint32
  • uint64

帶正負號整數具有下列類型:

  • int8
  • int16
  • int32
  • int64

有支援 truefalse 值的 bool 類型。

設定為 string 類型,因此除了字串值外,也必須設定 max_size

字串範例:

{
    capabilities: [
        {
            config: "fuchsia.config.MyString",
            type: "string",
            max_size: 100,
            value: "test",
        },
    ]
}

vector 類型,該類型必須包含 typeelement 欄位。向量可包含向量以外的所有其他類型。

向量範例:

{
    capabilities: [
        {
            config: "fuchsia.config.MyUint8Vector",
            type: "vector",
            element: { type: "uint8" },
            max_count: 100,
            value: [1, 2, 3 ],
        },
        {
            config: "fuchsia.config.MyStringVector",
            type: "vector",
            element: {
                type: "string",
                max_size: 100,
            },
            max_count: 100,
            value: [
                "Hello",
                "World!",
            ],
        },
    ],
}

選用轉送

設定功能的 UseOfferExpose 支援可用性。這表示元件可以 optionally 使用設定能力。詳情請參閱使用選用功能一文

解決路線和無效路線

系統會在元件啟動時,將結構化設定值提供給元件。這表示元件架構必須在啟動元件之前解析設定功能的所有路徑。

這個副作用表示元件架構無法啟動具有設定能力的「毀損路徑」(路徑未成功結束於能力定義) 的元件。舉例來說,如果您要求 fuchsai.config.MyBool,但家長未提供這項服務,就無法啟動。這與其他功能不同,在執行階段發現元件可能不存在。

正在更新設定值

由於設定值會在元件啟動時交給元件,因此如果能力路徑在元件執行期間發生變更,元件就不會看到任何更新。

如要啟動具有不同設定的元件,系統必須發生以下情況:

1) 更新提供設定功能能力的 CML (可能透過重新解決問題)。 2) 停止再啟動採用設定容量的元件。