环境

通过环境,您可以配置框架为 Realm 中的组件做出的特定选择。组件清单可以定义环境并将其分配给子领域。环境适用于组件实例的整个领域,除非某些子领域替换该环境(请参阅传播)。

属性

通过环境,您可以配置大区的以下行为:

跑步者

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

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

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

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

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

解析器

httpfuchsia-pkg

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

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

声明

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

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

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

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

传播

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

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

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

环境与功能路由

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

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