fuchsia.component

添加时间:7

协议

Binder

fuchsia.component/binder.fidl 中定义

框架提供的协议,允许使用该协议绑定到 公开该组件的组件连接到此协议的行为 触发绑定。因此,该协议不包含任何方法。了解详情 请参阅 https://fuchsia.dev/fuchsia-src/concepts/components/v2/lifecycle#binding.

当某个组件连接到协议时,公开此功能的组件 将会启动。启动失败时, 组件框架将通过一个 zx.Status 标题。

ChildIterator

fuchsia.component/realm.fidl 中定义

用于遍历领域中的子项列表的协议。

下一步

使迭代器前进并返回下一批子项。

返回 ChildRef 的矢量。如果存在以下情况,则返回空矢量: 没有孩子了

请求

<空>

响应

名称类型
children vector<fuchsia.component.decl/ChildRef>[128]

控制器

fuchsia.component/controller.fidl 中定义

用于对组件执行操作的协议。

在创建组件时,如果使用Controller Realm.CreateChild 方法。您也可以获得Controller 现有的子组件。Realm.OpenController

添加时间:14

销毁

销毁该组件。当此方法返回时,您可以:

  • Ok 返回,表示销毁已开始。
  • 返回错误,将不会尝试销毁。

如果返回“Ok”,销毁将在后台进行,但是它 尚未完成完成后,框架将 关闭此 [Controller] 渠道。

错误:

  • ACCESS_DENIED:不允许销毁此组件。 目前,如果该组件是其 。
添加时间:HEAD

请求

<空>

响应

名称类型
payload Controller_Destroy_Result

GetExposedDictionary

返回包含组件公开功能的字典。

添加时间:HEAD

请求

<空>

响应

名称类型
payload Controller_GetExposedDictionary_Result

IsStarted

如果此实例当前正在运行,则返回 true。

请求

<空>

响应

名称类型
payload Controller_IsStarted_Result

开始

启动组件,并视需要提供要提供的额外句柄 添加到该组件中。如果实例处于活跃状态,则返回 INSTANCE_ALREADY_RUNNING 。

请求

名称类型
args StartChildArgs
execution_controller server_end<ExecutionController>

响应

名称类型
payload Controller_Start_Result

EventStream

fuchsia.component/events.fidl 中定义

监听组件层次结构上的事件。 无法在平台外部使用。

添加时间:11

GetNext

请求

<空>

响应

名称类型
events vector<Event>

WaitForReady

立即返回。用于表示 FIDL 连接 已完成。验证非静态数据流需要此字段 在组件启动之前,订阅已完成。

请求

<空>

响应

<空>

ExecutionController

fuchsia.component/controller.fidl 中定义

添加时间:14

OnStop

当子级因调用 Stop 而停止时,子级退出 或出于任何其他原因,系统会调用 OnStop,然后 这个渠道已关闭。

响应

名称类型
stopped_payload StoppedPayload

停止

对此组件发起停止操作。完成后,OnStop 并且此通道会关闭。

请注意,组件可能随时自行停止运行,因此 在调用 Stop 之前接收 OnStop 的可能性。

请求

<空>

内省

fuchsia.component/introspector.fidl 中定义

组件实例用来获取相关信息的协议 组件。

此协议目前仅支持获取名字,但 扩展为其他特许信息,例如组件的网址。

组件框架为使用 来自框架的 fuchsia.component.Introspector

添加时间:HEAD

GetMoniker

获取相对于组件的这一领域的名称 与提供的令牌相对应。运行程序可以通过 fuchsia.component.runner/ComponentStartInfo.component_instance

如果令牌无效,则返回 Error.INSTANCE_NOT_FOUND;或者 与此域下的组件不对应。

请求

名称类型
component_instance handle<event>

响应

名称类型
payload Introspector_GetMoniker_Result

命名空间

fuchsia.component/namespace.fidl 中定义

用于执行命名空间操作的协议。

添加时间:20

创建

请求

名称类型
entries vector<NamespaceInputEntry>

响应

名称类型
payload Namespace_Create_Result

大区

fuchsia.component/realm.fidl 中定义

组件实例用来管理自身领域的协议,例如 与其子项绑定

针对此协议的请求会按照接收顺序进行处理。 希望并行发送请求的客户端应打开多个 连接。

组件框架为使用 fuchsia.component.Realm

CreateChild

动态创建子组件实例。当此函数 成功返回,则表明实例存在,但可能未运行。

子实例的环境由环境决定 。decl 不得设置 environment

