스팀 앱 개발기 #101 - build.gradle에서 라이브러리 이름과 버전 통합steemCreated with Sketch.

build.gradle에서 라이브러리 이름과 버전 통합

No. 101
23.06.09 (금) | Written by @dorian-mobileapp

시작하며...

라이브러리 버전 업에 이어 이번에는 각 모듈의 build.gradle 파일들에서 각각 정의된 라이브러리 이름, 버전을 통합하는 작업을 진행했습니다. 향후 더 많은 모듈들을 생성해야 하기 때문에 이 작업은 반드시 해야 하는 것입니다.


기존 build.gradle 파일들이 내재한 문제점

프로젝트에서 각 모듈의 build.gradle 파일의 dependency 블록에서 중복된 라이브러리들이 정의되어 있는 것이 문제입니다. 예를 들면, dorian-steem-ui 모듈과 dorian-steem-data 모듈의 build.gradle 파일에서는 다음과 같이 코루틴 라이브러리가 추가되어 있습니다.

dependencies {
    // ...
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
    // ...
}

만약 새로운 기능을 개발하기 위해 라이브러리가 필요하다면, 2개 이상의 build.gradle 파일의 dependencies 블록에 이를 추가해야 합니다. 이 뿐만이 아니구요. 기존 라이브러리의 버전을 올려야 한다면, 역시 복수의 동일 파일들을 수정해야 할 수 있습니다. 여러 파일들의 dependencies를 관리한다는 것이 모듈이 많을 수록 더 어려워집니다. 라이브러리 버전이 모듈마다 다르다는 실수를 범할 수 있고요. 이는 앱의 심각한 오류를 발생시킬 수도 있습니다.


해결책

기존 build.gradle 파일들이 공통적으로 참조할 gradle 파일을 생성했습니다. 이름은 build.dependencies.gradle입니다. 그리고 이 파일에 라이브러리 이름/버전을 갖는 맵 객체들을 생성합니다.

ext {
    androidx = [
        appcompat: 'androidx.appcompat:appcompat:1.4.2',
        constraintlayout: 'androidx.constraintlayout:constraintlayout:2.1.4',
        core: 'androidx.core:core-ktx:1.7.0',
        lifecycle_livedata_ktx: 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1',
        lifecycle_viewmodel_ktx: 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1',
        navigation_fragment_ktx: 'androidx.navigation:navigation-fragment-ktx:2.5.3',
        navigation_ui_ktx: 'androidx.navigation:navigation-ui-ktx:2.5.3',
        swiperefreshlayout: 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0',

        // for test
        core_testing: 'androidx.arch.core:core-testing:2.2.0',
        espresso_core: 'androidx.test.espresso:espresso-core:3.5.1',
        junit: 'androidx.test.ext:junit:1.1.5'
    ]

    glide = [
        glide: 'com.github.bumptech.glide:glide:4.11.0',
        compiler: 'com.github.bumptech.glide:compiler:4.11.0'
    ]

    google = [
        material: 'com.google.android.material:material:1.9.0'
    ]

    retrofit = [
        retrofit: 'com.squareup.retrofit2:retrofit:2.9.0',
        adapter_java: 'com.squareup.retrofit2:adapter-rxjava2:2.3.0',
        converter_gson: 'com.squareup.retrofit2:converter-gson:2.9.0'
    ]

    rxjava = [
        rxjava: 'io.reactivex.rxjava2:rxjava:2.2.20',
        rxandroid: 'io.reactivex.rxjava2:rxandroid:2.0.1'
    ]

    coroutines = [
        coroutines: 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4',
        // for test
        coroutines_test: 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4'
    ]

    others = [
        junit: 'junit:junit:4.13.2'
    ]
}

모듈들의 build.gradle 파일에서는 build.dependencies.gradle 파일을 임포트(import) 하구요. 후자 파일에 정의된 값들을 활용하여 라이브러리를 추가해 주었습니다. 예를 들어, dorian-steem-data 모듈의 build.gradle 파일의 dependencies 블록은 아래와 같이 수정하였습니다.

dependencies {
    // To refer to other modules
    implementation project(":dorian-steem-domain")
    implementation project(":dorian-steem-test")

    // retrofit
    implementation retrofit.retrofit
    implementation retrofit.adapter_java
    implementation retrofit.converter_gson

    // rx
    implementation rxjava.rxjava

    // coroutines
    implementation coroutines.coroutines

    // For unit test
    testImplementation others.junit
    testImplementation coroutines.coroutines_test
}

GitHub Commit


마치며...

다음 화면 개발을 시작하기 전에 build.gradle 파일을 수정해야 했습니다. 이전 화면들을 만들면서 이미 인지하고 있던 문제였고, 이제야 해결할 수 있었습니다. 내일부터는 마음 편하게 다음 화면 개발을 할 수 있겠습니다.


지난 스팀 앱 개발기


Layout provided by Steemit Enhancer hommage by ayogom
Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 61153.73
ETH 3403.85
USDT 1.00
SBD 2.51