按多个维度定位资源(嵌套定位)

若要按多个维度(纹理压缩格式、设备层级、国家/地区组合)定位资源包或 bundle 模块中的文件夹,您可以使用嵌套定位。

借助嵌套定位,您可以定义最多包含 2 个定位维度的定位条件。

格式

若要按多个维度定位文件夹,请在文件夹名称的一系列 # 标签后缀中指定维度列表。

例如,如需按纹理压缩格式 ASTC 和设备层级 2 定位资源文件夹,定位条件应如下所示:

...
.../level1/src/main/assets/character-textures#tcf_astc#tier_2/
...

如果您使用 Gradle 构建应用,系统会从分发给用户设备的最终 APK 或资源包中的目录名称里删除定位后缀。

如果直接使用 bundletool,请指定是否要在 BundleConfig.json 中分别删除每个维度的后缀。以设备层级定位为例:

{
  ...
  "optimizations": {
    "splitsConfig": {
      "splitDimension": [
      ...
      {
        "value": "DEVICE_TIER",
        "negate": false,
        "suffixStripping": {
          "enabled": true,
      }],
    }
  }
}

bundletool 1.14.1 或更高版本以及 Android Gradle 插件 8.2.0-alpha01 或更高版本均支持嵌套定位,其中 Android Gradle 插件 8.2.0-alpha01 或更高版本需要使用 Gradle 8.1 或更高版本。

如需详细了解如何为每个维度自定义具体配置,请参阅针对每个定位维度的文档。

限制

  • 您最多只能使用 2 个嵌套维度。换句话说,您无法同时按设备层级、纹理压缩格式和国家/地区组合来定位文件夹,而是只能选择其中 2 个维度。

  • 您应在文件夹路径的同一级别指定所需的 2 个嵌套维度。例如,禁止使用以下文件夹定位条件,因为 #tcf_astc 和 #tier_2 显示在不同的路径片段中:

.../level1/src/main/assets/character-textures#tcf_astc/level1#tier_2/
  • 在整个 bundle 中使用的嵌套维度必须保持一致。例如,不能对一个资源包嵌套设备层级和国家/地区组合,而对另一个资源包嵌套国家/地区组合和纹理压缩格式。

  • 您在整个 bundle 中针对 2 个维度使用的值必须相同,并且您必须指定值的完整组合。例如,如果您想要嵌套纹理压缩格式 (TCF) 和国家/地区组合,并且您有 4 个 TCF(ASTC、ETC2、PVRTC、默认后备选项)和 3 个国家/地区组合(拉丁美洲、东南亚、默认后备选项),则必须为所有 12 个组合分别指定一个文件夹:

level1/textures#countries_latam#tcf_astc/…
level1/textures#countries_latam#tcf_etc2/…
level1/textures#countries_latam#tcf_pvrtc/…
level1/textures#countries_latam/…
level1/textures#countries_sea#tcf_astc/…
level1/textures#countries_sea#tcf_etc2/…
level1/textures#countries_sea#tcf_pvrtc/…
level1/textures#countries_sea/…
level1/textures#tcf_astc/…
level1/textures#tcf_etc2/…
level1/textures#tcf_pvrtc/…
level1/textures/…
  • 您可以针对同一资源包或 bundle 模块中的独特内容文件夹,既使用嵌套定位又使用单个维度定位。如果您要在单个维度定位和嵌套定位中都使用某个维度,则您使用的那组值必须始终相同。例如,您不能在采用单个维度设备层级定位时按 4 个层级进行定位,而结合使用国家/地区组合或 TCF 维度进行嵌套定位时只使用 3 个层级。