如果为 decl.startup == EAGERcollection.durability == SINGLE_RUN, [CreateChild] 将启动组件,并在组件创建完毕后返回 。否则,[CreateChild] 将在创建 而不会启动或解析该组件。

错误:

  • INVALID_ARGUMENTScollection 不是有效的引用或 child 不是有效的声明。
  • COLLECTION_NOT_FOUNDcollection 不存在。
  • INSTANCE_ALREADY_EXISTS:“collection”中已存在“decl.name”。
  • INSTANCE_CANNOT_RESOLVE:无法解析 child 的组件声明 位于“SingleRun”集合中。
  • NO_SPACE:无法为新实例分配存储空间。
  • INSTANCE_DIED:此领域已不存在。

请求

名称类型
collection fuchsia.component.decl/CollectionRef
decl fuchsia.component.decl/Child
args CreateChildArgs

响应

名称类型
payload Realm_CreateChild_Result

DestroyChild

用于销毁一个动态创建的组件实例。当此函数 如果返回,则实例会被销毁并停止运行。不过, 清理组件资源(如其隔离存储空间) 在此函数返回后在后台发生。

错误:

  • INVALID_ARGUMENTSchild 不是有效的引用或未引用 动态实例。
  • INSTANCE_NOT_FOUNDchild 不存在。
  • COLLECTION_NOT_FOUNDcollection 不存在。
  • INSTANCE_DIED:此领域已不存在。

请求

名称类型
child fuchsia.component.decl/ChildRef

响应

名称类型
payload Realm_DestroyChild_Result

ListChildren

返回列出集合中所有实例的迭代器。

注意:结果不能保证一致。实例可能是 在迭代器处于活动状态时创建或销毁的对象, 在此方法返回后,迭代器将不再观察到这些事件。

错误:

  • INVALID_ARGUMENTScollection 不是有效的引用或 iter 不包含 ZX_RIGHT_WAIT
  • COLLECTION_NOT_FOUNDcollection 不存在。
  • INSTANCE_DIED:此领域已不存在。
  • 如果iter没有标准频道权利,此函数可以 返回 ACCESS_DENIED 或者组件管理器可能会关闭 iter

请求

名称类型
collection fuchsia.component.decl/CollectionRef
iter server_end<ChildIterator>

响应

名称类型
payload Realm_ListChildren_Result

OpenController

在子组件上运行。请参阅 Controller 的文档。

错误:

  • INVALID_ARGUMENTSchild 不是有效的子引用。
  • INSTANCE_NOT_FOUNDchild 不存在。
  • INSTANCE_DIED:此领域已不存在。
添加时间:HEAD

请求

名称类型
child fuchsia.component.decl/ChildRef
controller server_end<Controller>

响应

名称类型
payload Realm_OpenController_Result

OpenExposedDir

打开子组件实例的公开目录。当 函数成功返回,exposed_dir 已绑定到某个目录 包含子进程向其领域公开的功能 通过 ComponentDecl.exposes(通过 该组件的清单中)。子组件不会以 该调用的结果。相反,当父项绑定时,系统将启动 exposed_dir 中包含的某项功能。

只要 child 存在,exposed_dir 就会处于打开状态。

错误:

  • INVALID_ARGUMENTSchild 不是有效的子引用。
  • INSTANCE_NOT_FOUNDchild 不存在。
  • INSTANCE_CANNOT_RESOLVE:无法解析 child 的组件声明。
  • INSTANCE_DIED:此领域已不存在。

请求

名称类型
child fuchsia.component.decl/ChildRef
exposed_dir server_end<fuchsia.io/Directory>

响应

名称类型
payload Realm_OpenExposedDir_Result

结构体

Controller_Destroy_Response

fuchsia.component/controller.fidl 中定义

<空>

Controller_GetExposedDictionary_Response 资源

fuchsia.component/controller.fidl 中定义

字段类型说明默认
dictionary fuchsia.component.sandbox/DictionaryRef 无默认设置

Controller_IsStarted_Response 资源

fuchsia.component/controller.fidl 中定义

字段类型说明默认
is_started bool 无默认设置

Controller_Start_Response

fuchsia.component/controller.fidl 中定义

<空>

Introspector_GetMoniker_Response

fuchsia.component/introspector.fidl 中定义

字段类型说明默认
moniker string[4096] 无默认设置

NamespaceInputEntry 资源

fuchsia.component/namespace.fidl 中定义

添加时间:20

字段类型说明默认
path string[4095] 无默认设置
dictionary fuchsia.component.sandbox/Dictionary 无默认设置

