在研究源代码时,您可能已经注意到了examples目录。本指南将向您展示如何构建Fuchsia以包含一些示例,然后在设备上运行它们。
hello_world DEMO
打开examples/hello_world/BUILD.gn 文件。
如果你对GN不熟悉,看一下介绍性陈述或文档。简而言之,GN是一个元构建系统。它的输出文件作为Ninja(实际构建系统)的输入。
在这个文件中,hello_world目标是一个包含其他依赖项的组,尤其是cpp和rust。使用这个目标将同时构建它们。
group("hello_world") {
testonly = true
deps = [
":tests",
"cpp",
"rust",
]
}
**注意:**您可以查看 build/package.gni文件以了解更多关于GN如何定义Fuchsia包的信息。
这个例子输出Hello, world!并且是用c++和Rust编写的。每个依赖于语言的目录都有自己的构建。为特定示例定义包的gn文件,以及带有.cmx文件的元目录。
cmx文件被称为组件清单,描述了如何作为组件在Fuchsia上运行应用程序。这是创建Fuchsia包的正确方法。
:通过引用Fuchsia包URI运行Fuchsia组件。来运行其中一个例子:
-
确保fx服务在终端窗口中运行。如果它不运行,启动它:
fx serve
-
在另一个终端,运行:
fx shell run fuchsia-pkg://fuchsia.com/hello_world_cpp#meta/hello_world_cpp.cmx
这应该会失败,并显示一条消息,说明没有找到包。
注意: 如果成功并打印“Hello World!”,那么您当前的fx目标已经包含了这些示例。您可能需要修改目标并重新保存设备,然后返回到此页面继续。
将构建设置为包含示例
你可以在构建中包括这些例子,但你需要确定它们将包括在哪里:
- Base:包含在生成的铺装映像中的包。它们包含在空中更新中,并且总是作为一个单元进行更新。
- Cache:包括在铺装图像,但不包括在空中系统更新。这些包可以在任何可用的更新时间进行更新。
- Universe:包是附加的可选包,可以按需获取和运行,但不预置到任何铺装映像中。
(有关更多信息,请参见fx工作流。)
要将此包包含在Universe中,以便按需获取,请在设置产品和董事会时使用—with标志:
fx set … --with //examples/hello_world
fx build
现在您有了一个包含示例的构建。
运行DEMO
-
确保fx服务在终端窗口中运行。如果它不运行,启动它:
fx serve
-
在另一个终端,运行:
fx shell run fuchsia-pkg://fuchsia.com/hello_world_cpp#meta/hello_world_cpp.cmx
您应该会看到以下输出:
Hello, World!
**重要:**如果fx服务没有运行,您应该会从设备中得到一个错误(例如,fuchsia-pkg://fuchsia.com/hello_world_cpp#meta/hello_world_cpp.cmx: not found)。
如果字符串只匹配产品配置中的一个组件,run命令可以将字符串展开为URI:
fx shell run hello_world_cpp
如果有多个匹配项,命令会列出它们供您选择:
fuchsia-pkg://fuchsia.com/hello_world_cpp#meta/hello_world_cpp.cmx
fuchsia-pkg://fuchsia.com/hello_world_rust#meta/hello_world_rust.cmx
Error: “hello” matched multiple components.
您可以使用locate命令研究产品配置中的组件。
- 找到你最喜欢的组件。
fx shell locate hello_world_cpp
- 找到所有可运行的组件。
fx shell locate --list cmx
- 找到多个测试组件。
fx shell locate --list test