capabilitiescapability 结合了对资源的访问权限和一系列权限,提供了访问权限控制机制以及资源交互方式。
组件只能通过其命名空间中可检测到的功能以及它收到的少数编号句柄与系统和其他组件进行交互。
功能路由
组件在组件清单中声明了它们为系统提供的新功能,以及由其他组件(或框架)提供的功能。组件框架使用这些声明来填充命名空间。
由于 capability 通常通过父级组件路由到其子级,因此父级组件在为其子组件定义沙盒方面发挥着重要作用。
环境用于为框架所分配到的领域配置框架的行为。路由到环境的功能由框架访问和使用。组件实例没有对其环境中的功能的运行时访问权限。
通过可用性功能,组件可以声明有关其期望功能在哪些情况下可用的情况的预期。
路由术语
路由术语分为以下几类:
- 关于如何在组件、其父级和子级之间路由功能的声明:
- 声明组件使用或提供的功能:
功能类型
可以路由以下功能:
type | 说明 | 路由至 |
---|---|---|
protocol
|
一个文件系统节点,用于打开由 FIDL 协议支持的通道。 | 组件 |
service
|
一个文件系统目录,用于打开通向多个服务实例之一的频道。 | 组件 |
directory
|
文件系统目录。 | 组件 |
storage
|
一个可写的文件系统目录,该目录会隔离到使用该目录的组件。 | 组件 |
resolver
|
在环境中注册此功能后,具有特定网址架构的组件将通过该解析器进行解析。 | 环境 |
runner
|
在环境中注册的一项功能,可让框架在启动组件时使用该运行程序。 | 环境 |
示例
请考虑以下示例,它描述了通过组件实例树进行功能路由:
在此示例中:
echo
组件实例提供fuchsia.Echo
协议作为其声明的capabilities之一。echo_tool
组件实例需要使用fuchsia.Echo
协议功能。
每个中间组件协同工作,将 fuchsia.Echo
从 echo
显式路由到 echo_tool
:
echo
会公开self
中的fuchsia.Echo
,因此协议对其父级services
可见。services
会将从子级echo
的fuchsia.Echo
公开给其父级shell
。shell
将fuchsia.Echo
从其子项services
提供给另一个子项tools
。tools
将fuchsia.Echo
从parent
提供给其子级echo_tool
。
组件框架会授权 echo_tool
使用 fuchsia.Echo
的请求,因为找到了到提供该协议功能的组件的有效路由。
如需详细了解组件如何在运行时连接到 capability,请参阅开放协议的生命周期。