¿Cómo obtener la variante de compilación en tiempo de ejecución en Android Studio?


Respuestas:


130

Mira la BuildConfigclase generada .

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.app";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "";
}

Entonces, si su aplicación aún no se ha creado, esta clase no existiría y el uso de la clase antes de que se compile causaría un error de compilación, ¿no es así? ¿No es este el escenario de la gallina contra el huevo?
— AndroidDev

13
BuildConfig se genera durante Gradle Sync, no durante la construcción de la aplicación en sí.
— Ashishduh,

7
Recordatorio amistoso para importar BulidConfig para el paquete de su aplicación en lugar de desde una biblioteca externa BuildConfig ... como hice yo ...
— levibostian

3
PACKAGE_NAMEparece haber sido reemplazado porAPPLICATION_ID
— rockhammer

@ashishduh "BuildConfig se genera durante una sincronización de Gradle, no durante la construcción de la aplicación en sí". No, eso no está bien. Simplemente limpie el proyecto y notará que BuildConfigse ha ido. Se llama BuildConfig por una razón
— Farid

29

Otra opción sería crear una variable de configuración de compilación separada para cada variante de compilación y usarla en su código de esta manera:

En su archivo build.gradle:

productFlavors {

    production {
        buildConfigField "String", "BUILD_VARIANT", "\"prod\""
    }

    dev {
        buildConfigField "String", "BUILD_VARIANT", "\"dev\""
    }       
}

Para usarlo en su código:

if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }

3

Puedes probar con

getPackageName(); 

devolverá lo que ha definido en build.gradle

productFlavours{
  flavour1{
     applicationId 'com.example.package.flavour1'
  }
  flavour2{
     applicationId 'com.example.package.flavour2'
  }
}

3

Aquí hay un ejemplo para definir y obtener BuildConfigun sabor diferente.

android {

    defaultConfig {
        ...
    buildTypes {
        ...
    }

    flavorDimensions "default"
    productFlavors {

        develop {
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }

        staging {
            applicationIdSuffix ".stg"
            versionNameSuffix "-stg"
        }

        production {
            applicationIdSuffix ""
            versionNameSuffix ""
        }
    }

    applicationVariants.all { variant ->

        def BASE_URL = ""

        if (variant.getName().contains("develop")) {
            BASE_URL = "https://localhost:8080.com/"
        } else if (variant.getName().contains("staging")) {
            BASE_URL = "https://stagingdomain.com/"
        } else if (variant.getName().contains("production")) {
            BASE_URL = "https://productdomain.com/"
        }
        variant.buildConfigField "String", "BASE_URL", "\"${BASE_URL}\""

    }
}

Utilizando

BuildConfig.BASE_URL


2

Si ya está aromatizando, no es necesario que proporcione un campo de cadena adicional en su gradle. Simplemente siga unos sencillos pasos para obtener los detalles de la compilación:

Para la variante de compilación: BuildConfig.FLAVOR
Para el código de la versión de compilación: BuildConfig.VERSION_CODE
Para el nombre de la versión de compilación: BuildConfig.VERSION_NAME


3
BuildConfig.BUILD_TYPEdebe usarse para la variante de compilación. BuildConfig.FLAVORdebe usarse para cualquier sabor que haya especificado.
— Edric
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.