[android] Android Studio에서 런타임에 빌드 변형을 가져 오는 방법은 무엇입니까?

런타임 중에 빌드 변형을 얻고 싶습니다. 추가 구성이나 코드없이 가능합니까?



답변

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


답변

또 다른 옵션은 각 빌드 변형에 대해 별도의 빌드 구성 변수를 만들고 다음과 같이 코드에서 사용하는 것입니다.

build.gradle 파일에서 :

productFlavors {

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

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

코드에서 사용하려면 :

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


답변

시도 할 수 있습니다.

getPackageName();

build.gradle에서 정의한 내용을 반환합니다.

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


답변

다음은 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


답변

이미 맛을 내고 있다면 gradle에 추가 문자열 필드를 제공 할 필요가 없습니다. 빌드 세부 정보를 얻으려면 간단한 단계를 따르십시오.

빌드 버전 : BuildConfig.FLAVOR
빌드 버전 코드 : BuildConfig.VERSION_CODE
빌드 버전 이름 : BuildConfig.VERSION_NAME


답변