Seize the day

POST : Android Dev Study

gradle에서 BuildConfg에 값 정의하기

간단히 buildConfigField를 사용하기는 했는데 정말 간단했다.

    buildTypes {
        debug {
            buildConfigField "long", "BUILD_TIMESTAMP", "0L"
            manifestPlaceholders = [appName: "@string/app_name"]
        }
        release {
            buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"

 

그런데 이것을 한 곳에 모았으면 좋겠다는 생각이 들었다. debug, release 모드에 따라 두 개의 값과 default 값을 정의할 수 있다.
build-config.gradle

def buildConfigList = [
        ["String","URL1", ["debug": "aa_d",
                           "release": "aa_r"]],
        ["boolean", "isUp", ["debug": "true",
                             "release": "false"]],
        ["String", "test1", ["default": "def1",
                             "release": "false"]],
]

android.applicationVariants.all { variant ->
    def name = variant.getName()
    buildConfigList.each { data ->
        def keyType = data[0]
        def keyName = data[1]
        def valueMap = data[2]
        def value = valueMap[name]
        if (value == null) value = valueMap["default"]
        if (keyType == "String") variant.buildConfigField keyType, keyName, "\"$value\""
        else variant.buildConfigField keyType, keyName, "$value"
    }
}

 

build.gradle에서 build-config.gralde을 포함시키려면
build.gradle

apply from: "build-config.gradle"

 

library 모듈에서도 사용할 수 있는데 libraryVariants 를 이용하면 된다. 
android_base/build-config.gradle

def buildConfigList = [
        ["String", "URL1", ["beta": "aa_d",
                            "real": "aa_r"]],
        ["boolean", "isUp", ["beta": "true",
                             "real": "false"]],
        ["String", "test1", ["default": "def1",
                             "real"   : "false"]],
]

android.libraryVariants.all { variant ->
    def name = variant.getName()
    def phase
    if (name.startsWith("rc")) phase = "rc"
    else if (name.startsWith("production")) phase = "real"
    else phase = "beta"
    print(name + "-> $phase\n")
    buildConfigList.each { data ->
        def keyType = data[0]
        def keyName = data[1]
        def valueMap = data[2]
        def value = valueMap[phase]
        if (value == null) value = valueMap["default"]
        if (keyType == "String") variant.buildConfigField keyType, keyName, "\"$value\""
        else variant.buildConfigField keyType, keyName, "$value"
    }
}

https://stackoverflow.com/a/45102276
https://www.baeldung.com/groovy-maps 
https://proandroiddev.com/advanced-android-flavors-part-5-the-buildconfig-strikes-back-6230ef4e0d29를 참고했습니다. 

top

posted at

2020. 4. 27. 21:06


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크