整合商開發套件 (IDK)

這個資料夾包含 Fuchsia 整合商開發套件 (IDK) 的相關資訊。

下載 Fuchsia IDK

支援

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

策略遊戲

Fuchsia 採取模組化的做法,向開發人員公開 Fuchsia 平台。

這項策略的核心是整合商開發套件 (IDK),請提取「貢獻變更」一節所述的 Git 存放區。這個 IDK 包含開始建構及執行以 Fuchsia 為目標的程式所需的一小部分程式庫和工具。該 IDK 的內容代表 Fuchsia 平台開發人員為潛在開發人員提供的最基本合約。

Fuchsia IDK 不適合立即使用。不含任何工具鍊或建構系統的參照,且實際上並不需要任何特定的執行個體。雖然這可能為缺點,但這其實是功能,是建構功能完整 SDK 的分層式方法中的一部分。即使 IDK 並未與特定建構系統建立關聯,IDK 包含的中繼資料,可用來產生對各種建構系統的支援,從而產生各種 SDK 發布版本。將 IDK 與各種發布版本保持清楚區隔,可達到極具彈性的版本配置和疊代週期。

目前的說明文件著重於 IDK 的建立程序。包含在 //idk/docs 下的 IDK 中,包含如何使用 IDK 的相關資訊。最後,您可以在 //scripts/sdk 底下找到 SDK 發行版本的例子;最值得注意的是,其中最主要包含前端會產生一個工作區,可讓使用 Bazel 執行 Fuchsia 開發,而這個發布版本目前用於測試 IDK 發布前的測試版本。

IDK 包含哪些內容?

根據預設,Fchsia 樹狀圖中的一段程式碼無法新增至任何 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 設定 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 的狀態。這些檔案是由建構系統產生。為了看到這類檔案的第一個版本,請讓建構系統告知預期找到檔案的位置,然後建立這個檔案並留空,最後再次執行建構作業:系統會再次指示您從何處取得初始版本。

已執行一些建構步驟,確認 IdP 的內容不會意外修改。未經確認的修改會導致建構失敗,直到來源樹狀結構中的相關參考檔案更新為止。在本機疊代某些公用 API 時,需要重複更新參照檔案可能相當繁瑣。如要將建構錯誤轉換成警告,請在設定之後使用這個額外的 GN 引數:warn_no_sdk_changes=true

製作 SDK 發布流程

這是藉由執行前端來達成。詳情請參閱前端說明文件