集成商开发套件 (IDK)

此文件夹包含有关开发 Fuchsia 集成器开发套件 (IDK) 的信息。

下载 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 文件中进行本地编码。这个操作是针对多个 原因:

  1. 修改代码的开发者需要了解 外部客户;
  2. 将该代码发布到 IDK 可能需要开发者提供额外的输入, 告知构建系统如何在 SDK 中正确包含该代码;
  3. 如果知道代码是否包含在 IDK 中,便会允许构建 系统对该代码进行额外的检查,以确保符合 IDK 标准。

若要在 IDK 中显示为可用代码,一段代码必须遵循 标准和准则

基础架构

SDK 创建流水线由两部分组成:

  1. 后端,使用构建系统生成包含以下内容的 tar 压缩文件: 已编译的工件、源文件和元数据;
  2. 前端,用于对该 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 的内容 意外修改。未确认的修改会导致构建失败 直到源代码树中的相关参考文件得到更新。 在本地迭代某些公共 API 时,必须反复更新 那么参考文件可能会变得非常乏味为了将构建错误转变为警告 配置,然后使用以下额外的 GN 参数进行构建:warn_no_sdk_changes=true

生成 SDK 发行版

这是通过运行前端来完成的。请参阅前端文档 了解详情。