组件清单 (.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 结尾。

// 开头的 include 路径相对于 Fuchsia 检出源代码的根目录。不过,未以 // 开头的 include 路径(如上例所示)会从导出组件清单分片的 Fuchsia SDK 库 (//sdk/lib) 解析。

请注意,在 Fuchsia 检出目录中,这两个包含路径是等效的:

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

您可以通过调用以下命令,查看将所有包含文件合并到组件清单文件中的结果:

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

包含功能可处理引用同一 capability 的多余 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",
    },
],

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 运行程序

其他跑者

如果组件使用自定义运行程序,则 program 诗节中除 runner 之外的值是特定于运行程序的。运行程序会将参数作为键值对的字典接收。请参考用于确定预期接收哪些键以及如何解读这些键的特定运行程序。

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)运行器 capability 的来源,以下各项之一:
      • 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 中的 capability 提供给客户端的名称。如果 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)组件程序的传出目录中用于获取 capability 的路径。

    对于 protocolservice,默认为 /svc/${protocol};否则为必需项。

    对于 protocol,路径目标必须是信道,并且往往采用与此功能的名称匹配的协议。

    对于 servicedirectory,路径的目标必须是目录。

    对于 runner,路径的目标必须是通道,并且必须使用协议 fuchsia.component.runner.ComponentRunner

    对于 resolver,路径的目标必须是通道,并且必须使用协议 fuchsia.component.resolution.Resolver

    对于 dictionary,此属性为可选属性。如果提供,则是指程序提供的 fuchsia.component.sandbox/DictionaryRouter 的路径,该路径应返回 fuchsia.component.sandbox/DictionaryRef,以便程序可以动态提供自身的字典。如果为 dictionary 设置此值,则不允许对此字典执行 offer

  • rights:(可选 array of string)(仅限 directory)使用此目录时可以设置的最大目录权限

  • from:(可选 string)(仅限 storage)为此存储功能提供支持的现有目录功能的来源组件,以下各项之一:

    • parent:组件的父级。
    • self:此组件。
    • #<child-name>:对子组件实例的引用
  • 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 将用作组件存储空间的键。否则,将使用存储容量中的组件名称。
  • 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 为“字符串”时受支持。 这是字符串的大小上限。

  • 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)指定在有人请求该 capability 时,框架何时从此组件的传出目录打开该协议。允许的值有:

    • eager:(默认)框架会在某个使用方组件请求该 capability 后立即打开该 capability。
    • on_readable:当连接请求中流水线的服务器端点变为可读状态时,框架将打开该 capability。

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][fidl-environment-decl] 之一。
    • framework:组件框架运行时。
    • self:此组件。
    • #<capability-name>:从中派生所请求功能的另一个功能的名称。
    • #<child-name>:对子组件实例的引用

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

  • path:(可选 string)用于在组件的命名空间中安装 capability 的路径。对于协议,默认值为 /svc/${protocol}directorystorage 的必需参数。不允许为包含 capability 名称数组的声明和 runner capability 使用此属性。

  • rights:(可选 array of string)(仅限 directory)要应用于组件命名空间中的目录的最大目录权限

  • subdir:(可选 string)(仅限 directory)目录功能中的子目录,用于在组件的命名空间中提供。

  • scope:(可选 string or array of strings)(仅限 event_stream)定义后,事件流将仅包含与范围中定义的组件相关的事件。

  • filter:(可选 object)(仅限 event_stream)请求了 capability 的事件流需要指定一个过滤条件,该过滤条件引用事件流中事件适用的协议。过滤条件的内容将是从“名称”到“协议名称”的对象映射。

  • dependency:(可选 string)来源与此组件之间的依赖项类型,可以是以下之一:

    • strong:强依赖项,用于确定关闭顺序。组件管理器一定会在来源之前停止目标。这是默认值。
    • weak:安全系数低的依赖项,在关停期间会被忽略。当组件管理器停止父级领域时,来源可能会在客户端之前停止。弱依赖项的客户端必须能够处理这些依赖项变得不可用的情况。不允许为运行器功能使用此属性,因为运行器功能始终是 strong 依赖项。
  • availability:(可选 string)此功能的预期可用性。以下各项中的一项:

    • required(默认):必需的依赖项,如果没有此功能,组件将无法执行其工作。
    • optional:可选依赖项,即使没有此功能,组件也能正常运行(不过,如果此功能不可用,某些功能可能会被停用)。
    • transitional:来源可以完全省略路由,甚至无需从 void 进行路由。用于引入新功能的软转场效果。 不允许为运行器功能使用此属性,因为运行器功能始终为 required

    如需了解详情,请参阅可用性文档。

  • key:(可选 string)(仅限 config)此 capability 将设置的组件 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 为“字符串”时受支持。 这是字符串的大小上限。

  • 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)要路由的来源目录 capability 中的子目录的相对路径。
  • event_stream:(可选 string or array of strings)(仅限 event_stream)要公开的事件流的名称。
  • scope:(可选 string or array of strings)(仅限 event_stream)所公开的事件流的范围。这用于缩小事件流引用的组件范围,使其仅引用在该作用域中定义的组件。
  • availability:(可选 stringavailability (可选):此功能可用性方面的预期。会影响构建时和运行时路由验证。以下任一项:

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

    如需了解详情,请参阅可用性文档。

  • 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)路由服务时,服务 capability名称
  • protocol:(可选 string or array of strings)路由协议时,协议功能名称
  • directory:(可选 string or array of strings)路由目录时,某个目录功能名称
  • runner:(可选 string or array of strings)路由运行程序时,运行程序 capability名称
  • resolver:(可选 string or array of strings)在路由解析器时,解析器 capability名称
  • storage:(可选 string or array of strings)在路由存储空间 capability 时,存储空间 capability名称
  • dictionary:(可选 string or array of strings)在路由字典时,字典 capability名称
  • config:(可选string or array of strings)在路由配置时,配置功能的名称
  • from:(string or array of strings) from: capability 的来源,可为以下项之一:
    • parent:组件的父级。此来源可用于所有 capability 类型。
    • self:此组件。需要相应的 capability 声明。
    • framework:组件框架运行时。
    • #<child-name>:对子组件实例的引用。仅在提供协议、目录或运行程序功能时才能使用此来源。
    • void:故意省略了来源。仅当 availabilityoptionaltransitional 时有效。
  • to:(string or array of strings)功能目标。以下各项中的一项:
    • #<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:可选依赖项。如果商品的目标对象无论是否具有此功能都能正常运行,请使用此值。目标不得对该 capability 有 required 依赖项。此优惠的最终来源必须是 void 或实际组件。
    • same_as_target:此功能的可用性预期将与目标一致。如果目标设备需要该 capability,则此字段会设置为 required。如果目标对该 capability 有可选依赖项,则该字段会设置为 optional
    • transitional:与 optional 类似,但可以容忍缺少来源。仅在多步代码更改的过渡期间使用此属性,以避免验证错误。

    如需了解详情,请参阅可用性文档。

  • 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,该值可以是以下字符串之一: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,
        }
    }
}