本页面可用作向 Fuchsia API Surface 和 Fuchsia IDK 贡献 Fuchsia 软件包(下文简称“软件包”)的手册。
相关步骤如下:
前提条件
如需将软件包添加到 Fuchsia SDK 中,软件包必须在 partner
或 public
类别中创建。(如需了解详情,请参阅将 API 提升为合作伙伴类别。)
创建软件包 API Surface
软件包 API Surface 通过填充 sdk_fuchsia_package()
目标中的两个参数(expected_files_present
和 expected_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 贡献软件包,请遵循以下准则:
准备向 API 委员会成员申请代码审核。
此成员可能会要求对您的 API Surface 进行调整(请参阅 SDK 软件包的示例代码审核)。
为您的 SDK 软件包创建
sdk_fuchsia_package
目标(示例)。它可能位于要导出的
fuchsia_package
目标旁边。注意声明的 API Surface,由
sdk_fuchsia_package
目标的expected_files_exact
和expected_files_present
参数表示。(请参阅创建软件包 API Surface)。
将
sdk_fuchsia_package
目标添加到//sdk/BUILD.gn
文件(示例)中sdk_molecule
(“core_packages”)目标的依赖项中。如需构建 IDK 目标(预计会无法通过黄金文件检查),请运行以下命令:
fx build final_fuchsia_idk
按照输出的说明将生成的
content_checklist.json
文件复制到其黄金文件位置。确认生成的
content_checklist.json
文件涵盖所需的 API Surface(示例)。如果没有,请调整
expected_files_exact
和expected_files_present
参数,并重复前面的构建步骤。在修复任何其他与 SDK 清单相关的更改(包括更新
//sdk/manifests/fuchsia_idk.manifest
文件)后,构建 IDK 目标。fx build final_fuchsia_idk
(可选)输入 SDK build 目录并预览您的 SDK 软件包清单。
在 build 目录(例如
out/default
)中,执行以下操作:将目录更改为
sdk/archive
,例如:cd sdk/archive
运行以下命令:
mkdir output && tar zxvf fuchsia_idk.tar.gz -C output && cd output
以 x64 为目标平台的软件包的清单位于
packages/{PACKAGE_DISTRIBUTION_NAME}/x64/release/package_manifest.json