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 = "";
}

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 }

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'
  }
}

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


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


2
BuildConfig.BUILD_TYPEsollte für die Build-Variante verwendet werden. BuildConfig.FLAVORsollte für alle von Ihnen angegebenen Geschmacksrichtungen verwendet werden.
Edric
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.