提供 SDK 套件

本頁面是提供 Fuchsia 包裹的教戰手冊 (從這裡稱為「套件」) 到 Fuchsia API 介面Fuchsia IDK

步驟如下:

  1. 必要條件
  2. 建立套件 API 介面
  3. 探索套件內容
  4. 提供 SDK 中的 API

必要條件

如要將套件納入 Fuchsia SDK 中,則必須先建立套件 「partner」或「public」類別中。(若需更多資訊,請參閱 將 API 升級為合作夥伴類別)。

建立套件 API 介面

系統會透過填入 sdk_fuchsia_package() 目標:expected_files_presentexpected_files_exact

您可以使用這兩個參數來強制執行下列動作:

  • expected_files_present:套件檔案存在於 SDK 套件的 資訊清單。
  • expected_files_exact:套件檔案存在於 SDK 套件的 資訊清單及其內容雜湊與來源中檢查的內容雜湊相符。

套件檔案可包含套件 contents 中的任何項目、 其中包括:

  • 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 介面項目位於 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 介面項目 (包括 meta.far) 包括:

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

提供 SDK 中的 API

如要提供套件給 Fuchsia API 介面,請遵循以下指南:

  1. 準備向 API 委員會成員申請程式碼審查

    這位成員可能會要求調整您的 API 介面 (請參閱 SDK 套件的程式碼範例審查)。

  2. 為 SDK 套件建立 sdk_fuchsia_package 目標 (範例)。

    這很可能會住在以下的fuchsia_package目標旁邊 已匯出。

  3. 請留意宣告的 API 介面,由 expected_files_exactexpected_files_present 參數分別位於 sdk_fuchsia_package目標。

    (請參閱「建立套件 API 介面」)。

  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 介面 (範例)。

    如果不同,請調整 expected_files_exactexpected_files_present 參數 並重複上一個建構步驟

  7. 修正任何其他 SDK 資訊清單相關變更 (包括更新) 後,建立 IDK 目標 //sdk/manifests/fuchsia_idk.manifest 檔案)。

    fx build final_fuchsia_idk
    
  8. (選用) 輸入 SDK 版本目錄,並預覽 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