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 2015 년

13
BuildConfig는 앱 자체를 빌드하는 것이 아니라 Gradle 동기화 중에 생성됩니다.
ashishduh 2015 년

7
친절한 알림에 대한 BulidConfig을 가져 당신의 내가 그랬던 것처럼 ... ... 응용 프로그램 패키지 대신에 외부 라이브러리 BuildConfig에서
levibostian

3
PACKAGE_NAME로 대체 된 것으로 보인다APPLICATION_ID
rockhammer

@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

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

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


3
BuildConfig.BUILD_TYPE빌드 변형에 사용해야합니다. BuildConfig.FLAVOR지정한 모든 특징에 사용되어야합니다.
Edric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.