环境

环境提供了一种方法来配置框架为 realm 中的组件做出的特定选择。组件清单可以定义环境并将其分配给子领域。环境适用于组件实例的整个领域,除非某些子领域覆盖该环境(请参阅传播)。

属性

通过环境,您可以配置领域的以下行为:

跑步者

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

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

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

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

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

解析器

属性 的,则 httpfuchsia-pkg

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

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

声明

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

如需使用环境,您必须将其分配给子级或集合。请参阅传播

环境支持两种扩展模式:REALMNONE

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

传播

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

  • 它的子项集合没有设置 environment。在这种情况下,它将接收其父级的环境。这是最常见的情况。
  • 其子级或集合会设置 environment,即此组件定义的 environments 之一。

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

环境与功能路由

环境的语义与功能路由相反。使用功能路由时,必须由从提供程序到使用方的路径中的每个组件明确公开提供某项功能。功能路由的明确性质使可以轻松确保组件不会获得对本不应拥有的功能的访问权限,从而保持最小权限原则

但是,有些配置选项不适合针对每个组件进行配置。例如,请考虑运行程序。几乎每个组件都需要使用运行程序,但定义新的运行程序并不常见 - 当然,不如定义协议 capability 那么常见。此外,对运行程序的访问本身并不会向组件授予很多权限,因为组件框架会调解对运行程序协议的访问,而组件无法直接使用该协议。因此,运行程序功能是在一个环境中注册的,这使得它们可供分配了该环境的领域中的任何组件使用(除非某些子领域决定设置运行程序不存在的新环境)。