Namespace_Create_Response 资源

fuchsia.component/namespace.fidl 中定义

字段类型说明默认
entries vector<NamespaceEntry> 无默认设置

Realm_CreateChild_Response

fuchsia.component/realm.fidl 中定义

<空>

Realm_DestroyChild_Response

fuchsia.component/realm.fidl 中定义

<空>

Realm_ListChildren_Response

fuchsia.component/realm.fidl 中定义

<空>

Realm_OpenController_Response

fuchsia.component/realm.fidl 中定义

<空>

Realm_OpenExposedDir_Response

fuchsia.component/realm.fidl 中定义

<空>

精英

错误:柔性环境

类型:uint32

fuchsia.component/error.fidl 中定义

组件框架协议的标准错误代码。

名称说明
1

在执行下列操作时,组件管理器遇到了 执行操作

2

至少有一个参数的格式无效。

3

目前尚不支持此功能。

4

调用方无权执行指定的操作, 或者为通话提供的某个标识名没有足够的权限。

5

未找到组件实例。

6

该组件实例已存在。

7

无法启动组件实例。

8

无法解析组件的声明。

9

找不到组件集合。

10

资源不足,无法执行此操作。

11

组件实例意外终止。

12

请求的资源不存在。

13

未能取消解析该组件。

14

组件实例已启动。

添加时间:14

事件类型 strict

类型:uint32

fuchsia.component/events.fidl 中定义

这些 EventType 用于 EventStream 协议。 它们是 hooks.rs 中 EventType 枚举的 FIDL 版本,且具有 具有相同含义。

添加时间:11

名称说明
1

已请求此组件提供的一项功能。活动 载荷会传送请求通道。

2

有由组件提供给框架的目录可用。

移除:20
3

发现了组件实例。这是应用生命周期的第一阶段 组件。对于静态子项,在创建动态子项后进行分派。 当其父级得到解析时,对于根,在组件管理器中 。

4

该实例会被销毁且不再存在。

5

实例的声明首次成功解析。

6

根据组件管理器,此实例已启动。不过,如果这是 可执行组件,那么运行程序还有进一步的工作来启动该组件。

7

已成功停止实例。

8

与 STARTED 类似,不同之处在于载荷将带有订阅方的事件对, 来延迟组件的启动。例如调试程序 在创建任何流程之前执行一些设置。

9

实例未解析成功。

NamespaceError 柔性

类型:uint32

fuchsia.component/namespace.fidl 中定义

Namespace 中的方法返回的错误。

添加时间:20

名称说明
1

父级的父级与另一个命名空间条目具有相同的前缀

2

两个条目具有相同的命名空间路径。

3

未能将命名空间字典转换为目录。

BAD_ENTRY

4

命名空间条目无效。

5

从其中一个字典读取数据时出错。

CapabilityRequestedPayload 资源

fuchsia.component/events.fidl 中定义

CapabilityRequested 事件的载荷

添加时间:11

Ordinal字段类型说明
name name

功能的名称。

capability handle<channel>

要托管的频道服务器端的句柄 功能。

CreateChildArgs 资源

fuchsia.component/realm.fidl 中定义

Ordinal字段类型说明
numbered_handles vector<fuchsia.process/HandleInfo>[128]

要传递给组件实例的带编号句柄。

如果组件的运行程序不支持带编号的手柄,则 预期会关闭句柄。

dynamic_offers vector<fuchsia.component.decl/Offer>[128]

将定位组件实例的动态优惠。

在此矢量中包含 OfferDecl 将产生额外的功能 除了OfferDecl 父级的 ComponentDecl(定位集合)。

任何类型的优惠(例如协议、目录)都可以用作动态 优惠。任何可对静态优惠有效的来源也有效 。此外,与静态优惠不同的是,动态优惠 可以使用将动态子组件设为来源 source 设置为用于设置 collection 字段的 ChildRef

动态优惠始终会定位到新创建的子组件。作为 结果,dynamic_offers 中的 OfferDecl 不得设置 target 字段,因为它的值暗含其中。

来源(即 source 字段中指定的组件) OfferDecl)或动态优惠的目标被销毁, 优惠本身会被同时销毁。

要将此字段设置为非空值,需要指定 要创建的子组件必须指定 ComponentDecl.allowed_offers = STATIC_AND_DYNAMIC

controller server_end<Controller>

此组件的控制器,可用于影响 组件的生命周期。

添加时间:14
dictionary fuchsia.component.sandbox/DictionaryRef

