提供 SDK 套件

本頁面將做為教戰手冊,說明如何將 Fuchsia 套件 (原本只介紹「套件」) 提供給 Fuchsia API 介面Fuchsia IDK

步驟如下:

  1. 必要條件
  2. 建立套件 API 介面
  3. 探索套件內容
  4. 在 SDK 中協助改善 API

必要條件

如要納入 Fuchsia SDK 中的套件,必須在 partnerpublic 類別中建立套件。(詳情請參閱將 API 升級為合作夥伴類別。)

建立套件 API 介面

只要在 sdk_fuchsia_package() 目標中填入 expected_files_presentexpected_files_exact 這兩個參數,即可建立套件 API 介面。

使用這兩個參數可強制執行以下操作:

  • 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 介面項目 (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 介面項目 (包括 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 介面,以 sdk_fuchsia_package 目標的 expected_files_exactexpected_files_present 參數代表。

    (請參閱「建立套件 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 資訊清單相關變更 (包括更新 //sdk/manifests/fuchsia_idk.manifest 檔案) 後,建構 IDK 目標。

    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