Як отримати варіант збірки під час виконання в Android Studio?


Відповіді:


130

Подивіться на сформований BuildConfigклас.

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

Отже, якщо ваша програма ще не побудована, цього класу не існувало б, і використання класу до його побудови спричинить помилку компіляції, чи не так? Хіба це не сценарій курки проти яйця?
AndroidDev

13
BuildConfig генерується під час Gradle Sync, а не під час побудови самого додатка.
ашішдух

7
Дружнє нагадування про імпорт BulidConfig для пакету вашого додатка, а не із зовнішньої бібліотеки BuildConfig ... як я це зробив ...
levibostian

3
PACKAGE_NAMEздається, його замінивAPPLICATION_ID
рокхаммер

@ashishduh "BuildConfig генерується під час синхронізації Gradle, а не під час побудови самого додатка." Ні, це не правильно. Просто очистіть проект, і ви помітите, що BuildConfigйого немає. Його називають BuildConfig не дарма
Farid

29

Іншим варіантом було б створити окрему змінну конфігурації збірки для кожного варіанту збірки та використовувати її у своєму коді так:

У вашому файлі build.gradle:

productFlavors {

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

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

Щоб використовувати його у своєму коді:

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

3

Можна спробувати

getPackageName(); 

він поверне те, що ви визначили в build.gradle

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

3

Ось приклад для визначення та отримання BuildConfigрізного смаку

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

    }
}

Використовуючи

BuildConfig.BASE_URL


2

Якщо ви вже ароматизуєте, тоді не потрібно вводити додаткове поле рядка у вашій градації. Просто виконайте прості кроки, щоб отримати деталі збірки:

Для варіанту збірки: BuildConfig.FLAVOR
Для коду версії збірки: BuildConfig.VERSION_CODE
Для імені версії збірки: BuildConfig.VERSION_NAME


3
BuildConfig.BUILD_TYPEслід використовувати для варіанта збірки. BuildConfig.FLAVORслід використовувати для будь-яких зазначених вами ароматів.
Едрік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.