← 글 목록

notes

Android - Gradle product flavors

buildTypes와 productFlavors 축, BuildConfig·variant 실무 메모.

dev/prod API URL을 BuildConfig로 나누고 싶어서 productFlavor를 붙였다. buildType(debug/release)이랑 축이 달라서 처음에 헤맸다.

두 축

  • buildTypes: debug / release (서명, minify)
  • productFlavors: free/paid, stage/prod (패키지·리소스·엔드포인트)
android {
    flavorDimensions += "env"
    productFlavors {
        create("stage") {
            dimension = "env"
            applicationIdSuffix = ".stage"
            buildConfigField("String", "API_BASE", "\"https://stage.example.com\"")
        }
        create("prod") {
            dimension = "env"
            buildConfigField("String", "API_BASE", "\"https://api.example.com\"")
        }
    }
}

Variant

stageDebug, stageRelease, prodDebug, prodRelease처럼 조합이 생긴다. Android Studio Build Variants 창에서 고른다.

val base = BuildConfig.API_BASE

실수

  • flavor마다 google-services.json이 다르면 src/stage/ src/prod/에 각각 둔다
  • applicationIdSuffix 붙이면 스토어 등록 앱과 다른 앱으로 설치됨 (의도한 것)
  • CI에서 assembleProdRelease처럼 variant 이름을 정확히