Saltar al contenido principal

Configurar flavors de Flutter para Android

Cómo crear flavors de compilación específicos para diferentes tipos de lanzamiento o entornos de desarrollo.

Esta guía muestra cómo crear flavors de Flutter para una aplicación de Android.

Resumen

#

Un flavor de Flutter cuando se usa con Android representa un término unificado para varias características específicas de la plataforma. Por ejemplo, un flavor podría determinar qué icono, nombre de aplicación, clave de API, indicador de característica (feature flag) y nivel de registro se asocian con una versión específica de tu aplicación.

Si deseas crear flavors de Flutter para una aplicación de Android, puedes hacerlo en Flutter. En Android, un flavor de Flutter se denomina product flavor.

A continuación se ilustra un ejemplo de las variantes de compilación de Android que se crean cuando una aplicación de Android tiene dos flavors de productos (staging, production) y dos tipos de compilación (debug, release):

Flavors de productos Tipos de compilación Variantes de compilación resultantes
staging debug stagingDebug stagingRelease
production release productionDebug productionRelease

Configurar tus flavors de productos

#

Completa los siguientes pasos para agregar dos flavors de productos de Android llamados staging y production a un nuevo proyecto de Flutter llamado flavors_example, y luego prueba tu proyecto para asegurarte de que los flavors funcionen como se espera.

  1. Crea un nuevo proyecto Flutter llamado flavors_example con Kotlin como el lenguaje preferido de Android. Por defecto, el proyecto incluye los tipos de compilación de Android debug y release.

    consola
    flutter create --android-language kotlin flavors_example
    
  2. Añade los flavors de productos llamados staging y production al proyecto flavors_example.

    • En el proyecto flavors_example, navega al directorio android/app/ y abre build.gradle.kts.

    • Añade la propiedad flavorDimensions y las propiedades productFlavors dentro del bloque android {}. Asegúrate de que el bloque android {} también contenga los tipos de compilación predeterminados debug y release:

      build.gradle.kts
      kotlin
      android {
          ...
          buildTypes {
            getByName("debug") {...}
            getByName("release") {...}
          }
          ...
          flavorDimensions += "default"
          productFlavors {
              create("staging") {
                  dimension = "default"
                  applicationIdSuffix = ".staging"
              }
              create("production") {
                  dimension = "default"
                  applicationIdSuffix = ".production"
              }
          }
      }
      
  3. Para asegurarte de que has configurado todo correctamente, ejecuta tu aplicación en los flavors de productos de Android. No verás ninguna diferencia porque los ajustes de configuración no han cambiado, pero sí quieres asegurarte de que la aplicación pueda ejecutarse.

    • Inicia un emulador de Android o conecta un dispositivo físico con las opciones de desarrollador habilitadas.

    • En la consola, navega al directorio flavors_example e ingresa el siguiente comando para probar el flavor staging:

      consola
      flutter run --flavor staging
      
    • Repite el paso anterior para el flavor production.

  4. Si todo se ejecuta, estás listo para personalizar tus configuraciones. Para obtener más información, consulta Personalizar las configuraciones.

Iniciar un flavor

#

Después de haber creado los flavors de productos para una aplicación de Android, puedes iniciar un flavor de producto específico a través de Flutter.

Puedes iniciar un flavor de producto con el CLI de Flutter utilizando los siguientes pasos:

  1. Inicia un emulador de Android o conecta un dispositivo físico con las opciones de desarrollador habilitadas.

  2. En la consola, navega al directorio flavors_example e ingresa el siguiente comando:

consola
flutter (run | build <subcommand>) --flavor <flavor_name>
  • (run | build <subcommand>): Reemplaza esto con uno de los siguientes:

    • run: Ejecuta la aplicación en modo debug.
    • build: Builds either an APK or an appbundle.
      • <subcommand>: Ya sea apk o appbundle.
  • <flavor_name>: Reemplaza esto con el nombre de tu flavor de producto de Android (por ejemplo: staging, production).

Ejemplo:

consola
flutter build apk --flavor staging

Usar flavors en el código de Flutter

#

Después de configurar tus flavors de productos, puedes cambiar el comportamiento de tu aplicación —como apuntar a diferentes endpoints de API o cambiar el tema— según el flavor activo.

El framework Flutter proporciona la constante appFlavor, que recupera el nombre del flavor actual como un String. Este valor coincide con el nombre del flavor pasado a la opción --flavor durante el proceso de flutter run o flutter build.

Acceder al flavor actual

#
  1. Importa la biblioteca services: Para acceder a la constante appFlavor, agrega la siguiente importación a tu archivo Dart:

    dart
    import 'package:flutter/services.dart';
    
  2. Comprueba el valor del flavor: Utiliza la constante appFlavor en la lógica de tu aplicación (a menudo en main()) para manejar configuraciones específicas del flavor:

    dart
    void main() {
      // appFlavor will match the flavor name from build.gradle.kts
      if (appFlavor == 'production') {
        // Logic for production environment
        Config.apiUrl = 'https://api.flavors_example.com';
      } else if (appFlavor == 'staging') {
        // Logic for staging environment
        Config.apiUrl = 'https://staging.api.flavors_example.com';
      }
    
      runApp(const MyApp());
    }
    

Personalizar las configuraciones

#

Después de agregar flavors de productos, puedes personalizarlos para tu aplicación de Android.

Crear un nombre de visualización de la aplicación distinto

#