包含组件实例额外功能的字典。

添加时间:HEAD

DebugStartedPayload 资源

fuchsia.component/events.fidl 中定义

DebugStarted 事件的载荷。

添加时间:11

Ordinal字段类型说明
runtime_dir fuchsia.io/Directory

由运行程序提供的目录,用于展示运行时和运行程序专用信息 组件的相关信息另一端会发送到 ComponentStartInfo 中的运行程序。 例如,可以查询它,以了解组件是否为 ELF 组件,以及 支持下面的 break_on_start 协议。

break_on_start handle<eventpair>

一个事件对,可供调试程序用于延迟组件的启动; 例如ELF 调试程序可以在保留的同时为作业设置异常通道 事件对,然后丢弃 eventpair,以通知运行程序进程 资源。另一端会发送到 ComponentStartInfo 中的运行程序。

DestroyedPayload

fuchsia.component/events.fidl 中定义

已销毁事件的载荷。

添加时间:11

Ordinal字段类型说明

DirectoryReadyPayload 资源

fuchsia.component/events.fidl 中定义

DirectoryReady 事件的载荷

已移除:20 已弃用:19 添加:11

Ordinal字段类型说明
name name

功能的名称。

node fuchsia.io/Node

指向目录功能的通道。

DiscoveredPayload

fuchsia.component/events.fidl 中定义

“已发现”事件的载荷。

添加时间:11

Ordinal字段类型说明

事件资源

fuchsia.component/events.fidl 中定义

包含单个活动的所有相关信息

添加时间:11

Ordinal字段类型说明
header EventHeader

有关生成此事件的组件的信息。

payload EventPayload

某些事件类型的可选载荷

EventHeader

fuchsia.component/events.fidl 中定义

提供目标组件实例相关元数据的标头。

添加时间:11

Ordinal字段类型说明
event_type EventType

与事件对应的事件类型

moniker string[4096]

标识组件实例的相对名称。相对于事件范围。

component_url fuchsia.url/Url

用于解析组件的网址。

timestamp zx/Time

事件发生的时间。

NamespaceEntry 资源

fuchsia.component/controller.fidl 中定义

单个组件命名空间条目,用于描述命名空间装载点 (path) 以及支持它的目录 (directory)。这种类型通常是 组成。如需了解详情,请参阅 ComponentStartInfo.ns

添加时间:14

Ordinal字段类型说明
path string[4095]

该目录的装载点,包括 前导斜杠。例如:“/pkg”“/svc”或“/config/data”。

directory fuchsia.io/Directory

在上述 path 处装载的目录。

PurgedPayload

fuchsia.component/events.fidl 中定义

已完全清除事件的载荷。

添加时间:11

Ordinal字段类型说明

ResolvedPayload

fuchsia.component/events.fidl 中定义

Resolved 事件的载荷。

添加时间:11

Ordinal字段类型说明

StartChildArgs 资源

fuchsia.component/controller.fidl 中定义

添加时间:14

Ordinal字段类型说明
numbered_handles vector<fuchsia.process/HandleInfo>[128]

要传递给组件实例的带编号句柄。

如果组件的运行程序不支持带编号的句柄 预期会关闭句柄。

设置后,此处指定的值将覆盖在 CreateChildArgs.

namespace_entries vector<NamespaceEntry>[32]

由组件管理器生成的命名空间将进行扩展,以包括 在提供给组件的 。

如果存在任何冲突的条目,则在开始 组件。

dictionary fuchsia.component.sandbox/DictionaryRef

包含组件实例额外功能的字典。

添加时间:HEAD

StartedPayload

fuchsia.component/events.fidl 中定义

已开始事件的载荷。

添加时间:11

Ordinal字段类型说明

StoppedPayload

fuchsia.component/events.fidl 中定义

已停止事件的载荷。

添加时间:11

Ordinal字段类型说明
status zx/Status

在 fuchsia.component.runner/ComponentController 上设置的墓碑 协议通道。这是组件的退出状态。通过 可能的状态值及其含义 ComponentController 协议。

exit_code int64

组件实例的退出代码。请注意,并非所有组件 会以一个退出代码停止。

许多程序运行时都有退出代码的概念。跑步者可以映射 将该值复制到此字段(如适用)。例如,ELF 运行程序 将在此处发布 Zircon 进程返回代码。

添加时间:23

UnresolvedPayload

fuchsia.component/events.fidl 中定义

未解析事件的载荷。

添加时间:11

Ordinal字段类型说明

联合体

Controller_Destroy_Result 严格

