借助 FFX 的配置管理功能,您无需重新编译即可配置 FFX 代码。概括来讲,可将配置视为多层键值对映射。
值解析流程
配置管理代码会在多个位置搜索与键关联的值。系统会按以下顺序执行搜索,并返回找到的第一个值:
运行时配置
运行时配置由用户在调用 ffx 时在命令行中设置。顶级命令接受配置参数:
$ ffx --config "property-name=value" ...
运行时参数采用逗号分隔的键值对格式(“{key}={value},{key}={value},等等”),因为它不是强类型,因此此处设置的任何配置都将被视为字符串。
守护程序会作为自己的进程运行,目前,如果守护程序已启动,运行时配置不会从 CLI 传输到守护程序。如果您想使用运行时配置配置守护程序,则需要手动运行守护程序命令:
$ ffx --config "config-test=runtime" daemon start --background
用户配置
用户配置是在用户的主目录中设置的配置,适用于该用户对 ffx 的所有调用。只有运行时配置会替换用户配置。
用户配置是使用 ffx config set
命令设置的。
$ ffx config set property-name value
build 目录配置
构建配置与构建目录相关联。它旨在用于设置描述 build 输出的属性。它应在构建过程中生成,并且被 ffx 视为只读。
文件格式为 JSON 对象:
{
"product": {
"path": "/out/project/dir/product_bundle",
"name": "sample_project"
},
"fidl": {
"ir": "$BUILD_DIR/fidling/gen/ir_root"
}
}
本例中的 $BUILD_DIR
不是 shell 环境变量,而是内部 ffx 变量占位符。如需了解详情,请参阅值表示法。
全局配置
全局配置应为系统级配置级别。在主机系统上安装 ffx 时,旨在为一组用户设置相同的组织属性。
该文件是在 ffx
工作流程之外创建的,并且 ffx 会被视为只读文件。
文件格式为 JSON 对象:
{
"gcs": {
"release_bucket": "gs://project/releases",
}
}
默认配置
默认配置通过 GN build 规则在所有子命令中提供,并且是硬编码的,不可更改。
值表示法
存储在 ffx 配置中的值会编码为 JSON 值。
- 数字,包括整数和浮点数。
- 字符串
- 布尔值,true|false。
- null,表示为
null
- 值数组
- 对象
字符串插值
某些字符串可以包含插值的占位符。这样,您就可以相对于目录设置属性,或解析正在运行的进程环境中的值。
ffx 定义的占位符如下:
$BUILD_DIR
- 运行 ffx 命令时确定的 build 目录。如果未找到或未配置 build 目录,则此值可以为空。$CACHE
- 用于存储缓存数据的目录。$CONFIG
- 用于存储配置数据的目录。$DATA
- 用于存储持久性数据的目录。$SHARED_DATA
- 用于存储在当前宿主机上的所有ffx
隔离容器和实例之间共享的永久性数据的目录。这适用于用于管理全局状态的数据,例如正在打开 TCP/IP 端口的进程。$FIND_WORKSPACE_ROOT
- 包含 Bazel 工作区的第一个父级目录。$HOME
- 当前用户的主目录。$RUNTIME
- 用于存储所有运行时信息的目录。在 Linux 上,此文件位置通常为$HOME/.local/share/Fuchsia/ffx
。
此外,任何由 $
后跟全部大写名称、数字和其他允许的字符组成的字符串都会从进程环境中解析。
数组处理
数组通常用于提供可能值的有序列表,然后返回第一个非空值。
例如,尝试使用环境中的 ssh 密钥,否则回退到标准位置:
{
"ssh_key": [ "$SSH_KEY_FROM_ENV", "$HOME/.ssh/ssh_key"]
}
## Configuration environment settings
The command collection `ffx config env` is used to manage the configuration
of how to locate the various configuration level data files.
For example, to set the path to the global configuration:
```sh
$ ffx config env set --level global /etc/fuchsia/ffx_global_props.json