使用 config_data() 配置产品专用配置

有时,一个组件在一个仓库中定义,但其数据是在 另一个代码库。例如,fuchsia.git 定义了一项字体提供程序服务, 而是 workstation_eng 产品配置(在其他代码库中定义) 定义哪些字体可供字体提供程序使用。

借助 config_data() 模板,开发者可以将文件提供给 其他软件包中的组件,而不必直接更改内容 该软件包的名称

import("//build/config.gni")

config_data("workstation_fonts") {
  for_pkg = "fonts"
  sources = [
    "RobotoMono-Light.ttf",
    "RobotoMono-Medium.ttf",
    "RobotoMono-Regular.ttf",
  ]
  outputs = [ "fonts/{{source_file_part}}" ]
}

在组件中使用 config_data()

请在组件清单 (.cml) 文件中添加以下内容:

{
    use: [
        {
            directory: "config-data",
            rights: [ "r*" ],
            path: "/config/data",
        },
    ],
}

在运行时,您的组件将能够读取该路径下的配置文件 /config/data

为了实现上述功能,必须向组件提供 "config-data"。 例如,您家长的声明可能如下所示:

{
    children: [
        {
            name: "font-provider",
            url: "fuchsia-pkg://fuchsia.com/fonts#meta/font-provider.cm",
        },
    ],
    offer: [
        {
            directory: "config-data",
            from: "parent",
            to: [ "#font-provider" ],
            subdir: "fonts",
        },
    ],
}

请注意,上面的 for_pkg = ...subdir: ... 在此代码中进行了协调 它们将相同的值设为"fonts"

测试 config_data()

测试领域中被测组件可以有一个 "config-data" 目录 向其路由的方式与生产组件大致相同。

如果您想为被测组件提供不同的配置数据, 只需为会路由的 for_pkgsubdir 使用适当的值 将测试数据复制到测试组件

config_data() 的运作方式

build 配置中定义的所有 config_data() 目标都会收集 将其文件复制到一个名为 config-data 的软件包中。此软件包已定义 作为基础软件包集的一部分在系统组件中此 软件包复制 config_data() 定义中的参数,以便它们 可以作为子目录路由到需要它们的组件。

已知问题

  • config-data 软件包(从 config_data() 收集所有文件) 是基本软件包的一部分。因此,其内容 不会在 fx serve 开发者工作流程中更新。要更新数据文件,您需要 必须重新更新设备或对设备执行 OTA 更新,或者如果使用模拟器重新编译系统 然后重启模拟器。

  • 定义 config_data() 还需要更改组件清单 文件(如上所示)。使用的某些字符串在多个版本中重复出现 这很容易出错出错时,可能会很困难 进行问题排查。

  • config_data() 目标定义知道软件包的名称 预计会使用这些数据的组件。这会促进易碎 合同。例如,为了 平台为树外组件提供 ICU 数据,以及 存在一些 Google 软件包中 Fuchsia 源代码树。

由于上述问题,建议您改用其他 配置机制