티스토리 뷰

Android/Gradle

Android Gradle - Build Variant

강태종 2022. 3. 10. 00:21

Build Variant

프로젝트를 진행할 때 테스트, SDK 지원 등 다양한 이유로 앱을 분기해서 관리할 경우가 있습니다. 여러 프로젝트를 만들고 코드를 공유해도 되지만 Gradle 설정으로 하나의 프로젝트에서 쉽게 관리할 수 있습니다.


defaultConfig

다양한 BuildVariant에서 공통된 설정을 추가할 수 있습니다.

android {
    defaultConfig {
        applicationId "com.taetae98.build"
        minSdk 31
        targetSdk 32
        versionCode 10000
        versionName "1.00.00"

        buildConfigField "String", "BASE_URL", '"www.naver.com"'

        manifestPlaceholders["appLabel"] = "@string/app_name"

        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}
  • applicationId : 앱의 고유 아이디입니다. manifest에 package가 이 값으로 대체됩니다. Google Play에 앱을 기재할 때 고유 식별값으로 사용됩니다.
  • minSdk : 앱에서 지원하는 최소 SDK 버전입니다.
  • targetSdk : 앱에서 사용하는 SDK 버전입니다.
  • versionCode : 앱에서 사용하는 VersionCode입니다. Google Play에 앱을 기재할 때 버전을 식별할 때 사용합니다.
  • versionName : 앱에서 사용하는 버전 이름입니다.
  • buildConfigField : 실제 코드에서 사용할 수 있는 필드입니다. 자료형, 이름, 값 순서입니다. String 필드를 만들 때 ""를 포함하도록 주의해야 합니다. 코드에서 사용할 때 BuildConfig.XXX 형태로 사용할 수 있으며 사용할 수 없을 때 리빌드를 진행하면 됩니다.
  • manifestPlaceholders : manifest에서 사용할 수 있는 값입니다.

buildTypes

빌드 타입을 설정할 수 있습니다. 기본적으로 Android에서 debug와 release를 제공합니다. debug는 debuggable true이며, release는 debuggable false가 기본값입니다.

android {
    buildTypes {
        debug {
            manifestPlaceholders["appLabel"] = "Build Debug"
            applicationIdSuffix = ".debug"
            signingConfig signingConfigs.debug
            minifyEnabled false
            debuggable true
        }

        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            debuggable false
        }

        stage {

        }
    }
}
  • applicationIdSuffix : applicationId 뒤에 붙는 값입니다.
  • signingConfig : 앱을 빌드할 때 사용할 서명키 설정입니다.
  • minifyEnabled : 사용하지 않는 코드를 제거하는 기능입니다. 이 기능을 사용하면 빌드 시간이 증가하기 때문에 debug 모드에선 끄고 release 모드에서 사용하는 것이 효율적입니다.
  • debuggable : 디버그 모드 가능 여부입니다.

productFlavors

buildTypes가 어떻게 빌드할지 설정하는 구성이라면 productFlavors는 어떤 기준으로 앱을 나눌지가 되겠습니다. 앱을 배포할 때 유료/무료, 광고 포함, 특정 기능 탑재 등 다양한 이유로 앱을 분리할 필요가 있습니다.

android {
    flavorDimensions "type", "api"
    productFlavors {
        taetae {
            minSdk 31
            dimension = "type"
            applicationIdSuffix ".taetae"
        }
        real {
            minSdk 24
            dimension = "api"
        }
        dev {
            minSdk 24
            dimension = "api"
        }
    }
}
  • flavorDimensions : productFlavors로 나눌 때 차원을 정할 수 있습니다. 예를들어 minSdk 버전별, 기능 포함여부 등 조건이 다를 때 여러 dimension을 설정할 수 있습니다.
  • dimension : 각 flavor이 어떤 dimension을 가지는지 설정할 수 있습니다.

Build Variant

Build Variant는 최종적으로 buildTypes + productFlavors를 합쳐서 빌드할 수 있는 경우의 수입니다. buildTypes와 productFlavors의 종류에 따라 나뉘고 productFlavors에서도 flavorDimensions에 따라 나뉩니다.


VariantFilter

buildTypes와 productFlavors가 많아지면 수 많은 Build Variant가 생기는데 필요없는 Build Variant를 숨길 수 있습니다.

android {
    variantFilter { variant ->
        def flavor = variant.flavors*.name
        def buildType = variant.buildType*.name
        if (flavor.contains("taetae") && flavor.contains("real") && buildType.contains("release")) {
            setIgnore(true)
        }
    }
}

참고

https://github.com/google/android-gradle-dsl

 

GitHub - google/android-gradle-dsl: DSL reference for the Android plugin for Gradle.

DSL reference for the Android plugin for Gradle. Contribute to google/android-gradle-dsl development by creating an account on GitHub.

github.com

https://google.github.io/android-gradle-dsl/3.4/

 

Android Plugin 3.4.0-dev DSL Reference

This is the DSL reference for Android Gradle Plugin. Start reading by finding the right extension type for the plugin you are using, e.g. AppExtension.

google.github.io

 

'Android > Gradle' 카테고리의 다른 글

Android Gradle - Kotlin DSL, KTS  (0) 2022.04.03
Android Gradle - signingConfigs  (0) 2022.03.10
AndroidGradle - SourceSets  (0) 2022.03.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함