组件标识符

组件框架使用不同的标识符来描述组件。本部分介绍了以下组件标识符之间的关系及其用法:

  • 组件网址:将组件标识为组件解析器要提取的资源。
  • 别名:用于标识组件实例树中的特定组件实例。

组件网址

组件网址是用于定位组件(包括其声明、程序和资源)的网址。组件框架使用组件解析器将组件网址解析为组件声明

用法

组件网址的主要用途是在组件实例的定义中标识组件,作为子声明的一部分:

{
    children: [
        {
            name: "logger",
            url: "fuchsia-pkg://fuchsia.com/logger#logger.cm",
        },
    ],
}

上述示例将 logger 组件声明为托管在软件包仓库中的 Fuchsia 软件包中的绝对资源。

组件框架还支持相对网址。

如需标识与父级组件内置在同一软件包中的组件,请仅指定网址片段:

{
    children: [
        {
            name: "child",
            url: "#meta/child.cm",
        }
    ],
}

如需在父级组件的软件包的子软件包中标识组件,请添加子软件包名称,后跟组件清单路径(通过网址片段):

{
    children: [
        {
            name: "child",
            url: "child#meta/default.cm",
        }
    ],
}

相对组件网址通常用于测试,在测试中,最佳实践是在专门的测试软件包中重新打包正式版组件,以提高密封性

如需详细了解组件网址语法,请参阅组件网址参考文档

标识名

组件标识符:这是一个字符串,用于使用拓扑路径标识组件实例树中的特定组件实例。它遵循与 fuchsia.io 路径类似的语义。

每个路径元素都是父级组件为其子级分配的名称,最终用于标识与最后一个路径元素对应的“叶子组件”。

标识名始终是相对于某个对象的:父组件或整个组件拓扑的根。

用法

以下是一些组件标识符示例:

  • .:自引用标识名。例如,可以使用此标识符引用根组件(由 component_manager 启动的第一个组件)。其他用途取决于上下文。
  • alice/carol/sandy:将组件实例“sandy”唯一标识为“alice”和“carol”的后代。
  • alice/support:dan:将组件实例“dan”作为“alice”派生的“support”集合中的元素进行唯一标识。

别名会传递给开发者工具(例如 ffx component explore),以便在目标设备上识别特定组件实例。它们还构成了诊断选择器语法的第一个部分。

开发者工具实现使用标识符与目标设备上的特定组件实例进行交互。

如需详细了解组件标识符语法,请参阅组件标识符参考文档

设计原则

稳定性

只要指向该组件的组件拓扑不发生变化,标识名就是稳定的标识符。

隐私权

标识符可能包含与用户正在运行的其他组件相关的隐私敏感信息。

为了保留组件的封装,组件无法确定在其自身领域之外运行的其他组件的标识名。组件无法学习自己的标识名、其父级或同级兄弟姐妹的标识名。

标识符可能会显示在系统日志和开发者工具的输出中。