贡献 SDK 软件包

本页面可用作向 Fuchsia API SurfaceFuchsia IDK 贡献 Fuchsia 软件包(下文简称“软件包”)的手册。

相关步骤如下:

  1. 前提条件
  2. 创建软件包 API Surface
  3. 探索软件包内容
  4. 在 SDK 中为 API 贡献代码

前提条件

如需将软件包添加到 Fuchsia SDK 中,软件包必须在 partnerpublic 类别中创建。(如需了解详情,请参阅将 API 提升为合作伙伴类别。)

创建软件包 API Surface

软件包 API Surface 通过填充 sdk_fuchsia_package() 目标中的两个参数(expected_files_presentexpected_files_exact)来创建。

您可以使用这两个参数来强制执行以下策略:

  • expected_files_present:软件包文件位于 SDK 软件包的清单中。
  • expected_files_exact:软件包文件存在于 SDK 软件包的清单中,并且其内容哈希与源代码中签入的内容哈希匹配。

软件包文件可以包含软件包的内容中的任何项,其中包括:

  • meta/ 内的文件
  • 基础软件包中的文件

探索软件包内容

在软件包的清单文件(通常命名为 package_manifest.json)中提供构成软件包的项目的列表

请参阅下面的示例清单文件:

{
  "version": "1",
  "repository": "fuchsia.com",
  "package": {
    "name": "example_package",
    "version": "0"
  },
  "blobs": [
    {
      "source_path": "path/to/meta.far",
      "path": "meta/",
      "merkle": "CONTENT_HASH",
      "size": 0
    },
    {
      "source_path": "path/to/bin/example",
      "path": "bin/example",
      "merkle": "CONTENT_HASH",
      "size": 0
    },
    {
      "source_path": "path/to/shared/bar.so",
      "path": "lib/bar.so",
      "merkle": "CONTENT_HASH",
      "size": 0
    }
  ]
}

在上面的示例中,可能的 API Surface 项(meta.far 除外)位于 blobs/path 实体中,其中包括:

  • bin/example
  • lib/far.so

使用 ffx package far list 命令,您可以探索 meta.far 的内容,例如:

$ ffx package far list path/to/meta.far
+-------------------------------+
| path                          |
+===============================+
| meta/contents                 |
+-------------------------------+
| meta/fuchsia.abi/abi-revision |
+-------------------------------+
| meta/component_name.cm        |
+-------------------------------+

此示例中可能的 API Surface 项(包括 meta.far)现在包括:

  • bin/example
  • lib/far.so
  • meta/contents
  • meta/fuchsia.abi/abi-revision
  • meta/component_name.cm

在 SDK 中为 API 做贡献

如需向 Fuchsia API Surface 贡献软件包,请遵循以下准则:

  1. 准备向 API 委员会成员申请代码审核

    此成员可能会要求对您的 API Surface 进行调整(请参阅 SDK 软件包的示例代码审核)。

  2. 为您的 SDK 软件包创建 sdk_fuchsia_package 目标(示例)。

    它可能位于要导出的 fuchsia_package 目标旁边。

  3. 注意声明的 API Surface,由 sdk_fuchsia_package 目标的 expected_files_exactexpected_files_present 参数表示。

    (请参阅创建软件包 API Surface)。

  4. sdk_fuchsia_package 目标添加到 //sdk/BUILD.gn 文件(示例)中 sdk_molecule(“core_packages”)目标的依赖项中。

    如需构建 IDK 目标(预计会无法通过黄金文件检查),请运行以下命令:

    fx build final_fuchsia_idk
    
  5. 按照输出的说明将生成的 content_checklist.json 文件复制到其黄金文件位置。

  6. 确认生成的 content_checklist.json 文件涵盖所需的 API Surface(示例)。

    如果没有,请调整 expected_files_exactexpected_files_present 参数,并重复前面的构建步骤。

  7. 在修复任何其他与 SDK 清单相关的更改(包括更新 //sdk/manifests/fuchsia_idk.manifest 文件)后,构建 IDK 目标。

    fx build final_fuchsia_idk
    
  8. (可选)输入 SDK build 目录并预览您的 SDK 软件包清单。

    在 build 目录(例如 out/default)中,执行以下操作:

    1. 将目录更改为 sdk/archive,例如:

      cd sdk/archive
      
    2. 运行以下命令:

      mkdir output && tar zxvf fuchsia_idk.tar.gz -C output && cd output
      

      以 x64 为目标平台的软件包的清单位于 packages/{PACKAGE_DISTRIBUTION_NAME}/x64/release/package_manifest.json