Segmentación de recursos por varias dimensiones (segmentación anidada)

Para segmentar una carpeta en un paquete de recursos o un módulo de paquete por varias dimensiones (formato de compresión de texturas, nivel de dispositivo y conjunto de países), puedes usar la segmentación anidada.

La segmentación anidada permite definir criterios de segmentación que combinan hasta 2 dimensiones de segmentación.

Formato

Para segmentar una carpeta por varias dimensiones, especifica la lista de dimensiones en una serie de sufijos hashtag para el nombre de la carpeta.

Por ejemplo, para segmentar una carpeta de recursos por formato de compresión de texturas ASTC y nivel 2 de dispositivo, la segmentación debe tener el siguiente aspecto:

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

Si usas Gradle para compilar tu app, los sufijos de segmentación se quitan del nombre del directorio en los APKs o paquetes de recursos finales que se entregan a los dispositivos de los usuarios.

Si usas bundletool directamente, especifica si deseas que se quite el sufijo para cada una de las dimensiones de forma individual en BundleConfig.json. A continuación, se muestra un ejemplo de segmentación por nivel de dispositivo:

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

La segmentación anidada es compatible con bundletool 1.14.1 o versiones posteriores, y con el complemento de Android para Gradle 8.2.0-alpha01 o versiones posteriores, que requiere Gradle 8.1 o versiones posteriores.

Puedes encontrar más información sobre cómo customizar la configuración de dimensiones individuales en la documentación de cada dimensión de segmentación.

Limitaciones

  • Puedes usar 2 dimensiones anidadas como máximo. En otras palabras, no puedes tener una carpeta segmentada por nivel de dispositivo, formato de compresión de texturas y país configurado al mismo tiempo: debes elegir 2.

  • Debes especificar las 2 dimensiones anidadas en el mismo nivel de la ruta de acceso de la carpeta. Por ejemplo, no se permite la siguiente segmentación de carpeta, ya que #tcf_astc y #tier_2 aparecen en diferentes segmentos de ruta de acceso:

.../level1/src/main/assets/character-textures#tcf_astc/level1#tier_2/
  • Las dimensiones anidadas deben ser iguales en todo el paquete. Por ejemplo, no puedes tener un paquete de recursos en el que se anidan los niveles de dispositivo y el conjunto de países, y otro paquete en el que se anidan el conjunto de países y el formato de compresión de texturas.

  • Los valores que uses para las 2 dimensiones deben ser iguales en todo el paquete, y debes especificar la combinación completa de valores. Por ejemplo, si deseas anidar el formato de compresión de texturas y el conjunto de países y tienes 4 TCFs (ASTC, ETC2, PVRTC y resguardo predeterminado) y 3 conjuntos de países (Latinoamérica, Sudeste Asiático y resguardo predeterminado), debes especificar una carpeta para las 12 combinaciones:

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/…
  • Puedes usar la segmentación anidada y la de dimensión única en carpetas de contenido distintas del mismo paquete de recursos o módulo de paquete. Si utilizas una dimensión tanto en la segmentación de dimensión única como en la anidada, el conjunto de valores que utilizas siempre debe ser el mismo. Por ejemplo, no puedes segmentar por 4 niveles en la segmentación por nivel de dispositivos de dimensión única y, luego, usar solo 3 niveles cuando se anidan con conjuntos de países o TCFs.