Version:

Settings Registry Chaining

设置注册表支持通过 JSON 导入器框架 合并其他设置注册表文件*.setreg(patch)的功能。 设置注册表文件中名为 $import 的任何字段都可用于指定要合并到设置注册表的其他*.setreg, *.setregpatch或任何其他 JSON 格式文件。

当使用 Merge API合并设置注册表文件时,它会触发逻辑以在设置文件中查找$import指令以合并其他 JSON 文件。 附加文件的合并顺序由$import指令的位置决定。

  • $import指令之前出现的任何设置都可以被导入文件的 JSON 内容覆盖。
  • $import指令之后显示的任何设置都可以覆盖导入文件的 JSON 内容。

使用 $import指令字符串的链导入 setreg 文件

以下示例演示如何使用 $import 指令通过字符串值合并另一个 Settings Registry 文件。

test.apple.setreg

{
    "pre_field": { "first": 1, "second": 2 },
    "$import": "test.ios.setreg",
    "post_field": { "1": 11, "2": 12 }
}

test.ios.setreg

{
    "pre_field": { "second": 202 },
    "post_field": { "2": 120 }
}

合并test.ios.setreg后,test.apple.setreg文件会生成以下最终 JSON 输出:

Import Result

{
    "pre_field": { "first": 1, "second": 202 },
    "post_field": { "1": 11, "2": 12 }
}

请注意,出现在 $import指令之前的 "pre_field""second"字段值(202)被导入的test.ios.setreg文件覆盖。 将差异与 $import指令后面出现的"post_field"进行对比"2"字段值 (12)来自原始的test.apple.setreg 文件。

使用$import指令对象链导入 setreg 文件

下面显示了如何使用$import指令来合并另一个使用带有 filename 键的 JSON 对象的 Settings Registry 文件。 在$import指令字符串上使用$import 指令对象的原因是,对象语法支持额外的 "patch" 字段。 "patch" 字段是一个 JSON 对象,其内容将直接合并到导入的内容数据上,然后再合并到初始 Settings Registry 文件数据上。

test.mobile.setreg

{
    "device_abis": [
        "arm64-v8a"
    ]
}

在将导入的内容读入内存之后,但在将内容应用于其余的test.android.setreg数据之前,test.android.setreg会修补test.mobile.setreg"device_abis"数组。

test.android.setreg

{
    "$import": {
        "filename": "test.mobile.setreg",
        "patch": {
            "device_abis": [
                "arm64-v8a",
                "x86_64"
            ]
        }
    }
}

使用 $import 指令导入多个 setreg 文件

下面显示了如何使用同一$import 键的多次使用来合并多个 Settings Registry 文件。

给定后面的两个 Settings Registry 文件 number.setregstring.setreg,合并的结果取决于文件在导入文件中的显示顺序。

示例数据

number.setreg

{
    "1": 7,
    "2": 14
}

string.setreg

{
    "1": "Hello",
    "3": "World"
}

示例 1

将聚合 setreg 文件与以下内容合并将合并 string.setregnumber.setreg.。

aggregate.setreg

{
    "$import": "number.setreg",
    "$import": "string.setreg"
}

"1"的值来自string.setreg文件。

aggregate.setreg (Post Import)

{
    "1": "Hello",
    "2": 14,
    "3": "World"
}

示例 2

交换 $import 指令的顺序会更改 Settings Registry 中值的结果。

aggregate2.setreg

{
    "$import": "string.setreg",
    "$import": "number.setreg"
}

"1"的值来自number.setreg文件。

aggregate2.setreg (Post Import)

{
    "1": 7,
    "2": 14,
    "3": "World"
}

使用前面示例中所示的方法,您可以使用 MergeSettingsFolderMergeSettingsFile 将一系列文件合并到设置注册表中, Merge APIs.