Android usando Gradle Construir sabores en el código como un caso if

Estoy tratando de trabajar con los sabores de la construcción. En mi build.gradle he definido 2 sabores, un sabor normal y un sabor de administrador.

Básicamente, el sabor de administrador tiene un botón adicional en la actividad principal.

Entiendo que puedo definir diferentes paquetes / clases para diferentes sabores. ¿Pero hay una manera de hacer una clase de caso de si para agregar / quitar un pedazo de código dependiendo del sabor?

Básicamente necesitaría dos versiones de una actividad. Pero no quiero dos versiones diferentes de la actividad y mantenerlas.

Así que en mi actividad me gustaría hacer

=> Gradle comprobar si el sabor es 'admin' => si es así, añada este código del botón

¿es posible? ¿O necesitaría dos actividades físicas diferentes y así mantener ambas cosas cuando añada funcionalidad después.

BuildConfig.FLAVOR le da el sabor combinado del producto. Así que si usted tiene una sola dimensión de sabor:

 productFlavors { normal { } admin { } } 

A continuación, sólo puede comprobarlo:

 if (BuildConfig.FLAVOR.equals("admin")) { ... } 

Pero si tiene múltiples dimensiones de sabor:

 flavorDimensions "access", "color" productFlavors { normal { dimension "access" } admin { dimension "access" } red { dimension "color" } blue { dimension "color" } } 

También BuildConfig.FLAVOR_access campos BuildConfig.FLAVOR_access y BuildConfig.FLAVOR_color para que deba comprobarlo de la siguiente manera:

 if (BuildConfig.FLAVOR_access.equals("admin")) { ... } 

Y BuildConfig.FLAVOR contiene el nombre completo del sabor. Por ejemplo, adminBlue .

Para evitar una cadena simple en la condición, puede definir una propiedad booleana:

 productFlavors { normal { flavorDimension "access" buildConfigField 'boolean', 'IS_ADMIN', 'false' } admin { flavorDimension "access" buildConfigField 'boolean', 'IS_ADMIN', 'true' } } 

Entonces usted puede utilizarlo como esto:

 if (BuildConfig.IS_ADMIN) { ... } 
  • Error running react-native run-android --variant = release (La tarea 'installReleaseDebug' no se encuentra en el proyecto raíz 'gnosisapp'.)
  • Build.gradle está protegido de la descompilación?
  • Error de entrada duplicado al utilizar POI con gradle
  • Cómo utilizar maven en el estudio android
  • Definición de 'resValue' utilizando una definición de cadena existente
  • Android Studio ignorar --core-library flag
  • Android Gradle 1.1 - agregando una dependencia de prueba en las pruebas de otro proyecto
  • La aplicación del complemento 'kotlin-android' en una aplicación instantánea resulta en "null no se puede convertir en tipo no null com.android.build.gradleBasePlugin"
  • No se puede encontrar el módulo con la ruta Gradle. Vinculación a la biblioteca -no especificado en su lugar
  • No se pueden resolver las importaciones de dependencias externas en Android Studio 2.0 Vista previa 5 + Vista previa 6
  • La generación de Gradle no pudo resolver la dependencia de la biblioteca aar (trnql sdk)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.