Si tienes múltiples flavors de productos, un nombre de aplicación distinto puede identificar rápidamente qué flavor está utilizando tu aplicación desplegada.

Nombres de aplicación distintos en el menú

Los siguientes pasos muestran cómo agregar nombres de visualización de aplicaciones distintos para dos flavors de productos llamados staging y production en un proyecto llamado flavors_example.

  1. Actualiza build.gradle.kts en tu IDE:

    • En el proyecto flavors_example, navega al directorio android/app/ y abre build.gradle.kts.

    • En el bloque flavorsDimension, agrega una propiedad resValue() llamada app_name a los flavors de staging y production:

      build.gradle.kts
      kotlin
      android {
          ...
          flavorDimensions += "default"
          productFlavors {
              create("staging") {
                  dimension = "default"
                  resValue(
                      type = "string",
                      name = "app_name",
                      value = "Flavors staging")
                  applicationIdSuffix = ".staging"
              }
              create("production") {
                  dimension = "default"
                  resValue(
                      type = "string",
                      name = "app_name",
                      value = "Flavors production")
                  applicationIdSuffix = ".production"
              }
          }
      
  2. Actualiza AndroidManifest.xml en tu IDE:

    • En el proyecto flavors_example, navega a android/app/src/main y abre AndroidManifest.xml.

    • Reemplaza el valor de android:label con @string/app_name.

      AndroidManifest.xml
      xml
      <manifest xmlns:android="http://schemas.android.com/apk/res/android">
          <application
            android:label="@string/app_name"
            ...
          />
      />
      
  3. Inicia la aplicación para cada flavor de producto (staging, production) y asegúrate de que el nombre de visualización de la aplicación haya cambiado para cada uno.

    • Para iniciar un flavor de producto, consulta los pasos en Iniciar un flavor.

    • En el Emulador de Aplicaciones de Android, ve a la lista de aplicaciones. Deberías ver una para Flavors p... y Flavors s....

    • Para ver más información de Flavors p... o Flavors s..., mantén presionado el icono de uno de ellos y selecciona App info.

Crear iconos distintos

#

Si tienes múltiples flavors de productos, un icono distinto para cada configuración puede ayudarte a identificar rápidamente qué flavor está utilizando tu aplicación desplegada.

Iconos distintos

Los siguientes pasos muestran cómo agregar un icono distinto para dos flavors de productos llamados staging y production en un proyecto llamado flavors_example.

  1. Prepara tus iconos:

    • Diseña tu icono de staging e icono de production en la herramienta de diseño de tu elección.

    • Genera versiones del icono de staging y del icono de production en los siguientes tamaños y en formato PNG:

      • mipmap-mdpi (48x48 píxeles)
      • mipmap-hdpi (72x72 píxeles)
      • mipmap-xhdpi (96x96 píxeles)
      • mipmap-xxhdpi (144x144 píxeles)
      • mipmap-xxxhdpi (192x192 píxeles)
  2. Crea directorios de recursos específicos para cada flavor:

    • Navega al directorio android/app/src.

    • Crea un directorio llamado staging/res.

    • Navega al directorio staging/res.

    • Crea los siguientes directorios mipmap y mueve las versiones del icono de staging dentro de ellos:

      • mipmap-mdpi/48x48_staging.png
      • mipmap-hdpi/72x72_staging.png
      • mipmap-xhdpi/96x96_staging.png
      • mipmap-xxhdpi/144x144_staging.png
      • mipmap-xxxhdpi/192x192_staging.png
    • Repite los pasos anteriores para los directorios e iconos del flavor production.

    • Renombra todos los iconos a ic_launcher.png.

  3. Doble verificación de las configuraciones en AndroidManifest.xml en tu IDE:

    • En el proyecto flavors_example, navega a android/app/src/main y abre AndroidManifest.xml.

    • Asegúrate de que el valor de android:icon sea @mipmap/ic_launcher.

  4. Inicia la aplicación para cada flavor de producto (staging, production) y asegúrate de que el icono de la aplicación haya cambiado para cada uno. Para iniciar un flavor de producto, consulta los pasos en Iniciar un flavor.

Empaquetar assets

#

Si tienes assets que solo se utilizan en un flavor específico en tu aplicación, puedes configurarlos para que solo se empaqueten en tu aplicación al iniciar ese flavor. Esto evita que el tamaño de tu app bundle se infle con assets no utilizados. Para empaquetar assets para cada flavor, añade el subcampo flavors al campo assets en el pubspec de tu proyecto. Para obtener más información, consulta el campo assets en Opciones de pubspec de Flutter.

Establecer un flavor predeterminado

#

Puedes hacer que tu aplicación use un flavor específico cuando inicias tu aplicación sin especificar un flavor. Para hacer esto, debes agregar el campo default-flavor al pubspec de tu proyecto. Para obtener más información, consulta el campo default-flavor en Opciones de pubspec de Flutter.

Añadir configuraciones de compilación únicas

#

Si tienes configuraciones de compilación adicionales que te gustaría configurar para un flavor de producto de Android específico, consulta Configurar variantes de compilación de Android.

Aunque es posible establecer abiFilters en los flavors de productos, no se recomienda. Prefiere configurar abiFilters en defaultConfig cuando sea posible. Al establecer abiFilters en los flavors de productos, pasa la opción -Pdisable-abi-filtering=true al ejecutar flutter build o flutter run.

Más información

#

Para obtener más información sobre la creación y el uso de flavors, consulta los siguientes recursos: