元件資訊清單 (.cml) 參考資料

.cml 檔案包含一個內含下列索引鍵的 json5 物件常值。

在預期字串值的情況下,通常會記錄有效值的清單。下列字串值類型會重複使用,且必須符合特定規則。

.cml 檔案已編譯為 FIDL 線路格式 (.cm) 檔案。

字串類型

名稱

功能和元件的子項都會命名。名稱字串可能包含下列一或多個字元:A-Za-z0-9_.-。長度不得超過 255 個字元,且開頭不得為 .-

路徑

路徑是一串 [names]{#names} 的序列,並以 / 字元分隔。路徑長度不得超過 4095 個字元。在整份文件中

  • 相對路徑的開頭不得為 / 字元。
  • 命名空間和傳出目錄路徑的開頭必須為 / 字元。

參考資料

參照字串採用 #<name> 的形式,其中 <name> 是指子項的名稱:

頂層索引鍵

include

string 的陣列 (選填)

選用的 include 屬性描述了零或多個要合併至此元件資訊清單的元件資訊清單檔案。例如:

include: [ "syslog/client.shard.cml" ]

在上述範例中,元件資訊清單包含 syslog 程式庫提供的資訊清單資料分割內容,以確保元件在嘗試寫入 syslog 時,能在執行階段正確運作。這類檔案稱為「資訊清單資料分割」,結尾則是 .shard.cml

加入前面加上 // 的路徑與 Fuchsia 結帳的來源根的關聯性。不過,包含未附 // 的路徑 (如上例所示),系統會透過匯出元件資訊清單資料分割的 Fuchsia SDK 程式庫 (//sdk/lib) 解析這些路徑。

為參考,在 Fuchsia 結帳中,這兩個包含路徑相等:

  • syslog/client.shard.cml
  • //sdk/lib/syslog/client.shard.cml

您可以叫用下列指令,檢視將任一及所有 include 合併到元件資訊清單檔案的結果:

fx cmc include cml_file --includeroot $FUCHSIA_DIR --includepath $FUCHSIA_DIR/sdk/lib

包含可處理參照相同能力的重複的 useofferexposecapabilities 宣告,只要屬性相同即可。例如:

// my_component.cml
include: [ "syslog.client.shard.cml" ]
use: [
    {
        protocol: [
            "fuchsia.logger.LogSink",
            "fuchsia.posix.socket.Provider",
        ],
    },
],

// syslog.client.shard.cml
use: [
    { protocol: "fuchsia.logger.LogSink" },
],

在這個例子中,合併後檔案的內容會與 my_component.cml 相同 -- fuchsia.logger.LogSink 而刪除重複項目。

但無法編譯:

// my_component.cml
include: [ "syslog.client.shard.cml" ]
use: [
    {
        protocol: "fuchsia.logger.LogSink",
        // properties for fuchsia.logger.LogSink don't match
        from: "#archivist",
    },
],

// syslog.client.shard.cml
use: [
    { protocol: "fuchsia.logger.LogSink" },
],

這項限制的例外狀況是 availability 屬性。如果兩個轉送宣告相同,且其中一個可用性強度高於另一個,則供應情形會「促銷」為較高值 (如果缺少 availability,則預設為 required)。 例如:

// my_component.cml
include: [ "syslog.client.shard.cml" ]
use: [
    {
        protocol: [
            "fuchsia.logger.LogSink",
            "fuchsia.posix.socket.Provider",
        ],
        availability: "optional",
    },
],

// syslog.client.shard.cml
use: [
    {
        protocol: "fuchsia.logger.LogSink"
        availability: "required",  // This is the default
    },
],

轉換為:

use: [
    {
        protocol: "fuchsia.posix.socket.Provider",
        availability: "optional",
    },
    {
        protocol: "fuchsia.logger.LogSink",
        availability: "required",
    },
],

包含具有遞移性,也就是說,資料分割可以有自己的包含。

包含路徑可包含鑽石依附元件。舉例來說,A 包含 B、A 包含 C、B 包含 D、C 包含 D。在此情況下,A 將連帶包含 B、C、D。

「包含」路徑不得包含週期。舉例來說,這無效:A 包含 B、B 包含 A。上述循環等循環會導致編譯時間錯誤。

disable

object (選用)

disable 區段會停用特定 CML 中的某些功能 (以 cmc 強制執行)。

  • must_offer_protocol:(選用陣列 string) 列出停用「-- must-offer-protocol」選項的通訊協定。
  • must_use_protocol:(選用陣列 string) 列出停用「-- must-use-protocol」選項的通訊協定。

例子:

disable: {
    must_offer_protocol: [ "fuchsia.logger.LogSink", "fuchsia.component.Binder" ],
    must_use_protocol: [ "fuchsia.logger.LogSink" ],
}

program

object (選用)

可執行檔包含 program 區段。program 區段必須設定 runner 屬性,才能選取runner來執行元件。program 區段的其餘格式取決於該特定執行元件。

ELF 跑者

如果元件使用 ELF 執行元件,則 program 至少必須包含下列屬性:

  • runner:必須設為 "elf"
  • binary:可執行二進位檔的套件相對路徑
  • args (選用):引數清單

例子:

program: {
    runner: "elf",
    binary: "bin/hippo",
    args: [ "Hello", "hippos!" ],
},

如需完整的屬性清單,請參閱:ELF Runner

其他跑者

如果元件使用自訂執行元件,則 runner 以外的 program 片段內的值會專屬於執行元件。執行器會接收引數做為鍵/值組合的字典。請查看您使用的特定執行元件,確定其預期接收的鍵,以及該執行器如何解讀這些鍵。

children

object 的陣列 (選填)

children 區段會宣告子項元件執行個體,如子項元件執行個體中所述。

  • name:(string) 子項元件執行個體的名稱,為下列一或多個字元的字串:a-z0-9_.-。如在參照中使用,名稱可識別這個元件。
  • url:(string) 子項元件執行個體的元件網址
  • startup:(string) 元件執行個體的啟動模式。以下其中之一:
    • lazy (預設):只有在其他元件執行個體繫結時,才啟動元件執行個體。
    • eager:在父項執行個體啟動時,立即啟動元件執行個體。
  • on_terminate:(選用string) 決定此元件終止時要套用的錯誤復原政策。
    • none (預設):不執行任何動作。
    • reboot:如果元件因任何原因終止,請妥善重新啟動系統。這項特殊功能僅適用於少數元件;詳情請參閱終止政策
  • environment:(非必要string) 如果有要指派給子項元件執行個體的環境名稱,可以是 environments 其中一個。如果省略,子項會繼承指派給此元件的相同環境。

例子:

children: [
    {
        name: "logger",
        url: "fuchsia-pkg://fuchsia.com/logger#logger.cm",
    },
    {
        name: "pkg_cache",
        url: "fuchsia-pkg://fuchsia.com/pkg_cache#meta/pkg_cache.cm",
        startup: "eager",
    },
    {
        name: "child",
        url: "#meta/child.cm",
    }
],

collections

object 的陣列 (選填)

collections 區段會依照元件集合中所述的方式宣告集合。

  • name:(string) 元件集合的名稱,是由下列一或多個字元的字串:a-z0-9_.-。在參照中使用時,名稱可用來識別這個集合。
  • durability:(string) 集合中的子元件執行個體時間長度。
    • transient:例項會存在,直到其父項停止或已明確刪除為止。
    • single_run:執行個體會在建立時啟動,並在停止時刪除。
  • environment:(非必要string) 如果有此集合,系統會將這個環境指派給這個集合中的執行個體,可能是 environments 之一。如果省略此引數,這個集合中的執行個體會繼承指派給此元件的相同環境。
  • allowed_offers:(選用string) 針對此集合中元件的動態優惠設有限制。呼叫 fuchsia.component.Realm/CreateChild 時,會指定動態優惠。
    • static_only:僅限這個 .cml 檔案中指定的項目。沒有任何動態優惠。此為預設值。
    • static_and_dynamic:允許靜態優惠和在執行階段透過 CreateChild 指定的產品。
  • allow_long_names:(選用 bool) 子名稱長度上限為 1024 個字元,而非平常的 255 個字元。 預設值為 false。
  • persistent_storage:(非必要bool) 如果設為 true,動態子項執行個體及其子系所使用的資料在刪除後仍會保留。以相同名稱建立的新子項執行個體會共用與之前執行個體相同的儲存空間路徑。

例子:

collections: [
    {
        name: "tests",
        durability: "transient",
    },
],

environments

object 的陣列 (選填)

environments 區段會宣告環境中所述的環境。

  • name:(string) 環境的名稱,為下列一或多個字元的字串:a-z0-9_.-。在參照中使用該名稱可識別這個環境。
  • extends:(選用 string) 環境應如何擴充這個領域的環境。
    • realm:沿用此元件環境的所有屬性。
    • none:以空白環境開始,不沿用任何設定。
  • runners:(選用陣列 object) 在環境中註冊的執行器。具備下列屬性的物件陣列:

    • runner:(string) 執行元件能力的名稱,其來源已在 from 中指定。
    • from:(string) 執行元件能力的來源,下列其中一項:
      • parent:元件的父項。
      • self:這個元件。
      • #<child-name>:子項元件執行個體的參照
    • as:(非必要string) 執行元件的明確名稱,因為可在這個環境中得知。省略時,預設為 runner
  • resolvers:(選用陣列 object) 在環境中註冊的解析器。具備下列屬性的物件陣列:

    • resolver:(string) 解析器能力的名稱,其來源是在 from 中指定。
    • from:(string) 解析器能力的來源,可能是:
      • parent:元件的父項。
      • self:這個元件。
      • #<child-name>:子項元件執行個體的參照
    • scheme:(string) 解析器應處理解析度的網址配置。
  • debug:(選用陣列 object) 透過 use from debug 獲取此環境中任何元件可用的偵錯通訊協定。

    • protocol:(選用string or array of strings) 提供的通訊協定名稱。
    • from:(string) 能力的來源,下列其中一項:
      • parent:元件的父項。
      • self:這個元件。
      • #<child-name>:子項元件執行個體的參照
    • as:(非必要string) 如有指定,則 protocol 中的能力名稱應提供給用戶端。如果 protocol 是陣列,則不允許。
  • __stop_timeout_ms:(非必要number) 通知這個環境中的元件在通知應終止後,要延遲的等待毫秒數。如果環境從 none 擴充,則此為必要欄位。

例子:

environments: [
    {
        name: "test-env",
        extends: "realm",
        runners: [
            {
                runner: "gtest-runner",
                from: "#gtest",
            },
        ],
        resolvers: [
            {
                resolver: "full-resolver",
                from: "parent",
                scheme: "fuchsia-pkg",
            },
        ],
    },
],

capabilities

object 的陣列 (選填)

capabilities 部分定義了此元件提供的功能。您必須在此宣告從 self 提供公開的功能。

功能欄位

這支援下列能力鍵。必須僅設定下列其中一項:

  • protocol:(選用 string or array of strings)
  • service:(選用 string or array of strings)
  • directory:(選用 string)
  • storage:(選用 string)
  • runner:(選用 string)
  • resolver:(選用 string)
  • event_stream:(選用 string or array of strings)
  • dictionary:(選用 string)
  • config:(選用 string)

其他欄位

這項功能支援下列額外欄位:

  • path:(選用的 string) 元件程式傳出目錄中用來取得能力的路徑。

    如果是 protocolservice,預設為 /svc/${protocol},否則為必要。

    如果是 protocol,路徑的目標「必須」是管道,且通常會傳達與這項能力名稱相符的通訊協定。

    如果是 servicedirectory,路徑的目標必須是目錄。

    如果是 runner,路徑的目標必須是管道,且必須朗讀通訊協定 fuchsia.component.runner.ComponentRunner

    如果是 resolver,路徑的目標必須是管道,且必須朗讀通訊協定 fuchsia.component.resolution.Resolver

  • rights:(非必要array of string) (僅限 directory) 使用這個目錄時,可設定的最大目錄權限

  • from:(非必要string) (僅限 storage) 支援這個儲存空間能力的現有目錄能力來源元件,可執行以下其中一項:

    • parent:元件的父項。
    • self:這個元件。
    • #<child-name>:子項元件執行個體的參照
  • extends:(選用的 string) (僅限 dictionary,選用) 用來初始化字典的內容。以下其中之一:

    • parent/<relative_path>:前往 parent 提供的字典路徑。
    • #<child-name>/<relative_path>:由 #<child-name> 公開的字典路徑。
    • self/<relative_path>:此元件定義的字典路徑。
    • program/<relative_path>:此元件程式提供的字典路徑。 是程式傳出目錄中的 fuchsia.component.sandbox/DictionaryGetter 通訊協定路徑。<relative_path> 可以是名稱,用於識別字典能力,也可以是包含多個部分的路徑,用於識別巢狀字典。
  • backing_dir:(非必要string) (僅限 storage) 支援儲存空間的目錄能力的 名稱。此能力必須可從 from 參照的元件提供。

  • subdir:(選用的 string) (僅限 storage) backing_dir 中的子目錄,其中會建立每個元件的獨立儲存空間目錄

  • storage_id:(選用 string) (僅限 storage) 用來隔離元件儲存空間的 ID,可以是:

    • static_instance_id:元件 ID 索引中的執行個體 ID 做為元件儲存空間的索引鍵。未列在元件 ID 索引中的元件將無法使用這項儲存空間能力。
    • static_instance_id_or_moniker:如果元件列在元件 ID 索引中,系統會使用執行個體 ID 做為元件儲存空間的索引鍵。否則,則會使用儲存空間能力中的元件路徑名稱。
  • type:(選用 string) (僅限 configuration) 設定類型,可以是下列其中一種:

    • bool:布林值類型。
    • uint8:未簽署的 8 位元類型。
    • uint16:未簽署的 16 位元類型。
    • uint32:未簽署的 32 位元類型。
    • uint64:未簽署的 64 位元類型。
    • int8:已簽署的 8 位元類型。
    • int16:帶正負號的 16 位元類型。
    • int32:帶正負號的 32 位元類型。
    • int64:帶正負號的 64 位元類型。
    • string:ASCII 字串類型。
    • vector:向量類型。請參閱 element,瞭解向量內的元素類型。
  • max_size:(選用non-zero number) (僅限configuration) 只有在此設定type為「string」時才支援。 這是字串的大小上限。

  • max_count:(選用non-zero number) (configuration) 僅適用於「向量」設定type。 這是向量中的元素數量上限。

  • element:(選用object) (configuration) 僅適用於「向量」設定type。 這是設定向量中的元素類型。

    範例 (簡單類型):

    { type: "uint8" }
    

    範例 (字串類型):

    {
      type: "string",
      max_size: 100,
    }
    
  • value:(選用any) (僅限 configuration) 設定的值。

  • delivery:(非必要string) (僅限 protocol) 指定在有人要求能力時,架構會從這個元件的傳出目錄開啟通訊協定的時間。允許的值包括:

    • eager:(預設) 架構會在部分消費者元件要求時立即開啟這項能力。
    • on_readable:當連線要求中管道的伺服器端點變為可讀取時,這個架構會開啟能力。

use

object 的陣列 (選填)

對於可執行的元件,請在執行階段的命名空間中宣告該元件需要的功能。除非另有指定,否則功能會從 parent 轉送,且每項能力都必須具有通過這個元件和能力來源之間的所有元件有效的路徑。

功能欄位

這支援下列能力鍵。必須僅設定下列其中一項:

  • service:(選用 string or array of strings)
  • directory:(選用 string)
  • protocol:(選用 string or array of strings)
  • dictionary:(選用 string)
  • storage:(選用 string)
  • event_stream:(選用 string or array of strings)
  • runner:(選用 string)
  • config:(選用 string)

其他欄位

這項功能支援下列額外欄位:

  • from:(選用 string) 能力的來源。預設值為 parent。以下其中之一:
    • parent:元件的父項。
    • debug:環境中指派給這個元件的其中一個 debug_capabilities
    • framework:元件架構執行階段。
    • self:這個元件。
    • #<capability-name>:另一個能力的名稱。
    • #<child-name>:子項元件執行個體的參照
  • path:(選用 string) 在元件的命名空間中安裝能力的路徑。如為通訊協定,則預設值為 /svc/${protocol}。對 directorystorage 為必要欄位。這個屬性不允許使用包含能力名稱陣列的宣告,也不允許用於執行元件功能。
  • rights:(選用array of string) (僅限 directory) 套用至元件命名空間中目錄的最大目錄權限
  • subdir:(非必要的 string) (僅限 directory) 目錄能力中的子目錄,用於元件的命名空間。
  • scope:(選用的 string or array of strings) (僅限 event_stream) 定義事件串流時,只會包含範圍內定義的元件相關事件。
  • filter:(選擇性object) (event_stream)篩選器的內容會是從「name」到「通訊協定名稱」的物件。
  • dependency:(選用的 string) 來源與此元件之間的依附元件類型,屬於以下其中一種:
    • strong:強大的依附元件,用於判斷關閉順序。元件管理員保證會在來源之前停止目標。此為預設值。
    • weak:弱依附元件,系統會在關閉期間忽略這個依附元件。當元件管理員停止父項領域時,來源可能會在用戶端之前停止。弱依附元件的用戶端必須能夠處理這些依附元件無法使用的情況。這個屬性不適用於執行元件功能,執行者一律為 strong 依附元件。
  • availability:(選用 string) 對這項能力可用性的期望。以下其中之一:

    • required (預設):必要依附元件,元件需要這項能力才能執行其工作。
    • optional:非必要的依附元件,元件即使沒有此能力,也能正常運作 (不過,如果無法使用部分功能,可能會遭到停用)。
    • transitional:來源可能會完全省略路徑,甚至不需要從 void 轉送。用於導入新功能的軟性轉場效果。這個屬性不允許使用的執行元件功能一律為 required

    詳情請參閱 [availability][/docs/concepts/components/v2/abilities/availability.md] 說明文件。

  • key:(選用的 string) (僅限 config) 在元件的 config 區塊中,會設定這項能力的設定金鑰。

  • type:(選用 string) (僅限 config) 設定類型,可以是下列其中一種:

    • bool:布林值類型。
    • uint8:未簽署的 8 位元類型。
    • uint16:未簽署的 16 位元類型。
    • uint32:未簽署的 32 位元類型。
    • uint64:未簽署的 64 位元類型。
    • int8:已簽署的 8 位元類型。
    • int16:帶正負號的 16 位元類型。
    • int32:帶正負號的 32 位元類型。
    • int64:帶正負號的 64 位元類型。
    • string:ASCII 字串類型。
    • vector:向量類型。請參閱 element,瞭解向量內的元素類型
  • max_size:(選用non-zero number) (僅限configuration) 只有在此設定type為「string」時才支援。 這是字串的大小上限。

  • max_count:(選用non-zero number) (configuration) 僅適用於「向量」設定type。 這是向量中的元素數量上限。

  • element:(選用object) (configuration) 僅適用於「向量」設定type。 這是設定向量中的元素類型。

    範例 (簡單類型):

    { type: "uint8" }
    

    範例 (字串類型):

    {
      type: "string",
      max_size: 100,
    }
    
  • default:(選用 any) (僅限 configuration) 此設定的預設值。如果能力為選用功能並從 void 轉送,則會使用預設值。只有 availability 不是 required 時才支援這個屬性。

例子:

use: [
    {
        protocol: [
            "fuchsia.ui.scenic.Scenic",
            "fuchsia.accessibility.Manager",
        ]
    },
    {
        directory: "themes",
        path: "/data/themes",
        rights: [ "r*" ],
    },
    {
        storage: "persistent",
        path: "/data",
    },
    {
        event_stream: [
            "started",
            "stopped",
        ],
        from: "framework",
    },
    {
        runner: "own_test_runner".
        from: "#test_runner",
    },
],

expose

object 的陣列 (選填)

宣告可供父項元件或架構使用的功能。這對 self 或子元件而言是有效的 expose

功能欄位

這支援下列能力鍵。必須僅設定下列其中一項:

  • service:(選用 string or array of strings)
  • protocol:(選用 string or array of strings)
  • directory:(選用 string)
  • runner:(選用 string)
  • resolver:(選用 string)
  • dictionary:(選用 string)
  • config:(選用 string)

其他欄位

這項功能支援下列額外欄位:

  • from:(string or array of strings) from:能力的來源,可以是下列其中一種:
    • self:這個元件。需要對應的 capability 宣告。
    • framework:元件架構執行階段。
    • #<child-name>:子項元件執行個體的參照
  • as:(選用 string) 目標所知道的能力名稱如果省略此屬性,系統會預設為原始名稱。如果提供多個能力名稱的陣列,就無法使用 as
  • to:(選用 string) 能力目標。parentframework。預設為 parent
  • rights:(選用的 array of string) (僅限 directory) 要套用至公開目錄能力的最大目錄權限
  • subdir:(非必要string) (僅限 directory) 來源目錄能力內子目錄的相對路徑。
  • event_stream:(選用string or array of strings) (僅限 event_stream) 所公開事件串流的名稱。
  • scope:(選用string or array of strings) (僅限 event_stream) 已公開事件串流的範圍。用於縮小事件串流參照的元件範圍範圍,使其僅參照範圍內定義的元件。
  • availability:(選用 string) availability (選用):此能力的可用性要求。會影響建構時間和執行階段路徑驗證。以下其中之一:

    • required (預設):必要依附元件;來源必須存在並提供內容。如果此公開的目標需要這項能力正常運作,請使用此方法。
    • optional:選用依附元件。如果公開目標可在具備或沒有這項能力的情況下運作,請使用此方法。目標不應對能力具有 required 依附元件。這個公開內容的最終來源必須是 void 或實際元件。
    • same_as_target:此能力的可用性預期與目標相符。如果目標需要能力,這個欄位會設為 required。如果目標對能力提供選用依附元件,則欄位會設為 optional
    • transitional:類似 optional,但可容許缺少來源。請只使用這個方法,避免在多步驟程式碼變更的過渡期間出現驗證錯誤。

    詳情請參閱 [availability][/docs/concepts/components/v2/abilities/availability.md] 說明文件。

  • source_availability:(選擇性 string) 此優惠的來源是否存在。以下其中之一:

    • required (預設):必須在這個資訊清單中定義來源 (from)。
    • unknown:如果 include 處理後,未在此資訊清單中定義其來源 (from),此優惠的來源會改寫為 void

例子:

expose: [
    {
        directory: "themes",
        from: "self",
    },
    {
        protocol: "pkg.Cache",
        from: "#pkg_cache",
        as: "fuchsia.pkg.PackageCache",
    },
    {
        protocol: [
            "fuchsia.ui.app.ViewProvider",
            "fuchsia.fonts.Provider",
        ],
        from: "self",
    },
    {
        runner: "web-chromium",
        from: "#web_runner",
        as: "web",
    },
    {
        resolver: "full-resolver",
        from: "#full-resolver",
    },
],

offer

object 的陣列 (選填)

宣告子元件執行個體或子項集合可用的功能。

功能欄位

這支援下列能力鍵。必須僅設定下列其中一項:

  • protocol:(選用 string or array of strings)
  • service:(選用 string or array of strings)
  • directory:(選用 string)
  • storage:(選用 string)
  • runner:(選用 string)
  • resolver:(選用 string)
  • event_stream:(選用 string or array of strings)
  • dictionary:(選用 string)
  • config:(選用 string)

其他欄位

這項功能支援下列額外欄位:

  • service:(選用 string or array of strings) 轉送服務時,請提供服務功能的「名稱」
  • protocol:(選用string or array of strings) 轉送通訊協定時,名稱通訊協定功能
  • directory:(選用 string or array of strings) 轉送目錄時,名稱目錄功能目錄功能
  • runner:(選用string or array of strings) 轉送執行元件時,名稱名稱執行者功能
  • resolver:(選用的 string or array of strings) 轉送解析器時,是解析器功能名稱
  • storage:(選用 string or array of strings) 轉送儲存空間能力時,會顯示儲存空間功能的「名稱」
  • dictionary:(選用 string or array of strings) 轉送字典時,感應器的「名稱」
  • config:(選用 string or array of strings) 轉送設定時,設定能力的名稱名稱。
  • from:(string or array of strings) from:能力的來源,可以是下列其中一種:
    • parent:元件的父項。這個來源可用於所有能力類型。
    • self:這個元件。需要對應的 capability 宣告。
    • framework:元件架構執行階段。
    • #<child-name>:子項元件執行個體的參照。只有在提供通訊協定、目錄或執行元件功能時才能使用這個來源。
    • void:刻意省略來源。只有在 availabilityoptionaltransitional 時才會生效。
  • to:(string or array of strings) 功能目標。以下其中之一:
    • #<target-name> 或 [#name1, ...]:子集合或集合的參照,或參照陣列。
    • alloffer 子句包含所有子項references的簡寫。
  • as:(選用string) 明確的名稱名稱,因為目標將知道能力。如果省略此屬性,系統會預設為原始名稱。如果提供多個名稱的陣列,就無法使用 as
  • dependency:(非必要string) 來源與目標之間的依附元件類型,可為下列其中一個值:
    • strong:強大的依附元件,用於判斷關閉順序。元件管理員保證會在來源之前停止目標。此為預設值。
    • weak:弱依附元件,系統會在關閉期間忽略這個依附元件。當元件管理員停止父項領域時,來源可能會在用戶端之前停止。弱依附元件的用戶端必須能夠處理無法使用的依附元件。
  • rights:(非必要array of string) (僅限 directory) 套用至所提供目錄能力的最大目錄權限
  • subdir:(非必要string) (僅限 directory) 來源目錄能力內子目錄的相對路徑。
  • event_stream:(選用string or array of strings) (僅限 event_stream) 提供的事件串流名稱。
  • scope:(選用的 string or array of strings) (僅限 event_stream) 定義事件串流時,只會包含範圍內定義的元件相關事件。
  • availability:(選用 string) availability (選用):此能力的可用性要求。會影響建構時間和執行階段路徑驗證。以下其中之一:

    • required (預設):必要依附元件;來源必須存在並提供內容。如果這項優惠的目標需要這項能力才能正常運作,請使用此方法。
    • optional:選用依附元件。如果優惠目標支援或不需要這項能力,請使用這個選項。目標不應對能力具有 required 依附元件。這項優惠的最終來源必須是 void 或實際元件。
    • same_as_target:此能力的可用性預期與目標相符。如果目標需要能力,這個欄位會設為 required。如果目標對能力提供選用依附元件,則欄位會設為 optional
    • transitional:類似 optional,但可容許缺少來源。請只使用這個方法,避免在多步驟程式碼變更的過渡期間出現驗證錯誤。

    詳情請參閱 [availability][/docs/concepts/components/v2/abilities/availability.md] 說明文件。

  • source_availability:(選擇性 string) 此優惠的來源是否存在。以下其中之一:

    • required (預設):必須在這個資訊清單中定義來源 (from)。
    • unknown:如果 include 處理後,未在此資訊清單中定義其來源 (from),此優惠的來源會改寫為 void

例子:

offer: [
    {
        protocol: "fuchsia.logger.LogSink",
        from: "#logger",
        to: [ "#fshost", "#pkg_cache" ],
        dependency: "weak",
    },
    {
        protocol: [
            "fuchsia.ui.app.ViewProvider",
            "fuchsia.fonts.Provider",
        ],
        from: "#session",
        to: [ "#ui_shell" ],
        dependency: "strong",
    },
    {
        directory: "blobfs",
        from: "self",
        to: [ "#pkg_cache" ],
    },
    {
        directory: "fshost-config",
        from: "parent",
        to: [ "#fshost" ],
        as: "config",
    },
    {
        storage: "cache",
        from: "parent",
        to: [ "#logger" ],
    },
    {
        runner: "web",
        from: "parent",
        to: [ "#user-shell" ],
    },
    {
        resolver: "full-resolver",
        from: "parent",
        to: [ "#user-shell" ],
    },
    {
        event_stream: "stopped",
        from: "framework",
        to: [ "#logger" ],
    },
],

facets

object (選用)

所含中繼資料:元件可能會基於自己的用途解讀。元件架構不會針對本節強制執行任何結構定義,但第三方可能會預期其面向遵循特定的結構定義。

config

object (選用)

由元件定義的設定結構定義。每個鍵都代表結構定義中的單一欄位。

設定欄位是 JSON 物件,必須定義 type,可以是下列任一字串:booluint8int8uint16int16uint32int32uint64int64stringvector

例子:

config: {
    debug_mode: {
        type: "bool"
    },
}

根據預設,系統會從元件套件解析欄位。如要在執行階段變更值,必須使用 mutability 指定碼。

例子:

config: {
    verbose: {
        type: "bool",
        mutability: [ "parent" ],
    },
},

目前,"parent" 是唯一支援的可變動性指定碼。

字串必須將 max_size 屬性定義為非零整數。

例子:

config: {
    verbosity: {
        type: "string",
        max_size: 20,
    }
}

向量必須將 max_count 屬性設為非零整數。向量也必須將 element 屬性設為 JSON 物件,該物件會說明向量中包含的元素。向量可包含布林值、整數和字串,但不得包含其他向量。

例子:

config: {
    tags: {
        type: "vector",
        max_count: 20,
        element: {
            type: "string",
            max_size: 50,
        }
    }
}