Gradle 라이브러리 의존 관계 관리

25922 단어 Android
라이브러리 종속성 보기
지정한 모듈의 의존 관계를 보여줍니다.
./gradlew -q moduleName:dependencies > outfile.txt

지정한 모듈의 의존 관계를 여러 개 보여줍니다.
./gradlew -q dependencies moduleName1:dependencies moduleName2:dependencies > outfile.txt

의존 정보 필터링
#     implementation      
./gradlew -q moduleName:dependencies --configuration implementation > outfile.txt

여기서 moduleName은 app와 같은 Module의 이름입니다.outfile.txt는 작업 수행 결과 출력의 파일입니다. 이 명령들은 출력의 내용이 비교적 많기 때문에 터미널에서 보기와 검색이 편리하지 않기 때문에 결과를 파일로 출력하는 것을 권장합니다.
예: 터미널(콘솔)에서 다음을 수행합니다.
./gradlew -q tools:dependencies > ./build/deps_tools.txt

결과는 다음과 같습니다.

+--- com.google.zxing:core:3.3.0
+--- io.reactivex.rxjava2:rxandroid:2.0.1
|    \--- io.reactivex.rxjava2:rxjava:2.0.1 -> 2.1.5
|         \--- org.reactivestreams:reactive-streams:1.0.1
+--- io.reactivex.rxjava2:rxjava:2.1.5 (*)
+--- com.squareup.okhttp3:okhttp:3.9.0
|    \--- com.squareup.okio:okio:1.13.0
+--- com.squareup.okhttp3:logging-interceptor:3.9.0
|    \--- com.squareup.okhttp3:okhttp:3.9.0 (*)
+--- com.android.support:support-annotations:27.1.1
+--- com.android.support:appcompat-v7:27.1.1
|    +--- com.android.support:support-annotations:27.1.1
|    +--- com.android.support:support-core-utils:27.1.1
|    |    +--- com.android.support:support-annotations:27.1.1
|    |    \--- com.android.support:support-compat:27.1.1
|    |         +--- com.android.support:support-annotations:27.1.1
|    |         \--- android.arch.lifecycle:runtime:1.1.0
|    |              +--- android.arch.lifecycle:common:1.1.0
|    |              \--- android.arch.core:common:1.1.0
|    +--- com.android.support:support-fragment:27.1.1
|    |    +--- com.android.support:support-compat:27.1.1 (*)
|    |    +--- com.android.support:support-core-ui:27.1.1
|    |    |    +--- com.android.support:support-annotations:27.1.1
|    |    |    +--- com.android.support:support-compat:27.1.1 (*)
|    |    |    \--- com.android.support:support-core-utils:27.1.1 (*)
|    |    +--- com.android.support:support-core-utils:27.1.1 (*)
|    |    +--- com.android.support:support-annotations:27.1.1
|    |    +--- android.arch.lifecycle:livedata-core:1.1.0
|    |    |    +--- android.arch.lifecycle:common:1.1.0
|    |    |    +--- android.arch.core:common:1.1.0
|    |    |    \--- android.arch.core:runtime:1.1.0
|    |    |         \--- android.arch.core:common:1.1.0
|    |    \--- android.arch.lifecycle:viewmodel:1.1.0
|    +--- com.android.support:support-vector-drawable:27.1.1
|    |    +--- com.android.support:support-annotations:27.1.1
|    |    \--- com.android.support:support-compat:27.1.1 (*)
|    \--- com.android.support:animated-vector-drawable:27.1.1
|         +--- com.android.support:support-vector-drawable:27.1.1 (*)
|         \--- com.android.support:support-core-ui:27.1.1 (*)
+--- com.orhanobut:logger:2.1.1
+--- com.github.bumptech.glide:glide:4.2.0
|    +--- com.github.bumptech.glide:gifdecoder:4.2.0
|    |    \--- com.android.support:support-annotations:26.0.2 -> 27.1.1
|    +--- com.github.bumptech.glide:disklrucache:4.2.0
|    \--- com.github.bumptech.glide:annotations:4.2.0
+--- com.alibaba:arouter-api:1.2.4
|    +--- com.alibaba:arouter-annotation:1.0.4
|    \--- com.android.support:support-v4:25.2.0
|         +--- com.android.support:support-compat:25.2.0 -> 27.1.1 (*)
|         +--- com.android.support:support-media-compat:25.2.0
|         |    +--- com.android.support:support-annotations:25.2.0 -> 27.1.1
|         |    \--- com.android.support:support-compat:25.2.0 -> 27.1.1 (*)
|         +--- com.android.support:support-core-utils:25.2.0 -> 27.1.1 (*)
|         +--- com.android.support:support-core-ui:25.2.0 -> 27.1.1 (*)
|         \--- com.android.support:support-fragment:25.2.0 -> 27.1.1 (*)
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.41
|    \--- org.jetbrains.kotlin:kotlin-stdlib:1.2.41
|         \--- org.jetbrains:annotations:13.0
\--- org.jetbrains.anko:anko:0.10.4
     +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     +--- org.jetbrains.anko:anko-commons:0.10.4
     |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     +--- org.jetbrains.anko:anko-coroutines:0.10.4
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    \--- org.jetbrains.kotlinx:kotlinx-coroutines-android:0.15
     |         +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:0.15
     |         |    \--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2 -> 1.2.41 (*)
     |         \--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2 -> 1.2.41 (*)
     +--- org.jetbrains.anko:anko-sqlite:0.10.4
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    \--- org.jetbrains.anko:anko-commons:0.10.4 (*)
     +--- org.jetbrains.anko:anko-sdk25:0.10.4
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    \--- org.jetbrains.anko:anko-commons:0.10.4 (*)
     +--- org.jetbrains.anko:anko-sdk25-coroutines:0.10.4
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:0.15 (*)
     |    \--- org.jetbrains.anko:anko-commons:0.10.4 (*)
     +--- org.jetbrains.anko:anko-appcompat-v7:0.10.4
     |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    +--- org.jetbrains.anko:anko-support-v4:0.10.4
     |    |    +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    |    +--- org.jetbrains.anko:anko-commons:0.10.4 (*)
     |    |    \--- org.jetbrains.anko:anko-support-v4-commons:0.10.4
     |    |         +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |    |         \--- org.jetbrains.anko:anko-commons:0.10.4 (*)
     |    \--- org.jetbrains.anko:anko-appcompat-v7-commons:0.10.4
     |         +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
     |         \--- org.jetbrains.anko:anko-support-v4-commons:0.10.4 (*)
     \--- org.jetbrains.anko:anko-appcompat-v7-coroutines:0.10.4
          +--- org.jetbrains.kotlin:kotlin-stdlib:1.1.0 -> 1.2.41 (*)
          +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:0.15 (*)
          +--- org.jetbrains.anko:anko-support-v4-commons:0.10.4 (*)
          \--- org.jetbrains.anko:anko-appcompat-v7-commons:0.10.4 (*)

