组件清单 (.cml) 参考文档

.cml 文件包含一个具有以下键的 json5 对象字面量。

如果需要字符串值,则通常记录有效值列表。 以下字符串值类型可重复使用,并且必须遵循特定规则。

.cml 文件会被编译为 FIDL 传输格式 (.cm) 文件。

字符串类型

姓名

功能和组件的子项都会命名。名称字符串可以 由以下一个或多个字符组成:A-Za-z0-9_.-。名称不得超过 255 个字符,且不能以 与 .- 共享。

路径

路径是由 / 字符分隔的一系列名称。一条路径 长度不得超过 4095 个字符。在整个文档中,

  • 相对路径不能以 / 字符开头。
  • 命名空间和传出目录路径必须以 / 字符开头。

参考文档

引用字符串采用 #<name> 的形式,其中 <name> 是指子项的名称:

顶级键

include

string 数组(可选)

可选的 include 属性描述了零个或多个其他组件清单 要合并到此组件清单中的文件。例如:

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

在上面给出的示例中,组件清单包含来自 清单分片上提供了 syslog 库提供的清单文件,从而确保 组件在运行时正常运行(如果它尝试写入 syslog)。修改者 按照惯例,此类文件称为“清单分片”并以 .shard.cml 结尾。

前缀为 // 的包含路径是相对于紫红色的源根的 结账。不过,请添加前缀不带 // 的路径,如示例所示 通过导出//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 引用同一 capability 的声明(只要属性相同即可)。例如:

// 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",
    },
],

include 具有传递性,这意味着分片可以有自己的 include。

include 路径可以包含菱形依赖项。例如,这是有效的: 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 属性以选择要运行的运行程序 组件。program 部分其余部分的格式由 特定跑步者。

精灵跑步者

如果组件使用 ELF 运行程序,program 必须包含以下内容 属性。

  • runner:必须设置为 "elf"
  • binary:可执行二进制文件的相对软件包路径
  • args(可选):参数列表

示例:

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

如需查看完整的属性列表,请参阅 ELF Runner

其他跑步者

如果组件使用自定义运行程序,则 program 节中的其他值 而 runner 则特定于运行程序。运行程序以 键值对的字典。指用于查询的特定运行程序 确定预期接收哪些键以及如何解读这些键。

children

object 数组(可选)

