目標
在建構元件指南中,我們發現了 定義執行檔的元件,然後封裝這些元件在這份文件中 我們將說明如何將資料檔案提供給同一套件中的元件。
包含 resource()
的密封資料檔案
在執行階段,元件能夠藉由下列特性讀取自己套件的內容:
存取其命名空間中的路徑 /pkg/
。resource()
範本可以是
用於將內容新增至可透過這種方式存取的套件。
import("//build/dist/resource.gni")
# List of greetings
resource("greetings") {
sources = [ "greetings.txt" ]
outputs = [ "data/{{source_file_part}}" ]
}
瞭解 {{source_file_part}}
和類似的語法,請參閱 GN 預留位置。
如需更多 resource()
使用操作說明,請前往 resource.gni
範本及相關範本 resource_group()
和 resource_tree()
更多使用 resource()
、resource_group()
和 resource_tree()
的範例
請前往其他套件資源。
透過元件加入資源
請為元件的資源目標新增依附元件,才能確保 所有資源都包含在同一個套件中。
import("//build/components.gni")
# Sends a random greeting to a client
executable("greeter") {
sources = [ "greeter.cc" ]
deps = [ ... ]
}
fuchsia_component("greeting_server") {
deps = [
":greeter",
":greetings",
]
manifest = "meta/greeting_server.cml"
}
在上述範例中,元件可在執行階段讀取檔案
位於路徑 /pkg/data/greetings.txt
的命名空間中無論如何
顯示此元件使用的套件 (使用 fuchsia_package()
定義)
包含在 API 中
包裝慣例
小型資料檔案 (小於 4 KB) 應封裝在
meta/
底下 而不需要如此將meta/
下的小型檔案封裝後, 以便封存在單一meta.far
檔案中 這能更有效率地儲存小型檔案否則,資料檔案通常會按照慣例封裝在
data/
底下。 但這並非技術相關規定
在不同套件中使用不同資源
有時候會想將同一個元件與不同的資料套件 檔案。
import("//build/dist/resource.gni")
import("//build/components.gni")
# Sends a random greeting to a client
executable("greeter") {
sources = [ "greeter.cc" ]
deps = [ ... ]
}
fuchsia_component("greeting_server") {
deps = [ ":greeter" ]
manifest = "meta/greeting_server.cml"
}
# List of production greetings.
# Contains only the finest greetings and the best regards.
resource("greetings") {
sources = [ "greetings.txt" ]
outputs = [ "data/greetings.txt" ]
}
fuchsia_package("greeting") {
deps = [
":greeting_server",
":greetings",
]
}
# Greetings for testing.
# Contains exactly one greeting so that tests are reproducible.
resource("test_greeting") {
testonly = true
sources = [ "test_greeting.txt" ]
outputs = [ "data/greetings.txt" ]
}
# Connects to the greeting server.
# Ensures that the expected greeting is sent back.
fuchsia_test_component("greeting_test_client") {
...
}
fuchsia_test_package("greeting_integration_test") {
test_components = [ ":greeting_test_client" ]
deps = [
":greeting_server",
":test_greeting",
]
}
上述範例將同一個 greeting_server
元件加至兩個
套件、一個用於正式環境,另一個用於測試。在這兩種情況下
元件會在 /pkg/data/greetings.txt
下找到檔案。不過,
這個檔案的內容會因正式版和測試版而異
視套件關聯而定