结构化配置允许开发者将组件打包为 在不同情境下呈现不同值的效果。通过产品组装,开发者可以 根据概要平台和产品定义结构化配置值 配置。
要按产品或版本类型改变组件配置,您必须声明 架构,确定如何从产品配置派生值; 并生成组件配置
定义配置架构
您的组件必须在其清单中声明配置架构。例如:
...
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",
]
# ...
},