본문 바로가기
개발

안드로이드 Gradle Dependency 버전을 변수로 사용

by 마스터누누 2019. 7. 1.
728x90
반응형

 

안드로이드 Gradle에 Dependency를 추가하다보면 버전 정보가 뒤섞여 눈에 잘 들어오지 않는다.

이 때 implementation과 버전 정보에 변수를 사용하면 편리하다.

 

다음은 구글 architecure-sample에 있는 App 레벨 Gradle의 일부 코드이다.

같은 성격을 가지는 dependency끼리 주석으로 행구분이 되어있다.

이렇게 분리를 해주면 관리 하는 측면에서도 한눈에 파악이 가능하다.

 

dependencies {
    // App dependencies
    implementation "androidx.appcompat:appcompat:$appCompatVersion"
    implementation "androidx.cardview:cardview:$cardVersion"
    implementation "com.google.android.material:material:$materialVersion"
    implementation "androidx.recyclerview:recyclerview:$recyclerViewVersion"
    implementation "androidx.annotation:annotation:$androidXAnnotations"

    implementation "androidx.legacy:legacy-support-v4:$androidXLegacySupport"
    implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
    implementation "com.google.guava:guava:$guavaVersion"
    implementation "androidx.room:room-runtime:$roomVersion"
    annotationProcessor "androidx.room:room-compiler:$roomVersion"

    // Architecture Components
    implementation "androidx.room:room-runtime:$roomVersion"
    annotationProcessor "androidx.room:room-compiler:$roomVersion"
    implementation "androidx.lifecycle:lifecycle-extensions:$archLifecycleVersion"
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$archLifecycleVersion"

    // Dependencies for local unit tests
    testImplementation "junit:junit:$junitVersion"
    testImplementation "org.mockito:mockito-all:$mockitoVersion"
    testImplementation "org.hamcrest:hamcrest-all:$hamcrestVersion"
    testImplementation "android.arch.core:core-testing:$archTestingVersion"

    // Dependencies for Android unit tests
    androidTestImplementation "junit:junit:$junitVersion"
    androidTestImplementation "org.mockito:mockito-core:$mockitoVersion"
    androidTestImplementation "com.google.dexmaker:dexmaker:$dexMaker"
    androidTestImplementation "com.google.dexmaker:dexmaker-mockito:$dexMaker"

    // Android Testing Support Library - Instrumented testing
    androidTestImplementation "androidx.test:runner:$androidXTestVersion"
    androidTestImplementation "androidx.test:rules:$androidXTestVersion"
    androidTestImplementation "androidx.room:room-testing:$roomVersion"
    androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
    androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
    androidTestImplementation "androidx.test.espresso.idling:idling-concurrent:$espressoVersion"
    implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"

    // Resolve conflicts between main and test APK:
    androidTestImplementation "androidx.annotation:annotation:$androidXAnnotations"
    androidTestImplementation "androidx.legacy:legacy-support-v4:$androidXLegacySupport"
    androidTestImplementation "androidx.recyclerview:recyclerview:$recyclerViewVersion"
    androidTestImplementation "androidx.appcompat:appcompat:$appCompatVersion"
    androidTestImplementation "com.google.android.material:material:$materialVersion"
}

 

 

 

위의 코드를 자세히 보면 dependency 뒤쪽에 "$변수 이름"으로 표시되어있는데, 이는 Project 레벨 Gradle에서 미리 선언한 버전 값이다.

Project Gradle은 다음과 같이 사용되어지는 변수를 선언했다.

 

// Define versions in a single place
ext {
    // Sdk and tools
    // Support library and architecture components support minSdk 14 and above.
    minSdkVersion = 14
    targetSdkVersion = 28
    compileSdkVersion = 28

    // App dependencies
    androidXVersion = '1.0.0'
    androidXTestVersion = '1.1.1'
    androidXAnnotations = '1.0.1'
    androidXLegacySupport = '1.0.0'
    materialVersion = '1.0.0'
    cardVersion = '1.0.0'
    recyclerViewVersion = '1.0.0'
    appCompatVersion = '1.0.2'

    guavaVersion = '27.0.1-android'
    junitVersion = '4.12'
    mockitoVersion = '1.10.19'
    dexMaker = '1.2'
    hamcrestVersion = '1.3'
    runnerVersion = '1.0.1'
    rulesVersion = '1.0.1'
    espressoVersion = '3.1.1'
    roomVersion = '2.0.0'
    archLifecycleVersion = '2.0.0'
    archTestingVersion = '1.1.1'
}

 

이처럼 보다 깔끔하게 관리하고싶다면 변수를 만들어 버전 넘버를 사용해보자.

 

 

반응형

댓글