執行元件

本文說明如何將元件直接新增至元件 執行個體樹狀結構,並在執行階段與這些結構互動。

Fuchsia 除了 元件架構 針對特定用途如要使用 下列架構,請改為參閱對應的指南:

,瞭解如何調查及移除這項存取權。

概念

執行元件前,您應瞭解下列概念:

  • 在執行階段中, 元件執行個體樹狀結構 人脈 元件執行個體 組成父項和子項關係階層
  • 元件執行個體會經歷四個主要的生命週期狀態:建立、 啟動、停止和刪除
  • A 罩杯 元件 moniker 識別元件執行個體 透過頂層路徑找出這層結構中的重要檔案
  • 元件執行個體會「靜態」宣告為 容器中其他元件的子項 元件資訊清單動態建立 查看在執行階段期間的元件集合每個執行個體 由元件 nameurl 組成。
  • A 罩杯 元件網址 會識別元件元件 網址會由元件架構解析,通常會由元件架構中的資源 套件。

如要進一步瞭解元件執行,請參閱 元件生命週期

元件執行個體

執行元件的第一步是將新元件執行個體新增至 。元件執行個體在樹狀結構中的位置會決定該元件執行個體 可供使用 功能 ,直接在 Google Cloud 控制台實際操作。

探索靜態元件

靜態元件會宣告為 。您可以使用 ffx component show 判定路徑名稱和 靜態元件執行個體的元件網址:

ffx component show COMPONENT_NAME

COMPONENT_NAME 替換為元件名稱。以下範例 會顯示 pkg-resolver 元件的指令輸出內容:

$ ffx component show pkg-resolver
               Moniker: /core/pkg-resolver
                   URL: fuchsia-pkg://fuchsia.com/pkg-resolver#meta/pkg-resolver.cm
                  Type: CML static component
       Component State: Resolved
       Execution State: Running
...

您無法在執行階段建立或刪除靜態元件執行個體。

管理動態元件

系統會在集合內的執行階段建立動態元件。別擔心!您可以使用 ffx component create:建立新的元件執行個體,提供目標 現有集合中的路徑名稱,以及一個用來解決該集合的元件網址 元件:

ffx component create TARGET_MONIKER COMPONENT_URL

TARGET_MONIKER 替換為新元件的目的地路徑名稱 現有集合內,COMPONENT_URL 則是位置 元件。舉例來說,下列指令會 ffx-laboratory 集合中名為 hello-world 的元件執行個體:

$ ffx component create /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
URL: fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...

同樣地,使用 ffx component destroy 刪除動態元件執行個體 以達到最佳效果:

ffx component destroy TARGET_MONIKER

TARGET_MONIKER 替換為要刪除的元件的路徑名稱。 下列範例會刪除在上述步驟中建立的 hello-world 元件:

$ ffx component destroy /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Destroying component instance...

元件執行

樹狀結構中有元件執行個體後,您就可以啟動和停止目標。 使用 ffx component 存取這個執行個體。

啟動執行個體

使用 ffx component start 明確啟動元件執行個體:

ffx component start TARGET_MONIKER

TARGET_MONIKER 替換為元件的路徑名稱,即可開始使用。 以下範例會啟動先前建立的 hello-world 元件:

$ ffx component start /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Starting component instance...

停止執行個體

使用 ffx component stop 終止執行中的元件執行個體 使用 Moniker:

ffx component stop TARGET_MONIKER

TARGET_MONIKER 替換為要停止的元件的路徑名稱。 下列範例停止按照上方啟動的 hello-world 元件執行:

$ ffx component stop /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Stopping component instance...

執行元件

ffx component run 指令提供了執行基本元件的快速入門導覽課程 開發階段這是 ffx component create 的捷徑,後面接著 ffx component start:

ffx component run TARGET_MONIKER COMPONENT_URL

TARGET_MONIKER 替換為新元件的目的地路徑名稱 現有集合內,COMPONENT_URL 則是位置 元件。舉例來說,下列指令會 ffx-laboratory 中名為 hello-world-rust 的元件執行個體 集合:

$ ffx component run /core/ffx-laboratory:hello-world-rust fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
URL: fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
Moniker: /core/ffx-laboratory:hello-world-rust
Creating component instance...
Starting component instance...

上述範例相當於執行下列個別 ffx 指令:

$ ffx component create /core/ffx-laboratory:hello-world-rust fuchsia-pkg://fuchsia.com/hello-world-rust#meta/hello-world-rust.cm
$ ffx component start /core/ffx-laboratory:hello-world-rust

元件更新方式

變更元件時,通常需要更新其中一個元件 應用程式的執行個體舉例來說,您可以變更元件的 二進位檔,然後重新啟動元件,與新的二進位檔執行。或者,您可以變更 而在資訊清單中加入新能力路徑,並想讓這類能力 可在裝置上查看的路線。

