티스토리 뷰
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
- 보이스카우트 규칙
- commit
- ConcatAdapter
- Flutter
- isActive
- DART
- DSL
- Flowable
- Widget
- ConcatAdapter.Config
- observable
- null
- rxjava
- 함수
- viewmodel
- Coroutine
- 연산자
- gradle
- Android
- git
- 코루틴
- 클린 코드
- TDD
- Kotlin
- ViewModelProvider
- CancellationException
- Exception
- clean code
- ViewModelStoreOwner
- 클린코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |