贡献 SDK 软件包

本页面是贡献 Fuchsia 软件包的手册。 (从现在起简称为“packages”)传输到 Fuchsia API SurfaceFuchsia IDK

具体步骤如下:

  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
    }
  ]
}

在上面的示例中,除了 meta.far 之外,可能的 API Surface 项位于 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,由 expected_files_exactexpected_files_present 参数的 sdk_fuchsia_package 目标。

    (请参阅创建软件包 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 文件)。

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

    在构建目录(例如 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