集成商开发套件 (IDK)

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

下载 Fuchsia IDK

支持

请注意,目前 Fuchsia 不支持公开使用 Fuchsia IDK。IDK 中的 API 会随时更改,恕不另行通知。

策略

Fuchsia 采用模块化方法向开发者公开 Fuchsia 平台。

这项策略的核心是从贡献更改中提及的 Git 代码库中提炼出来的集成商开发套件 (IDK)。此 IDK 包含开始构建和运行以 Fuchsia 为目标平台的程序所需的一小组库和工具。该 IDK 的内容代表了 Fuchsia 平台开发者向潜在开发者提供的最基本的合同。

Fuchsia IDK 不适合立即使用。它不包含任何对工具链或构建系统的引用,实际上也不需要这些对象的任何特定实例。虽然这可能被视为缺点,但这实际上是一项功能,是构建功能齐全的 SDK 的分层方法不可或缺的一部分。虽然 IDK 与特定构建系统无关,但其中包含的元数据可以用于为各种构建系统提供支持,从而生成各种 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. 后端,该后端使用构建系统生成包含已编译工件、源文件和元数据的 tarball;
  2. 前端,用于将转换应用于该 tar 压缩包并转换为 SDK 发行版等。

后端

后端实际上只是构建系统的一种专门用途。换句话说,运行 SDK 后端相当于将一组正确的参数传递给 Fuchsia 构建系统,后者反过来又会生成具有设置布局的归档。此处介绍了该后端的内部工作原理。

后端不仅能生成 IDK,还能用作 API 演变的控制机制。IDK 公开的 API Surface 是在表示其元素的一组参考文件中捕获的:开发者需要通过更新相关参考文件来明确确认对此 Surface 的修改,而其最新版本也是由后端生成。此机制的目的是尽早检测并防止 IDK 在发布周期中的意外更改,并为我们提供用于观察和查看 API Surface 演变的工具。

前端

术语“前端”用于描述提取 Fuchsia IDK 归档并对其应用转换的任何过程。

在 Fuchsia 树中,前端用于生成 SDK 分发,例如支持 Bazel 的工作区。

前端还可用于调整 Fuchsia IDK 归档,以便在特定开发环境中使用,例如为给定构建系统生成构建文件。如果归档本身中存在大量元数据,则允许进行此类处理。

IDK 和 IDK 插件

核心 IDK 由 //sdk:core 目标表示。该 IDK 由多个 IDK 插件构成:

  • //sdk:e2e_testing:Fucsia 的端到端测试框架;
  • //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 时,IDK 仅包含适用于当前主机架构(x64 或 arm64)的主机工具。在 x64 主机上构建 IDK 时,您还可以通过设置以下内容来包含 arm64 主机工具:

fx set 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 发行版

这是通过运行前端来实现的。如需了解详情,请参阅前端文档