组件通过 功能 ,了解所有最新动态。capability 可以合并对资源的访问 以及一组权限,提供访问控制和 资源。Fuchsia 功能通常会访问底层的 内核对象 至 标识名 提供的组件 命名空间 ,了解所有最新动态。
一个组件只能通过 其命名空间中可检测到的功能, 带编号的句柄。
功能路由
组件会声明它们向系统提供的新功能, 它们需要的其他组件(或框架)提供的功能, 组件清单中。组件框架使用 来填充命名空间
要使功能在运行时可用,还必须有一个有效的 功能路由 从使用方组件 提供商。由于 capability 通常通过父组件进行路由 父组件在定义 子组件使用沙盒
部分功能类型会路由到 环境 改为 相较于单个组件实例环境会配置 框架。发送到以下设备的 capability 由框架访问和使用。组件实例 具有运行时访问其环境中功能的权限。
availability 功能可让组件声明 客户预期在哪些情境下获得相应能力 可用。
路由术语
路由术语分为以下几类:
- 有关如何在组件、其 父元素及其子元素:
- 声明由组件使用或提供的功能:
循环检测
组件框架强制实施了组件之间
不会形成循环。最简单的循环示例是
提供从子级 A
到子级 B
以及从 B
到 A
的功能,
也就是较弱的选项
检测循环:
- 子组件及其父组件。
- 当前组件及其子组件。
当前组件可以:
use
功能,除非应用提供以下功能: 儿童。use
从其父级功能。expose
功能分配给其父级。
如果存在循环,可以通过多种策略加以解决。
- 将其中一个链接标记为
dependency: "weak"
。弱功能不算在内 作为依赖项来检测周期检测或关闭排序的。答 使用弱功能的组件必须进行编程, 这个弱功能不存在或消失 - 将其中一个组件拆分为两个没有循环的较小组件。
- 反转其中一个依赖项的顺序。例如,不使用
B
使用 capability 来自A
,A
可以使用B
中的第二项功能。为此,可以 向A
和B
的清单中添加新功能,然后添加新的use
添加到A
的清单中。
功能类型
可以路由以下功能:
type | 说明 | 路由至 |
---|---|---|
protocol |
一个文件系统节点,用于打开由 FIDL 协议支持的通道。 | 组件 |
service |
一个文件系统目录,用于打开指向多个服务实例之一的通道。 | 组件 |
directory |
文件系统目录。 | 组件 |
storage |
与使用它的组件隔离的可写文件系统目录。 | 组件 |
dictionary |
将其他功能捆绑在一起的功能。 | 组件 |
resolver |
一种功能,当在环境中注册时,可使具有特定网址架构的组件通过该解析器解析。 | 环境 |
runner |
一项功能,在环境中注册后,可让框架在启动组件时使用该运行程序。 | 环境 |
示例
请考虑以下示例,该示例描述了通过 组件实例树:
在此示例中:
echo
组件实例提供fuchsia.Echo
协议,作为 其声明的功能。echo_tool
组件实例需要使用fuchsia.Echo
协议功能
每个中间组件协同工作,以显式方式将 fuchsia.Echo
从
从 echo
更改为 echo_tool
:
echo
公开了来自self
的fuchsia.Echo
,以便协议对以下用户可见 其父级services
。services
会将其子级echo
的fuchsia.Echo
公开给其父级。shell
。shell
向其子项services
提供fuchsia.Echo
给另一个子项,tools
。tools
将parent
的fuchsia.Echo
提供给其子级echo_tool
。
组件框架会授予 echo_tool
使用 fuchsia.Echo
的请求
因为找到了通向提供该协议的组件的有效路由
功能。
如需详细了解组件如何在运行时连接到 capability,请参阅 开放协议的生命周期。