环境

环境提供了一种配置框架为领域中的组件做出的某些选择的方法。组件清单可以定义环境并将其分配给子令牌网域。除非某个子领域替换了它,否则环境会应用于组件实例的整个领域(请参阅传播)。

属性

借助环境,您可以配置王国的以下行为:

跑步者

组件框架与运行时无关,可以支持新的运行时环境和编程语言,而无需更改组件管理器或其他组件。运行程序为组件提供了与组件管理器交互的扩展点,并为 Fuchsia 添加了运行时支持。以下是一些运行程序示例:

  • ELF 运行程序会运行编译为 ELF 文件格式的二进制文件。
  • Dart AOT 运行程序为 Dart 程序提供运行时,例如虚拟机。
  • Chromium Web 运行程序为以网页形式实现的组件提供了运行时。

组件管理器确定要执行的内容,并将执行方式委托给运行程序。Runner 实现可以自由选择执行其组件的适当策略,包括:

  • 为组件启动新进程。
  • 在虚拟机中隔离组件。
  • 在与运行程序相同的进程中运行该组件。
  • 在远程计算机上将该组件作为作业执行。

如需详细了解如何使用和实现运行器,请参阅运行器功能

解析器

组件解析器代表组件与组件管理器交互,以便从给定组件网址解析其子组件。 解析器会注册特定的网址架构 (httpfuchsia-pkg 等),并提供实现,以便从所需网址提取组件并返回组件声明

如果要解析的组件具有关联的软件包,解析器还会返回一个表示软件包目录的 fuchsia.io.Directory 句柄。

如需详细了解如何使用和实现解析器,请参阅解析器功能

声明

通过向组件清单添加 environments 声明来定义新环境。

如需使用某个环境,您必须将其分配给子媒体资源或合集。请参阅传播

环境支持两种扩展模式,即 REALMNONE

  • REALM:环境会从分配给此组件的环境(“父环境”)继承其属性。所有新属性都将添加到从父级环境继承的属性之上。与父级环境重叠的任何属性都将替换父级环境。
  • NONE:环境在开始时为空,没有初始属性。

传播

可以通过以下两种方式之一为组件实例分配环境:

  • 子项集合未设置 environment。在本例中,它将接收其父级的环境。这是最常见的情况。
  • 子组件集合会设置 environment,该值引用此组件定义的 environments 之一。

组件管理器会为根组件分配环境。其中包括引导加载程序解析器、ELF 运行程序和默认配置选项。

环境与 capability 路由

环境的语义与capability 路由形成对比。使用 capability 路由时,从提供方到使用方路径中的每个组件都必须明确公开提供 capability。由于 capability 路由的显式性质,因此可以轻松保证组件不会获得不应拥有的 capability 访问权限,从而遵循最小权限原则

不过,有些配置选项不适合按组件进行配置。例如,请考虑运行器。几乎每个组件都需要使用运行程序,但定义新的运行程序并不常见,例如,肯定不如定义协议功能常见。此外,对运行程序的访问本身不会向组件授予太多特权,因为组件框架会中介对运行程序协议的访问,而组件无法直接使用该协议。因此,运行程序功能会在环境中注册,以便将其提供给分配了该环境的领域中的任何组件(除非某个子领域决定设置不含运行程序的新环境)。