여기서 * 이전에 이 의존도가 나열되어 더 이상 다운로드하지 않음을 나타냅니다.
여기서 ->은(는) 저버전->고버전을 나타내며 프로젝트의 높은 버전 의존 라이브러리에 강제로 의존합니다.
종속 충돌 해결
의존 충돌은 일반적으로 두 가지가 있는데 하나는 버전 충돌이고 하나는 중복 의존이다.
의존 충돌을 해결하는 원칙은 최종적으로 고정된 버전의 라이브러리에 의존하는 것을 확정하는 것이다.
종속 충돌 해결 방법은 다음과 같습니다.
transitive
의존 전달이란 A가 B에 의존하면 A도 마찬가지로 B가 의존하는 라이브러리에 의존한다는 것을 말한다.transitive를 통해 통합 지정transitive를 제어할 수 있습니다.
   //       ,             ,              ,     
   configurations.all {
        transitive = false
    }

라이브러리를 닫는 종속 전송을 개별적으로 제외하려면 다음과 같이 하십시오.
 implementation("com.android.support:support-compat:27.1.1"){
        transitive = false
    }

force
gradle은 또한 어떤 버전의 의존을 강제로 사용할 수 있다
예를 들어 프로젝트 중의 일부 라이브러리는 낮은 버전의lifecyle 라이브러리나 support 라이브러리를 사용하는데 이때 최신Lifecycle 라이브러리를 도입하면 버전 충돌이 발생하여 버전을 강제로 지정할 수 있다.
configurations.all {
        resolutionStrategy {
            def lifecycle_version = "1.1.1"
            force "android.arch.lifecycle:extensions:$lifecycle_version"
            force "android.arch.lifecycle:runtime:$lifecycle_version"
            force "android.arch.lifecycle:compiler:$lifecycle_version"
        }
    }

exclude
의존 충돌이 발생할 때, 예를 들어 중복 의존은 불필요한 의존을 배제하거나 저버전의 의존을 배제할 수 있다.
  //  RecyclerView   
  configurations.all {
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    }

  //    support   v7,v4 
    configurations.all {
        exclude group: 'com.android.support'
    }

    //      
    implementation("com.google.dagger:dagger:2.15") {
        exclude group: 'javax.inject', module: 'javax.inject'
    }

참조 문서
http://www.paincker.com/gradle-dependencies#i-5

좋은 웹페이지 즐겨찾기