Wie bekomme ich die Build-Variante zur Laufzeit in Android Studio?

Antworten:

126

Schauen Sie sich die generierte BuildConfigKlasse an.

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 = "";
}
Ashishduh
quelle
Wenn Ihre App noch nicht erstellt wurde, würde diese Klasse nicht existieren und die Verwendung der Klasse vor dem Erstellen würde einen Kompilierungsfehler verursachen, nicht wahr? Ist das nicht das Henne-Ei-Szenario?
AndroidDev
13
BuildConfig wird während einer Gradle-Synchronisierung generiert, nicht beim Erstellen der App selbst.
Ashishduh
7
Freundliche Erinnerung daran, die BulidConfig für Ihr App-Paket anstatt aus einer externen Bibliothek BuildConfig zu importieren ... wie ich ...
Levibostian
3
PACKAGE_NAMEscheint ersetzt worden zu sein durchAPPLICATION_ID
Rockhammer
29

Eine andere Möglichkeit wäre, für jede Build-Variante eine separate Build-Konfigurationsvariable zu erstellen und diese in Ihrem Code wie folgt zu verwenden:

In Ihrer build.gradle-Datei:

productFlavors {

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

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

So verwenden Sie es in Ihrem Code:

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

Sie können mit versuchen

getPackageName(); 

Es wird das zurückgeben, was Sie in build.gradle definiert haben

productFlavours{
  flavour1{
     applicationId 'com.example.package.flavour1'
  }
  flavour2{
     applicationId 'com.example.package.flavour2'
  }
}
Yeberiah
quelle
3

Hier ist ein Beispiel, um BuildConfigverschiedene Geschmacksrichtungen zu definieren und zu erhalten

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}\""

    }
}

Verwenden von

BuildConfig.BASE_URL

Phan Van Linh
quelle
2

Wenn Sie bereits aromatisieren, müssen Sie in Ihrem Gradle kein zusätzliches Zeichenfolgenfeld angeben. Befolgen Sie einfach die einfachen Schritte, um die Build-Details zu erhalten:

Für Build-Variante: BuildConfig.FLAVOR
Für Build-Versionscode: BuildConfig.VERSION_CODE
Für Build-Versionsname: BuildConfig.VERSION_NAME

Anurag Srivastava
quelle
2
BuildConfig.BUILD_TYPEsollte für die Build-Variante verwendet werden. BuildConfig.FLAVORsollte für alle von Ihnen angegebenen Geschmacksrichtungen verwendet werden.
Edric