使用 ffx component reload 指令,是最快速且完整的方式 重新載入元件。但不是唯一方法 方法,或許可以針對特殊用途使用更精確的作業。

本文將概略說明這些方法,在下方提供完整說明。

摘要

指令 說明 最新快訊 包裹 最新快訊 資訊清單 保留 資源
ffx 元件重新載入 轉機次數 更新 開始 好啊 好啊 好啊
ffx 元件 destroy/create/start 破壞 然後開始 好啊 好啊
ffx 元件執行作業 --recreate 破壞 然後開始 好啊 好啊
ffx 元件 停止/開始 和 開始 不含 毀滅 好啊
  • 「更新套件」這表示套件碼會在 已重新載入。
  • 「更新資訊清單」這表示系統會重新載入資訊清單快取,並將 包含 FIDL 檔案的轉送和其他資訊
  • 「保留資源」也就是說,儲存空間等資源 而會保留保留版本。

重新載入

更新元件的程式碼和資訊清單,同時保留具有以下功能的資源:

ffx component reload TARGET_MONIKER

這個指令會先關閉該元件,然後重新載入並重新啟動。 這個指令會更新套件和資訊清單,但不會刪除元件或 釋出資源

reload 指令會保留儲存空間等元件的資源。這個 如果初始化、取得或重建速度較慢,保留功能就能派上用場 處於特定狀態的偵錯資源

刪除元件時,重新載入的速度也比較快,例如 需要關閉再重新啟動工作階段或目標時 裝置/模擬器。

刪除/建立/開始

如要完全重新載入元件並捨棄取得的資源,請先刪除 現有的元件執行個體,然後重新啟動您可以使用下列功能:

$ ffx component destroy TARGET_MONIKER
$ ffx component create TARGET_MONIKER COMPONENT_URL
$ ffx component start TARGET_MONIKER

這個序列會重新載入套件和資訊清單,因此程式碼會 能力變更也會更新不過,如果刪除這個元件 就會釋出所有資源如果您的目標是: 從完全重新初始化的元件開始著手。

執行 --recreate

另一個方便的指令類似刪除/建立/開始序列 搭配 --recreate 使用 run 指令:

ffx component run TARGET_MONIKER COMPONENT_URL --recreate

停止/開始

雖然更新不是更新主要方式,但停止更新會連帶影響 然後啟動元件,該元件將會部分更新

$ ffx component stop TARGET_MONIKER
$ ffx component start TARGET_MONIKER

假設 ffx serve 這類套件管理員正在執行,那麼最新版的 載入並執行元件的程式碼不過,基於快取方式 Fuchsia 元件架構中運作,因此資訊清單不會更新。 資訊清單包含元件轉送設定,以及 *.cm 檔案。因此,如果您變更元件的能力路徑, 啟動元件不會納入這些變更。

ffx-laboratory

ffx-laboratory 是元件集合,可以提供一組受限的 也就是開發技術向 Google Cloud 支援團隊 下列元件中的元件:

ffx-laboratorytransient 集合。 這個集合中的元件執行個體即使停止,仍會保留下來。目的地: 刪除此集合中的元件執行個體,請使用 ffx component destroy 指令

疑難排解

本節包含執行 所有元件

無法解析元件

使用 ffx component startffx component run 時,您可能會看到 如果元件架構無法解析元件執行個體,就會發生下列錯誤:

$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Starting component instance...
Lifecycle protocol could not bind to component instance: InstanceCannotResolve

當元件網址無法解析為有效元件時,就會發生這種情況 資訊清單。

如要解決這個問題,請確認下列事項:

元件執行個體已存在

使用 ffx component createffx component run 時,您可能會看到 如果元件執行個體已存在,就會發生下列錯誤:

$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Component instance already exists. Use --recreate to destroy and recreate a new instance, or --name to create a new instance with a different name.

如果其他元件已使用目標路徑名稱,就會發生這種錯誤 執行個體。

如要解決這個問題,請使用 ffx component destroy 指令手動刪除執行個體:

$ ffx component destroy /core/ffx-laboratory:hello-world
Moniker: /core/ffx-laboratory:hello-world
Destroying component instance...

如果您使用的是 ffx component run,請新增 --recreate 標記以刪除 並重新建立執行個體:

$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm --recreate
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world
Creating component instance...
Component instance already exists. Destroying...
Recreating component instance...
Starting component instance...

或者,新增 --name 旗標,建立具有不同 名稱:

$ ffx component run /core/ffx-laboratory:hello-world fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm --name hello-world-2
URL: fuchsia-pkg://fuchsia.com/hello-world#meta/hello-world.cm
Moniker: /core/ffx-laboratory:hello-world-2
Creating component instance...
Starting component instance...