出于测试和调试目的,ffx component
命令可在设备上快速启动动态组件实例。
概念
设备上的组件实例通常使用组件清单进行声明,该清单会静态定义设备上组件的拓扑和功能。不过,在设备上创建组件实例的方法不止一种,静态声明组件就是其中之一。您还可以使用 ffx component
命令在运行时在设备上创建动态组件实例。
一个重要的区别是,Fuchsia 会限制所有动态组件实例在组件集合下运行。集合可用作动态组件实例的容器。因此,一个集合下组件实例的功能会受到该集合能够公开和提供的功能的限制。
虽然可以使用组件清单声明新的组件集合(类似于声明静态组件实例),但 Fuchsia 提供了一些常用的预定义集合。例如,ffx-laboratory
就是其中一个预定义集合。
启动组件
如需创建新的动态组件实例,您首先需要运行 ffx component create
以将新组件添加到设备上的组件实例树。添加完成后,您可以运行 ffx component start
以在设备上启动该组件。
如需在设备上启动新的动态组件实例,请执行以下操作:
创建新的组件实例:
ffx component create <TARGET_MONIKER> <COMPONENT_URL>
替换以下内容:
TARGET_MONIKER
:新组件实例的目标名称。此名称必须在路径上包含一个组件集合。COMPONENT_URL
:组件的资源位置。
以下示例会为
hello-world-cpp.cm
组件创建一个新的组件实例,并将其标识符分配为/core/ffx-laboratory:hello-world
:$ ffx component create /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm URL: fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm Moniker: /core/ffx-laboratory:hello-world Creating component instance...
启动组件实例:
ffx component start <TARGET_MONIKER>
将
TARGET_MONIKER
替换为第 1 步中使用的名称。以下示例会在
/core/ffx-laboratory:hello-world
启动组件实例:$ ffx component start /core/ffx-laboratory:hello-world Moniker: /core/ffx-laboratory:hello-world Starting component instance...
在 ffx-laboratory 下启动组件
启动动态组件实例通常需要运行一系列 ffx component create
和 ffx component start
命令(请参阅启动组件)。不过,ffx component run
命令可以在单个命令行中启动动态组件实例。
如需快速启动 ffx-laboratory
集合下的组件,请运行以下命令:
ffx component run /core/ffx-laboratory:<NAME> <COMPONENT_URL>
将 COMPONENT_URL
替换为组件的资源位置,并将 NAME
替换为 ffx-laboratory
集合中的组件实例的名称。
以下示例会在设备上启动 hello-world-cpp.cm
组件:
$ ffx component run /core/ffx-laboratory:hello-world-cpp fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
URL: fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
Moniker: /core/ffx-laboratory:hello-world-cpp
Creating component instance...
Starting component instance...
本质上,ffx component run
命令会执行以下步骤:
- 运行
ffx component create
,以在ffx-laboratory
集合下创建一个新的组件实例,并使用组件名称作为目标名称。 - 运行
ffx component start
以在设备上启动组件实例。
例如,在上例中运行 ffx component run /core/ffx-laboratory:hello-world-cpp fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
相当于运行以下命令:
$ ffx component create /core/ffx-laboratory:hello-world-cpp fuchsia-pkg://fuchsia.com/hello-world-cpp#meta/hello-world-cpp.cm
$ ffx component start /core/ffx-laboratory:hello-world-cpp
停止组件
如需停止设备上正在运行的组件实例,请运行以下命令:
ffx component stop <TARGET_MONIKER>
将 TARGET_MONIKER
替换为组件实例的标识名。
以下示例会在 /core/ffx-laboratory:hello-world
处停止组件实例:
$ ffx component stop /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Stopping component instance...
销毁组件
如需从设备上的组件实例树中移除动态组件实例,请运行以下命令:
ffx component destroy <TARGET_MONIKER>
将 TARGET_MONIKER
替换为组件实例的标识名。
以下示例会移除 /core/ffx-laboratory:hello-world
处的组件实例:
$ ffx component destroy /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Destroying component instance...