안드로이드는 앱을 빌드하는 과정에서 여러 파일을 자동으로 생성한다. 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