组件管理器使用 fuchsia.component.runner.ComponentRunner
协议将包含 ComponentStartInfo
的请求发送到相应的运行程序,以启动组件。ComponentStartInfo
运行程序会在受支持的运行时中管理组件的执行。
启动组件后,组件管理器会使用 Start
请求中提供的 fuchsia.component.runner.ComponentController
协议向运行程序发送执行操作,例如停止组件。运行程序会选择如何根据组件运行时解释这些命令。
提供运行程序功能
runner
path
fuchsia.component.runner.ComponentRunner
{
capabilities: [
{
runner: "web",
path: "/svc/fuchsia.component.runner.ComponentRunner",
},
],
}
组件管理器会向此协议发送 ComponentRunner/Start
请求。
每个请求都包含一个 ComponentController
渠道,运行程序应通过该渠道处理组件的生命周期事件。
路由运行程序功能
组件通过向父级公开exposing这些功能并将其提供给子级,来路由运行程序功能。
如需详细了解框架如何路由组件功能,请参阅功能路由。
正在曝光
公开运行程序 capability 可让组件的父项使用该功能:
{
expose: [
{
runner: "web",
from: "self",
},
],
}
您可以视需要指定:
成为协作者
提供运行程序 capability 可让子组件使用该功能:
{
offer: [
{
runner: "web",
from: "self",
to: [ "#child-a" ],
},
],
}
您可以视需要指定:
注册组件运行程序
组件运行程序可通过其环境提供给组件。如需在环境中注册新的运行程序,请向 environments
声明的 runners
部分添加一个新条目:
environments: [
{
name: "my-environ",
extends: "realm",
runners: [
{
runner: "web",
from: "parent",
},
],
},
]
您可以视需要指定:
如需详细了解如何将环境应用于组件,请参阅环境文档。
选择运行程序
组件使用其清单的 program
部分来指定要执行的适当运行程序。program
部分指定 runner
以及任何特定于运行程序的选项。必须在组件环境中注册运行程序。
例如,作为网页运行的组件可能具有如下所示的 program
:
program: {
runner: "web",
mode: "incognito",
},
当组件管理器尝试启动此组件时,它会向 web
运行程序的提供程序发送请求,以启动此组件。
重命名运行程序
您可以使用 as
参数以不同的名称 expose
、offer
或register运行程序 capability:
{
expose: [
{
runner: "web",
from: "#chromium",
as: "web-chromium",
},
],
}
框架运行程序
组件框架提供以下内置组件运行程序:
- ELF 运行程序:运行编译为 ELF 文件格式的二进制文件。
{
program: {
runner: "elf",
binary: "bin/example",
},
}