안드로이드는 앱을 빌드하는 과정에서 여러 파일을 자동으로 생성한다. BuildConfig 클래스도 그 중 하나로, 현재 빌드에 관한 정보를 상수 필드로 갖고 있어 코드에서 직접 참고할 수 있다.
package me.sunphiz.kotlin.myapplication;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "me.sunphiz.kotlin.myapplication";
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 = "1.0";
}
if( BuildConfig.DEBUG )
{
// 내 코드
}
파일은 /build/generated/source/buildConfig/.. 이하에 위치하고, <application id>.BuildConfig 의 이름을 갖는다.
기본 상수 외에 build.gradle를 통해 내가 필요한 필드를 직접 추가할 수도 있다. 이 상수는 빌드 타입에 따라 buildType 뿐 아니라 defaultConfig, productFlavors에도 선언이 가능하다. buildConfig를 여러 개 선언하다보면 번거로워진다. 이 때 Groovy의 맵 자료 구조 iteration을 이용하면, 아래처럼 buildConfig 값을 맵 형식으로 따로 정리할 수 있다.
ext {
extraStringBuildConfig = [ NAME : '"Dog발자"' ]
extraBooleanBuildConfig = [ KOREAN : 'true' ]
}
android {
defaultConfig {
...
extraStringBuildConfig.each{ k, v ->
buildConfigField 'String', k, v
}
extraBooleanBuildConfig.each{ k, v ->
buildConfigField 'boolean', k, v
}
}
...
}
그 밖에
- properties 파일로 분리할 수도 있다.
- 나아가, properties 파일을 빌드 타입 별로 분리할 수도 있다.
참조
- https://developer.android.com/studio/build/gradle-tips#share-custom-fields-and-resource-values-with-your-app-code
- https://stackoverflow.com/questions/30355650/define-buildconfigfield-for-an-specific-flavor-and-buildtype
- https://stackoverflow.com/questions/42130730/gradle-buildconfigfield-syntax-for-arrays-maps
- http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html#_iterating_on_maps
- https://stackoverflow.com/questions/51917319/buildconfigfield-for-collection-by-reading-properties-file
- https://medium.com/@bharathkumarbachina/read-property-file-using-buildconfig-gradle-356c9cf49f0c