fuchsia.component/controller.fidl 中定义

Ordinal变体类型说明
response Controller_Destroy_Response
err Error
framework_err internal

Controller_GetExposedDictionary_Result 严格资源

fuchsia.component/controller.fidl 中定义

Ordinal变体类型说明
response Controller_GetExposedDictionary_Response
err Error
framework_err internal

Controller_IsStarted_Result 严格资源

fuchsia.component/controller.fidl 中定义

Ordinal变体类型说明
response Controller_IsStarted_Response
err Error
framework_err internal

Controller_Start_Result 严格

fuchsia.component/controller.fidl 中定义

Ordinal变体类型说明
response Controller_Start_Response
err Error
framework_err internal

EventPayload 灵活 资源

fuchsia.component/events.fidl 中定义

封装某些事件类型的其他数据/协议。

添加时间:11
Ordinal变体类型说明
capability_requested CapabilityRequestedPayload

CapabilityRequested 事件的载荷

purged PurgedPayload

已完全清除事件的载荷。

directory_ready DirectoryReadyPayload

DirectoryReady 事件的载荷

已移除:20 已弃用:19
discovered DiscoveredPayload

“已发现”事件的载荷。

已弃用:22
destroyed DestroyedPayload

已销毁事件的载荷。

resolved ResolvedPayload

“Resolved”事件的载荷

started StartedPayload

已开始事件的载荷

stopped StoppedPayload

已停止事件的载荷

debug_started DebugStartedPayload

DebugStarted 事件的载荷

unresolved UnresolvedPayload

未解析事件的载荷

Introspector_GetMoniker_Result 严格

fuchsia.component/introspector.fidl 中定义

Ordinal变体类型说明
response Introspector_GetMoniker_Response
err Error
framework_err internal

Namespace_Create_Result 严格资源

fuchsia.component/namespace.fidl 中定义

Ordinal变体类型说明
response Namespace_Create_Response
err NamespaceError
framework_err internal

Realm_CreateChild_Result strict

fuchsia.component/realm.fidl 中定义

Ordinal变体类型说明
response Realm_CreateChild_Response
err Error

Realm_DestroyChild_Result strict

fuchsia.component/realm.fidl 中定义

Ordinal变体类型说明
response Realm_DestroyChild_Response
err Error

Realm_ListChildren_Result 严格

fuchsia.component/realm.fidl 中定义

Ordinal变体类型说明
response Realm_ListChildren_Response
err Error

Realm_OpenController_Result strict

fuchsia.component/realm.fidl 中定义

Ordinal变体类型说明
response Realm_OpenController_Response
err Error

Realm_OpenExposedDir_Result

fuchsia.component/realm.fidl 中定义

Ordinal变体类型说明
response Realm_OpenExposedDir_Response
err Error

常量

名称类型说明
MAX_CAPABILITY_ID_LENGTH 50 uint64

功能 ID 的最大字符串长度。 此值目前可以任意设置。

添加时间:11
MAX_CHILD_COUNT 128 uint32

调用 ChildIterator.Next 的子项数上限 才能返回。 请注意,这对可添加的子元素数量没有限制 添加到组件中。这仅仅是单次调用 Next 方法结合使用。

MAX_CHILD_NAME_LENGTH 1024 uint32
MAX_DYNAMIC_OFFER_COUNT 128 uint32

可定位到所创建组件的动态优惠数量上限。

MAX_ERROR_DESCRIPTION_LENGTH 100 uint64

错误说明的字符串长度上限。

添加时间:11
MAX_HANDLE_COUNT 128 uint32

可传递到所创建组件的句柄的数量上限。

MAX_MONIKER_LENGTH 4096 uint32
MAX_NAMESPACE_COUNT 32 uint32
添加时间:14
MAX_NAME_LENGTH fuchsia.io/MAX_NAME_LENGTH uint64
添加时间:19
MAX_NUM_EVENTS_RECEIVED 100 uint64

接收器可以监听的事件数上限。

MAX_PATH_LENGTH fuchsia.io/MAX_PATH_LENGTH uint64
添加时间:15
MAX_SUBSCRIPTION_REQUESTS 2 uint32

每个事件订阅的最大请求次数。

MAX_URL_SCHEME_LENGTH MAX_NAME_LENGTH uint64
添加时间:19

ALIASES

名称说明
child_name string[MAX_CHILD_NAME_LENGTH]
名字 string[MAX_NAME_LENGTH]
url_scheme string[MAX_URL_SCHEME_LENGTH]