組合結構化設定

結構化設定可讓開發人員將元件在不同情況下以不同值套件。產品組合可讓開發人員根據高階平台和產品設定定義結構化設定值。

如要依產品或建構類型變更元件設定,您必須宣告結構定義、識別從產品設定衍生值的方式,以及產生元件設定。

定義設定結構定義

您的元件的資訊清單中必須有已宣告的設定結構定義。例如:

    ...
    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",
  ]

  # ...
},