buildSrc 에 대한 설명은 다음과 같습니다.
buildSrc를 사용하면 다음과 같은 장점이 있습니다.
단점은 다음과 같습니다.
안드로이드 스튜디오 플러그인 소개 - Gradle Dependency Updates
Gradle Dependency Updates 는 build.gradle 의 dependency 가 업데이트를 도와주는 플러그인 입니다. 플러그인 설치 후 Menu 에서 View -> Tool Windows -> Dependency Updates 를 누르면 됩니다. 위와 같이 업데이트가 가능
victorywskim.tistory.com
따라서 작은 프로젝트의 경우에는 굳이 buildSrc 를 굳이 적용할 필요는 없지만 멀티 모듈 프로젝트의 경우에는 유용하게 사용 가능합니다.
적용 방법은 다음과 같습니다.
1. buildSrc 모듈을 추가합니다.
menu 의 File -> New -> New Module... 를 클릭합니다.
라이브러리 명은 buildSrc 로 짓고 나머지는 상황에 맞게 작성하시면 됩니다.
Finish 를 누르시고 2가지를 고쳐주셔야 합니다.
plugins {
`kotlin-dsl`
}
repositories {
google()
mavenCentral()
}
그 다음 sync 를 돌려주시면 모듈이 정상적으로 추가되게 됩니다.
2. 구조 잡기
저는 기본적으로 앱 설정, 일반 의존성, 테스트 의존성 등 3개 파일로 관리하고 있습니다.
위 3개 파일들을 만드시기 전에 기본 경로가 있다면 모두 제거해주시면 되겠습니다.
buildSrc -> src -> main -> kotlin 아래 바로 위치하게 되는 구조입니다.
AppConfig.kt
object AppConfig {
const val versionCode = 1
const val versionName = "1.0.0"
const val sdkMin = 23
const val targetSdk = 34
const val buildToolsVersion = "34.0.0"
const val jvmTarget = "17"
val javaVersion = JavaVersion.VERSION_17
const val sdkPreview = "UpsideDownCake"
const val kotlin = "1.8.10"
// https://developer.android.com/jetpack/androidx/releases/compose-kotlin?hl=ko
const val kotlinCompilerExtensionVersion = "1.4.3" // 1.8.10
}
앱의 주요 정보들을 관리하는 역할을 수행합니다.
SdDependency.kt
object SdDependency {
object Kotlin {
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-bom
const val bom = "org.jetbrains.kotlin:kotlin-bom:1.9.10"
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-reflect
const val reflect = "org.jetbrains.kotlin:kotlin-reflect:1.9.10"
}
object Androidx {
...
}
...
}
앱에서 사용하는 의존성 정보를 추가합니다.
SdTestDependency.kt
object SdTestDependency {
object Tdd {
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
const val junit5 = "org.junit.jupiter:junit-jupiter-api:5.10.0"
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine
const val junit5Engine = "org.junit.jupiter:junit-jupiter-engine:5.10.0"
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params
const val junit5Params = "org.junit.jupiter:junit-jupiter-params:5.10.0"
// https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine
const val junit5ParamsEngine = "org.junit.vintage:junit-vintage-engine:5.10.0"
// https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-test
const val coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3"
// https://mvnrepository.com/artifact/io.mockk/mockk
const val mockk = "io.mockk:mockk:1.13.7"
}
object Bdd {
// https://mvnrepository.com/artifact/androidx.test.ext/junit
const val junit = "androidx.test.ext:junit:1.1.5"
// https://mvnrepository.com/artifact/androidx.compose/compose-bom
const val composeBom = "androidx.compose:compose-bom:2023.10.00"
const val composeJunit = "androidx.compose.ui:ui-test-junit4"
const val debugComposeTooling = "androidx.compose.ui:ui-tooling"
const val debugComposeManifest = "androidx.compose.ui:ui-test-manifest"
}
}
테스트 코드를 작성하기 위한 의존성입니다.
3. 적용하기
build.gradle.kts
import wskim.aos.buildSrc.AppConfig
import wskim.aos.buildSrc.SdDependency
import wskim.aos.buildSrc.SdTestDependency
...
dependencies {
...
// tdd
testImplementation(SdTestDependency.Tdd.junit5)
testRuntimeOnly(SdTestDependency.Tdd.junit5Engine)
testImplementation(SdTestDependency.Tdd.junit5Params)
testRuntimeOnly(SdTestDependency.Tdd.junit5ParamsEngine)
testImplementation(SdTestDependency.Tdd.mockk)
testImplementation(SdTestDependency.Tdd.coroutines)
// bdd1
androidTestImplementation(SdTestDependency.Bdd.junit)
androidTestImplementation(platform(SdTestDependency.Bdd.composeBom))
androidTestImplementation(SdTestDependency.Bdd.composeJunit)
// bdd2
debugImplementation(SdTestDependency.Bdd.debugComposeTooling)
debugImplementation(SdTestDependency.Bdd.debugComposeManifest)
}
...
android {
namespace = "wskim.aos.simpledutch"
compileSdk = AppConfig.targetSdk
defaultConfig {
applicationId = "wskim.aos.simpledutch"
minSdk = AppConfig.sdkMin
targetSdk = AppConfig.targetSdk
versionCode = AppConfig.versionCode
versionName = AppConfig.versionName
buildToolsVersion = AppConfig.buildToolsVersion
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}
...
위와 같이 기존 build.gradle 을 수정해주시고 싱크를 맞춰주시면 되겠습니다.
이상으로 buildSrc 적용을 마칩니다.
감사합니다.
나만의 안드로이드 앱 만들기(중급자 편) - 테스트 코드 작성하기 (viewModel) (2) | 2023.12.25 |
---|---|
나만의 안드로이드 앱 만들기(중급자 편) - 테스트 코드 작성하기 (utils) (0) | 2023.12.24 |
나만의 안드로이드 앱 만들기(중급자 편) - 클린 아키텍쳐 구현(clean architecture) (2) | 2023.12.24 |
나만의 안드로이드 앱 만들기(중급자 편) - 클린 아키텍쳐 개요(clean architecture) (1) | 2023.12.23 |
나만의 안드로이드 앱 만들기(중급자 편) - BuildConfig의 deprecated 대응하기 (4) | 2023.12.22 |