Android

Android buildSrc 로 Dependency 관리하기

최데브 2022. 2. 9. 23:23

최근 개설한 개발팀 Dev6 에서 같이 안드로이드 개발을 하는 팀원분께서 

2인이상이 개발하고 또 프로젝트의 단위가 커질 것 같으니 이런 방법들로 프로젝트를 관리하면 어떻겠냐고

말씀해주신게 여럿 있었다. 

 

그 중 buildSrc 로 Dependency 를 관리하는 방법에 대해 먼저 정리 해볼까한다.

 

찾아보니까 다른 깃허브에서 이렇게 관리하는걸 본적이 있는데 이게 도대체 뭘까?

라고 생각하고 뭐라고 찾아야할지도 모르겠어서 그냥 넘어갔던 기억이 있는데 

이번 기회에 한번 적용해볼까 한다.

 


buildSrc 는 사실 의존성 관리를 좀 더 편하게 하고 가독성을 올리기 위해 사용하는것뿐 그게 다다.

하지만? 개발자에겐 그건 아주 중요하고 프로젝트에 참여하는 인원이 많을수록 그 중요도는 더욱 올라간다.

 

그럼 바로 어떻게 적용하는지 확인해보자.

 

먼저 Project 에서 root 폴더에 buildSrc 라는 폴더를 만들어주자.

그리고 그 폴더안에 다시 src > main > java 폴더를 생성한다.

 

java 폴더안에  Kotiln 파일을 생성해줄건데 이름은 상관없다. Dependency.kt 로 나는 만들어주겠다.그리고 해당 파일에

object Versions {
    const val KOTLIN_VERSION = "1.5.0"
    const val KOTLINX_COROUTINES = "1.5.0"
    const val BUILD_GRADLE = "4.2.1"
    const val COMPILE_SDK_VERSION = 30
    const val BUILD_TOOLS_VERSION = "30.0.3"
    const val MIN_SDK_VERSION = 23
    const val TARGET_SDK_VERSION = 30

    const val CORE_KTX = "1.5.0"
    const val APP_COMPAT = "1.3.0"
    const val ACTIVITY_KTX = "1.2.3"
    const val FRAGMENT_KTX = "1.3.4"
    const val LIFECYCLE_KTX = "2.3.1"
    const val ROOM = "2.3.0"

    const val HILT = "2.35.1"
    const val MATERIAL = "1.3.0"

    const val RETROFIT = "2.7.1"
    const val OKHTTP = "4.3.1"

    const val JUNIT = "4.13.2"
    const val ANDROID_JUNIT = "1.1.2"
    const val ESPRESSO_CORE = "3.3.0"
}

object Kotlin {
    const val KOTLIN_STDLIB      = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.KOTLIN_VERSION}"
    const val COROUTINES_CORE    = "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.KOTLINX_COROUTINES}"
    const val COROUTINES_ANDROID = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.KOTLINX_COROUTINES}"
}

object AndroidX {
    const val CORE_KTX                = "androidx.core:core-ktx:${Versions.CORE_KTX}"
    const val APP_COMPAT              = "androidx.appcompat:appcompat:${Versions.APP_COMPAT}"

    const val ACTIVITY_KTX            = "androidx.activity:activity-ktx:${Versions.ACTIVITY_KTX}"
    const val FRAGMENT_KTX            = "androidx.fragment:fragment-ktx:${Versions.FRAGMENT_KTX}"

    const val LIFECYCLE_VIEWMODEL_KTX = "androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.LIFECYCLE_KTX}"
    const val LIFECYCLE_LIVEDATA_KTX  = "androidx.lifecycle:lifecycle-livedata-ktx:${Versions.LIFECYCLE_KTX}"

    const val ROOM_RUNTIME            = "androidx.room:room-runtime:${Versions.ROOM}"
    const val ROOM_KTX                = "androidx.room:room-ktx:${Versions.ROOM}"
    const val ROOM_COMPILER           = "androidx.room:room-compiler:${Versions.ROOM}"
}

object Google {
    const val HILT_ANDROID          = "com.google.dagger:hilt-android:${Versions.HILT}"
    const val HILT_ANDROID_COMPILER = "com.google.dagger:hilt-android-compiler:${Versions.HILT}"

    const val MATERIAL = "com.google.android.material:material:${Versions.MATERIAL}"
}

object Libraries {
    const val RETROFIT                   = "com.squareup.retrofit2:retrofit:${Versions.RETROFIT}"
    const val RETROFIT_CONVERTER_GSON    = "com.squareup.retrofit2:converter-gson:${Versions.RETROFIT}"
    const val OKHTTP                     = "com.squareup.okhttp3:okhttp:${Versions.OKHTTP}"
    const val OKHTTP_LOGGING_INTERCEPTOR = "com.squareup.okhttp3:logging-interceptor:${Versions.OKHTTP}"
}

object UnitTest {
    const val JUNIT         = "junit:junit:${Versions.JUNIT}"
}

object AndroidTest {
    const val ANDROID_JUNIT = "androidx.test.ext:junit:${Versions.ANDROID_JUNIT}"
    const val ESPRESSO_CORE = "androidx.test.espresso:espresso-core:${Versions.ESPRESSO_CORE}"
}

이렇게 작성해준다. 보면 어떤 의미인지 바로 이해가 될거다.위에 라이브러리별 버전을 상수로 관리하고 아래에서 관련 라이브러리끼리 object로 묶은걸 볼 수 있다.

이렇게 해두면 버전을 찾아볼때 훨씬 빠르고 쉽게 확인할 수 있고 변경 사항이 생기더라도 어디있는지 눈빠지게 찾아보지 않아도 바로바로 바꿀 수 있다.

 

위에 코드들은 예시이고 실제로는 자기가 필요한 라이브러리만 가져가서 쓰면 된다.

 

이후 원래 우리가 자주 쓰던 build.gradle 에서

dependencies { 
	implementation Kotlin.KOTLIN_STDLIB 
    implementation AndroidX.CORE_KTX 
    implementation AndroidX.APP_COMPAT 
    implementation Google.MATERIAL 
    testImplementation UnitTest.JUNIT 
    androidTestImplementation AndroidTest.ANDROID_JUNIT 
    androidTestImplementation AndroidTest.ESPRESSO_CORE 
 }

이렇게 불러와주면 끝이다!

 

별로 어려운 개념도 아니고 오히려 편하다.

반응형