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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.