이번 글에서는 build type과 flavor에 따라 resValue를 추가하는 작업을 해볼 것이다.
이게 왜 필요했을까
언제나 그렇듯 평범한 버그 수정, 신규 기능 추가를 반복하던 중
다른 서버 주소 줄테니 이것도 따로 빌드해줘
이런 요청을 받은 것이다.
물론 이런 요청이 단발적이라면 모를까
내가 듣기로는 이후로 몇 번은 더 받을 요청이라는 생각이 들었다.
그래서 아예 flavor를 하나 추가해 debug, release 빌드 타입을 포함한 총 4개의 빌드를 구성했다.
방법 설명
여기서 방법이 갈린다.
최신 프로젝트 생성 시엔 build.gradle.kts가 기본으로 설정되기에
Groovy, Kotlin 모두 적용법을 찾아보았다.
Groovy에서 적용하기
android {
...
buildTypes {
release {
...
}
debug {
...
}
}
flavorDimensions += "version"
productFlavors {
demo {
dimension "version"
}
prod {
dimension "version"
}
}
applicationVariants.configureEach { variant ->
variant.resValue "string", "SERVER_URL", getEnvName(variant)
}
}
def getEnvName(variant) {
def flavor = variant.flavorName
def buildType = variant.buildType.name
if (flavor == "demo") {
return "demo.env"
} else if (flavor == "prod" && buildType == "debug") {
return "debug.env"
} else if (flavor == "prod" && buildType == "release") {
return "release.env"
}
return "default.env"
}
여기서 첫번째로 중요한 것은 flavorDimensions 구문이다.
개발자 사이트를 보면 Groovy의 경우 flavorDimensions == "version"같은
연산자(?)를 사용하는데 이렇게 빌드를 시도하면 빌드가 되지 않는다.
정확한 이유는 모르겠지만 Kotlin DSL 방식에 있는 += 연산자를 사용하면
정상적으로 빌드할 수 있다.
그리고 def를 android 외부로 위치시키는 것이다.
물론 def를 android 내부로 넣어두면 애초에 컴파일러가 에러를 보여주어
빌드할 수 없을 것이다.
Kotlin DSL에서 적용하기
android {
...
buildTypes {
release {
...
}
debug {
...
}
}
flavorDimensions += "version"
productFlavors {
create("demo") {
dimension "version"
}
create("prod") {
dimension "version"
}
}
applicationVariants.all {
val flavorName = flavorName
val buildTypeName = buildType.name
resValue("string", "SERVER_URL", getEnvName(flavorName, buildTypeName))
}
}
fun getEnvName(flavorName: String, buildTypeName: String): String {
return when {
flavor == "demo" -> "demo.env"
flavor == "prod" && buildType == "debug" -> "debug.env"
flavor == "prod" && buildType == "release" -> "release.env"
else -> "default.env"
}
}
Kotlin DSL에서는 보다시피 applicationVariants에 사용하는 함수가 바뀌었다.
그리고 getEnvName 함수 정의도 코틀린스럽게 변경된 것을 볼 수 있다.
공통 주의사항
flavorDimensions는 꼭 정의해주어야 한다.
다만, 이름은 자유롭게 정해도 된다.
내 경우에는 dimension에 특별히 의미를 두지 않았다.
결과
이렇게 build type 및 flavor를 추가해주면
총 4가지 빌드를 Android Studio Build Variants 탭에서 확인할 수 있다.
(demoDebug, demoRelease, prodDebug, prodRelease)
참조
https://developer.android.com/build/build-variants
빌드 변형 구성 | Android Studio | Android Developers
빌드 변형을 구성하여 단일 프로젝트에서 여러 버전의 앱을 만드는 방법을 알아보세요.
developer.android.com
'Android' 카테고리의 다른 글
Android Tester 환경 구축하기(from direct APK to Firebase App Distribution) (0) | 2025.03.10 |
---|---|
Android EditText Text Repeating(글자 복제되는 현상) (0) | 2025.02.28 |
Store Signed APK 실행 시 Play Store로 이동 (0) | 2025.02.11 |
Android Share Image File In 2way (0) | 2025.01.01 |
Android add library using toml (0) | 2024.11.27 |