結構化設定可讓開發人員將元件在不同情況下以不同值套件。產品組合可讓開發人員根據高階平台和產品設定定義結構化設定值。
如要依產品或建構類型變更元件設定,您必須宣告結構定義、識別從產品設定衍生值的方式,以及產生元件設定。
定義設定結構定義
您的元件的資訊清單中必須有已宣告的設定結構定義。例如:
...
config: {
enable_foo: { type: "bool" },
},
詳情請參閱結構化設定的說明文件。
辨別產品組裝設定
許多設定選項都可以表示 eng
版本和非 eng
版本之間的差異。
如果元件的設定無法單從建構類型進行,請發送電子郵件給軟體組合清單,討論要使用的結構定義 (請注意,這份清單可公開檢視,請使用 Google 內部清單討論僅限內部的設定)。決定結構定義後,請將其新增至產品設定程式庫。
設定套件
決定套件名稱和元件的資訊清單資源路徑。定義邏輯,以便在產品組合工具中填入設定。舉例來說,如要根據建構類型設定值:
use crate::subsystems::prelude::*;
use assembly_config_schema::platform_config::example_config::ExampleConfig;
pub(crate) struct ExampleSubsystemConfig;
impl DefineSubsystemConfiguration<ExampleConfig> for ExampleSubsystemConfig {
fn define_configuration(
context: &ConfigurationContext<'_>,
example_config: &ExampleConfig,
builder: &mut dyn ConfigurationBuilder,
) -> anyhow::Result<()> {
// If the build-type is eng, enabled "foo" for the example component.
builder
.package("configured_by_assembly")
.component("meta/to_configure.cm")?
.field("enable_foo", matches!(context.build_type, BuildType::Eng))?;
if example_config.include_example_aib {
builder.platform_bundle("example_assembly_bundle");
}
Ok(())
}
}
更新大小限制設定 (如有)
為套件產生設定值時,產品組合必須將輸出內容寫入建構目錄中的不同位置,而不是建構系統通常產生的路徑。二進位檔大小檢查需要依路徑來封裝建構目錄中的資訊清單,因此請務必更新建構設定規則中的套件輸出路徑。
舉例來說,在由產品組合產生設定之前,session_manager
套件會列在核心產品的大小限制中,如下所示:
{
component = "Component Framework"
src = [
# ...
"packages/base/session_manager",
]
# ...
},
將產品組合用於設定時,現在必須在大小限制中指定 session_manager
,如下所示:
{
component = "Component Framework"
pkgs = [
# ...
"session_manager",
]
# ...
},