结构化配置允许开发者在不同上下文中将具有不同值的组件打包。借助产品组装,开发者可以根据高级平台和产品配置定义结构化配置值。
如需按产品或 build 类型更改组件的配置,您必须声明架构,确定如何从产品的配置派生值,并生成组件的配置。
定义配置架构
组件必须在其清单中声明配置架构。例如:
...
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",
]
# ...
},
将 product assembly 用于其配置时,现在必须在大小限制中按如下方式指定 session_manager
:
{
component = "Component Framework"
pkgs = [
# ...
"session_manager",
]
# ...
},