children 部分声明了子组件实例,如 子组件实例

  • name:(string) 子组件实例的名称,是一个由 1 组成的字符串 以下一个或多个字符:a-z0-9_.-。名称 在引用中使用时用于标识此组件。
  • url:(string) 子组件实例的组件网址
  • startup:(string) 组件实例的启动模式。以下各项之一: <ph type="x-smartling-placeholder">
      </ph>
    • 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) 组件集合的名称,是一个为 1 或 更多字符:a-z0-9_.-。名称 在 reference 中使用时标识此集合。
  • 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) capability 的来源,可以是以下几项之一:
      • 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)(仅限 storagebacking_dir 中的子目录,其中每个组件进行了隔离存储 创建目录时

  • storage_id:(可选 string)(仅限 storage)用于隔离组件存储空间的标识符,可选的值包括:

    • static_instance_id:使用组件 ID 索引中的实例 ID 用作组件存储的键。未列出的组件 组件 ID 索引将无法使用此存储空间。
    • static_instance_id_or_moniker:如果组件列在 组件 ID 索引,则实例 ID 会用作组件的 storage。否则,将使用存储中组件的名称。 功能。
  • 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 为“vector”时,才支持此属性。 这是矢量中的元素数上限。

  • element:(可选 object)(仅限 configuration)仅当此配置 type 为“vector”时,才支持此属性。 这是配置矢量中元素的类型。

    示例(简单类型):

    { type: "uint8" }
    

    示例(字符串类型):

    {
      type: "string",
      max_size: 100,
    }
    
  • value:(可选 any)(仅限 configuration)配置的值。

  • delivery:(可选 string)(仅限 protocol)指定框架在何时打开协议 从该组件的传出目录中 功能。允许的值有:

    • eager:(默认)框架将在设置完毕后立即打开相应 capability 一些使用方组件会请求它
    • on_readable:当服务器触发时,框架将打开该 capability 端点流水线。

use

object 数组(可选)

对于可执行组件,声明此 运行时为其命名空间提供必需的参数。 除非另有指定,否则 capability 从 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) capability 的来源。默认值为 parent。以下各项之一:

    • parent:组件的父级。
    • debugdebug_capabilities 分配给该组件的环境。
    • framework:组件框架运行时。
    • self:此组件。
    • #<capability-name>:另一个功能的名称,其中 请求的功能。
    • #<child-name>:对子组件的引用 实例。

    [fidl-environment-decl]:/reference/fidl/fuchsia.component.decl#Environment

  • 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 [库存状况] 文档。

  • 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 为“vector”时,才支持此属性。 这是矢量中的元素数上限。

  • element:(可选 object)(仅限 configuration)仅当此配置 type 为“vector”时,才支持此属性。 这是配置矢量中元素的类型。

    示例(简单类型):

    { type: "uint8" }
    

    示例(字符串类型):

    {
      type: "string",
      max_size: 100,
    }
    
  • default:(可选 any)(仅限 configuration)此配置的默认值。 如果 capability 是可选的,并且从 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: capability 的来源,可为以下项:
    • 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:(可选stringavailability (可选):有关此功能可用性的预期。影响 构建时和运行时路由验证。以下各项之一:

    • required(默认):必需的依赖项,来源必须存在并提供它。使用 当此公开的目标需要此功能正常运行时,将使用此方法。
    • optional:可选依赖项。在公开目标可以运行时使用此属性 。目标不得required依赖 功能。此公开内容的最终来源必须是 void 或实际组件。
    • same_as_target:此功能的可用性预期将与 目标。如果目标需要该功能,则将此字段设置为 required。 如果目标对 capability 有可选依赖项,则该字段将设置为 optional
    • transitional:与 optional 类似,但可以容忍缺少来源。使用此 只是为了避免在多步代码更改的过渡期间出现验证错误。

    有关详情,请参阅 availability [库存状况] 文档。

  • source_availability:(可选 string)此优惠的来源是否必须存在。以下各项之一:

    • required(默认):必须在此清单中定义来源 (from)。
    • unknown:如果此商品的来源 (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: capability 的来源,可为以下项:
    • parent:组件的父级。此来源可用于 功能类型。
    • self:此组件。需要相应的 capability 声明。
    • framework:组件框架运行时。
    • #<child-name>:对子组件的引用 实例。此来源只能在提供协议、 目录或运行程序功能
    • void:有意省略了来源。仅当 availability 为以下值时有效: optionaltransitional
  • to:(string or array of strings) 功能目标。以下各项之一: <ph type="x-smartling-placeholder">
      </ph>
    • #<target-name> 或 [#name1, ...]:对子级或集合的引用。 或引用数组。
    • all:包含所有子引用offer 子句的简写形式。
  • 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:(可选stringavailability (可选):有关此功能可用性的预期。影响 构建时和运行时路由验证。以下各项之一:

    • required(默认):必需的依赖项,来源必须存在并提供它。使用 当此优惠的目标用户需要此功能时,此功能才会正常运行。
    • optional:可选依赖项。在优惠目标可以发挥作用时使用此项 。目标不得required依赖 功能。此优惠的最终来源必须是 void 或实际组件。
    • same_as_target:此功能的可用性预期将与 目标。如果目标需要该功能,则将此字段设置为 required。 如果目标对 capability 有可选依赖项,则该字段将设置为 optional
    • transitional:与 optional 类似,但可以容忍缺少来源。使用此 只是为了避免在多步代码更改的过渡期间出现验证错误。

    有关详情,请参阅 availability [库存状况] 文档。

  • source_availability:(可选 string)此优惠的来源是否必须存在。以下各项之一:

    • required(默认):必须在此清单中定义来源 (from)。
    • unknown:如果此商品的来源 (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,该字段可以是 以下字符串: booluint8int8uint16int16uint32int32uint64int64 stringvector

示例:

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,
        }
    }
}