组合结构化配置

结构化配置允许开发者将组件打包为 在不同情境下呈现不同值的效果。通过产品组装,开发者可以 根据概要平台和产品定义结构化配置值 配置。

要按产品或版本类型改变组件配置,您必须声明 架构,确定如何从产品配置派生值; 并生成组件配置

定义配置架构

您的组件必须在其清单中声明配置架构。例如:

    ...
    config: {
        enable_foo: { type: "bool" },
    },

如需了解详情,请参阅结构化配置文档

确定产品装配配置

许多配置选项都可以表示 eng build 和非 eng build

如果无法仅根据 build 类型推断出组件的配置, 通过电子邮件发送软件汇编列表,讨论应该在哪些架构下 使用(请注意,此列表可公开查看,请使用 Google 内部 讨论仅限内部的配置)。确定架构后 请将其添加到产品配置库中。

配置软件包

确定您的软件包名称和组件的清单资源路径。 定义逻辑以在产品组件中为其填充配置 工具。例如,根据 build 配置值 类型:

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(())
    }
}

更新大小限制配置(如有)

为软件包生成配置值时,产品组合必须写入 将其输出保存到 build 目录中与路径不同的位置 通常由构建系统生成一些二进制文件大小检查依赖于 build 目录中存在的软件包清单的路径,因此请务必 在 build 配置规则中更新软件包的输出路径。

例如,在产品组合生成配置之前, session_manager 软件包按核心产品的尺寸列出 限制为:

{
  component = "Component Framework"
  src = [
    # ...

    "packages/base/session_manager",
  ]

  # ...
},

将产品组件用于其配置时,session_manager 现在必须为 指定为:

{
  component = "Component Framework"
  pkgs = [
    # ...

    "session_manager",
  ]

  # ...
},