此文件夹包含有关开发 Fuchsia 集成器开发套件 (IDK) 的信息。
支持
请注意,目前 Fuchsia 不支持公开使用 Fuchsia IDK。IDK 中的 API 可能会随时发生更改,恕不另行通知。
策略
Fuchsia 采用模块化方法向开发者提供 Fuchsia 平台。
这项策略的核心是集成商开发套件 (IDK), 贡献更改中提到的 Git 代码库版本。 此 IDK 包含开始构建所需的一小部分库和工具 以及正在运行针对 Fuchsia 的程序。 该 IDK 的内容代表了 Fuchsia 所定义的最基本协定, 为潜在开发者提供的平台和平台
Fuchsia IDK 不适合立即使用。 它不包含任何对工具链或构建系统的引用,实际上 不需要这些元素的任何特定实例。 虽然这可能被视为一种缺点,但实际上它是一项功能, 是构建功能齐全的 SDK 的分层方法不可或缺的一部分。 即使 IDK 与特定的构建系统无关, 元数据,可用于为各种 build 提供支持 从而生成各种 SDK 发行版。 将 IDK 与这些不同的发行版完全分开有助于 以实现非常灵活的发布方案和迭代周期。
本文档重点介绍
IDK。
IDK 中包含的文档(托管在 //idk/docs
下)包含
有关如何使用 IDK 的信息。
最后,您可以在 //scripts/sdk
下找到 SDK 分发的一些示例;
最值得注意的是,它包含一个生成工作区的前端
使用 Bazel 实现 Fuchsia 开发 - 此发行版
目前用于在发布 IDK 版本之前对其进行测试。
IDK 中包含哪些内容?
默认情况下, Fuchsia 树中的一段代码无法添加到任何 IDK: 都只能选择接受。此外,这一决定 在代码的 build 文件中进行本地编码。这个操作是针对多个 原因:
- 修改代码的开发者需要了解 外部客户;
- 将该代码发布到 IDK 可能需要开发者提供额外的输入, 告知构建系统如何在 SDK 中正确包含该代码;
- 如果知道代码是否包含在 IDK 中,便会允许构建 系统对该代码进行额外的检查,以确保符合 IDK 标准。
若要在 IDK 中显示为可用代码,一段代码必须遵循 标准和准则。
基础架构
SDK 创建流水线由两部分组成:
- 后端,使用构建系统生成包含以下内容的 tar 压缩文件: 已编译的工件、源文件和元数据;
- 前端,用于对该 tar 压缩文件进行转换并转换为 例如SDK 发行版。
后端
后端实际上只是构建系统的一种特殊用途。在其他 运行 SDK 后端相当于将一组正确的参数传递给 Fuchsia 构建系统反过来会生成一个存档,其中包含 设置布局。 此处介绍了后端的内部工作原理。
后端不仅生成 IDK,还用作控制机制 。IDK 公开的 API Surface 在一组 表示其元素的参考文件:对此 Surface 的修改需要 通过更新相关参考文件来获得开发者的明确认可, 其最新版本也由后端生成。Google Cloud 这种机制可以尽早检测并防止对 IDK 的意外更改。 并向我们提供用于观察和审核 API Surface 的演变过程
前端
术语“前端”用于描述提取 Fuchsia IDK 的任何进程 并对其应用转换
在 Fuchsia 树中,前端用于生成 SDK 分布,例如一个支持 Bazel 的工作区。
前端也可用于调整 Fuchsia IDK 档案,以便在 特定开发环境,例如为 给定构建系统。归档中存在大量元数据 支持这种处理方式。
IDK 和 IDK 插件
Core IDK 由 //sdk:core
目标表示。
该 IDK 由多个 IDK 插件作为补充:
//sdk:e2e_testing
:适用于 Fuchsia 的端到端测试框架;//sdk:fuchsia_dart
:一个用于构建 mod 和代理的 Dart SDK。
在内部,这些目标是 sdk
GN 模板的所有实例。
测试方案
生成 IDK 归档文件
代表 IDK 的各种目标始终包含在 build 图中。 为了构建 IDK 的内容,构建其中一个 目标。
请注意,这会生成并验证 IDK 内容, 包含这些内容的归档
如需构建归档文件,请运行以下命令:
fx set minimal.x64
fx build sdk:final_fuchsia_idk
生成的归档文件将位于
<outdir>/sdk/archive/fuchsia_idk.tar.gz
。
IDK 包含 Fuchsia 开发所需的主机工具。默认情况下,当 IDK 是在本地构建的,它仅包含适用于当前主机的主机工具 x64 或 arm64 架构在 x64 主机上构建 IDK 时,您可以 还可以通过设置包含 arm64 主机工具:
fx 设置 minimum.x64 --args=sdk_cross_compile_host_tools=true
向 IDK 添加内容
第一步是将这些内容提供给 SDK。方法是使用
后端文档中列出的一组模板。
下一步是将相应内容添加到现有 IDK 定义。对于目标
//path/to/my:super_target
,则可通过将隐式
//path/to/my:super_target_sdk
定位 sdk
目标的依赖项。
请注意,某些内容类型需要描述状态的 .api
源文件
IDK 元素 API 的一部分。
这些文件由构建系统生成。
为了植入此类文件的第一个版本,请让构建系统通知您
创建此文件并将其留空
最后再次运行构建:它会再次告知您
版本。
将与 IDK 相关的错误变成警告
可以通过一些构建步骤验证 IDK 的内容
意外修改。未确认的修改会导致构建失败
直到源代码树中的相关参考文件得到更新。
在本地迭代某些公共 API 时,必须反复更新
那么参考文件可能会变得非常乏味为了将构建错误转变为警告
配置,然后使用以下额外的 GN 参数进行构建:warn_no_sdk_changes=true
。
生成 SDK 发行版
这是通过运行前端来完成的。请参阅前端文档 了解详情。