整合商開發套件 (IDK)

這個資料夾包含 Fuchsia Integrator Development Kit (IDK) 的開發相關資訊。

下載 Fuchsia IDK

支援

請注意,Fuchsia 目前不支援公開使用 Fuchsia IDK。IDK 中的 API 可能隨時變更,恕不另行通知。

策略遊戲

Fuchsia 採用模組化方法,向開發人員公開 Fuchsia 平台。

這項策略的核心是整合器開發套件 (IDK),這是從「提供變更」一節中提及的 Git 存放區中提煉出來的。這個 IDK 包含一小組程式庫和工具,可用於開始建構及執行以 Fuchsia 為目標的程式。該 IDK 的內容代表 Fuchsia 平台開發人員向潛在開發人員提供的,最基本的合約。

Fuchsia IDK 不適合立即使用。不包含任何工具鍊或建構系統的參照,而且實際上也不需要任何特定的工具鍊或建構系統例項。雖然這可能被視為缺點,但實際上這是一項功能,是建構功能完整 SDK 的層級化方法不可或缺的一部分。雖然 IDK 並未與特定建構系統綁定,但其中包含可用於產生各種建構系統支援的結構化資料,進而產生各種 SDK 發行版本。將 IDK 與這些各種發行版清楚區隔,可讓您建立非常彈性的發布方案和迭代週期。

本說明文件著重於 IDDK 建立程序的詳細資料。在 //idk/docs 下代管的 IDK 中包含的說明文件,包含有關如何使用 IDK 的資訊。

哪些內容屬於 IDK?

根據預設,Fuchsia 樹狀結構中的程式碼片段無法新增至任何 IDK:參與是嚴格的選擇加入決定。此外,這個決定會在程式碼的建構檔案中以本機方式編碼。這麼做的原因有幾個:

  1. 修改程式碼的開發人員必須盡早瞭解對外部客戶的潛在影響。
  2. 將該程式碼發布至 IDK 可能需要開發人員提供額外輸入內容,以便建構系統瞭解如何在 SDK 中正確加入該程式碼。
  3. 知道程式碼是否可納入 IDK 後,建構系統就能對該程式碼執行額外檢查,確保符合 IDK 標準。

程式碼必須遵循一套標準和規範,才能在 IDK 中使用。

基礎設施

SDK 建立管道包含兩個部分:

  1. 後端:使用建構系統產生 tarball,其中包含已編譯的構件、來源檔案和中繼資料。
  2. 前端會將轉換套用至 tarball,並轉換成例如 SDK 發布版本。

後端

後端其實只是建構系統的特殊用途。換句話說,執行 SDK 後端等同於將正確的引數組合傳遞至 Fuchsia 建構系統,後者會依此產生含有設定版面配置的封存檔。這篇文章說明瞭後端的內部運作方式。

後端不僅會產生 IDK,還可用來做為 API 演進的控制機制。由 IDK 公開的 API 途徑會在一系列代表其元素的參考檔案中擷取:開發人員必須透過更新相關參考檔案 (後端也會產生最新版本),明確確認對此途徑所做的修改。這個機制的目的是在發布週期中盡早偵測並避免 IDK 發生意外變更,並提供工具來觀察及審查 API 介面的演進情形。

前端

前端一詞用來描述任何擷取 Fuchsia IDK 封存檔並套用轉換作業的程序。

在 Fuchsia 樹狀結構中,前端用於產生 SDK 發行版本,例如可使用 Bazel 的專用工作區。

前端也可用於調整 Fuchsia IDK 封存檔,以便在特定開發環境中使用,例如為特定建構系統產生建構檔案。封存檔本身含有大量中繼資料,因此可進行這類處理作業。

IDK 和 IDK 外掛程式

核心 IDK 會以 //sdk:core 目標表示。該 IDK 可搭配多個 IDK 外掛程式:

  • //sdk:e2e_testing:Fuchsia 的端對端測試架構;
  • //sdk:fuchsia_dart:用於建構模組和代理程式的 Dart SDK。

在內部,這些目標都是 sdk GN 範本的所有例項。

食譜

產生 IDK 封存檔

代表 IDK 的各種目標一律會納入建構圖表。如要建構 IDK 的內容,請建構上述任一目標。

請注意,這會產生並驗證 IDK 內容,但不會實際建構包含這些內容的封存檔。

如要建構封存檔案,請執行下列指令:

fx set minimal.x64
fx build sdk:final_fuchsia_idk

產生的封存檔案會位於 <outdir>/sdk/archive/fuchsia_idk.tar.gz 底下。

IDK 包含 Fuchsia 開發作業所需的主機工具。根據預設,當 IDK 在本機建構時,只會包含目前主機架構 (x64 或 arm64) 的主機工具。在 x64 主機上建構 IDK 時,您也可以透過設定加入 arm64 主機工具:

fx set minimal.x64 --args=sdk_cross_compile_host_tools=true

在 IDK 中新增內容

第一步是讓 SDK 可使用該內容。方法是使用後端說明文件中列出的一系列範本。下一步是將該內容新增至現有的 IDK 定義。針對目標 //path/to/my:super_target,您可以將隱含的 //path/to/my:super_target_sdk 目標設為 sdk 目標的依附元件,藉此達成這項目標。

請注意,某些內容類型需要 .api 來源檔案,用於說明 IDK 元素的 API 狀態。這些檔案是由建構系統產生。如要為這類檔案的初始版本播種,請讓建構系統告訴您預期的檔案位置,然後建立這個檔案並將其保留為空白,最後再次執行建構作業:系統會再次告訴您從何處取得初始版本。

您可以透過一些建構步驟,驗證 IDK 的內容不會遭到意外修改。未經確認的修改會導致建構失敗,直到相關參考檔案在來源樹狀結構中更新為止。在本機重複執行某些公開 API 時,不斷更新參照檔案可能會很繁瑣。如要將建構錯誤轉換為警告,請先設定,然後使用這個額外的 GN 引數進行建構:warn_no_sdk_changes=true