查看依赖详情
方法一
// 查看依赖关系
gradle dependencies
// 查看指定module依赖关系: app可以替换成想要查看的module
gradle -q app:dependencies
// 将输出信息保存到文件
gradle dependencies >log.txt
// 查看 compile 时的依赖关系
gradle dependencies --configuration compile
// 查看依赖关系类型
gradle dependencies --info
方法二
// 在项目根目录下build.gradle中添加
subprojects {
task allDeps(type: DependencyReportTask) {}
}
// 在terminal里输入
./gradlew allDeps
依赖分析
编译报错
Android dependency 'com.android.support:recyclerview-v7' has different version for the compile (27.1.0) and runtime (27.1.1) classpath. You should manually set the same version via DependencyResolution
可以看到是recyclerView冲突了, 打印下module依赖树, 输出到log.txt文件(项目根目录)
gradle -q app_test:dependencies >log.txt
查找下recyclerview
+--- project :comm_base
| +--- com.billy.android:cc:1.1.0 (*)
| +--- android.arch.lifecycle:extensions:1.1.0
| | +--- android.arch.lifecycle:runtime:1.1.0 -> 1.1.1 (*)
| | +--- android.arch.core:common:1.1.0 -> 1.1.1 (*)
| | +--- android.arch.core:runtime:1.1.0 -> 1.1.1 (*)
| | +--- com.android.support:support-fragment:26.1.0 -> 27.1.1 (*)
| | +--- android.arch.lifecycle:common:1.1.0 -> 1.1.1 (*)
| | +--- android.arch.lifecycle:livedata:1.1.0 -> 1.1.1
| | | +--- android.arch.core:runtime:1.1.1 (*)
| | | +--- android.arch.lifecycle:livedata-core:1.1.1 (*)
| | | \--- android.arch.core:common:1.1.1 (*)
| | \--- android.arch.lifecycle:viewmodel:1.1.0 (*)
| +--- android.arch.persistence.room:runtime:1.1.1
| | +--- android.arch.persistence.room:common:1.1.1
| | | \--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| | +--- android.arch.persistence:db-framework:1.1.1
| | | +--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| | | \--- android.arch.persistence:db:1.1.1
| | | \--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| | +--- android.arch.persistence:db:1.1.1 (*)
| | +--- android.arch.core:runtime:1.1.1 (*)
| | \--- com.android.support:support-core-utils:26.1.0 -> 27.1.1 (*)
| +--- android.arch.paging:runtime:1.0.0
| | +--- android.arch.core:runtime:1.1.1 (*)
| | +--- android.arch.paging:common:1.0.0
| | | +--- com.android.support:support-annotations:26.1.0 -> 27.1.1
| | | \--- android.arch.core:common:1.1.1 (*)
| | +--- android.arch.lifecycle:runtime:1.1.1 (*)
| | +--- android.arch.lifecycle:livedata:1.1.1 (*)
| | \--- com.android.support:recyclerview-v7:27.1.0 -> 27.1.1
| | +--- com.android.support:support-annotations:27.1.1
| | +--- com.android.support:support-compat:27.1.1 (*)
| | \--- com.android.support:support-core-ui:27.1.1 (*)
仔细观察你会发现有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle会自动分析下载最合适的依赖
分析冲突
// comm_base: paging
com.android.support:recyclerview-v7:27.1.0 -> 27.1.1
可以看到, recyclerview版本有冲突, 27.1.0 -> 27.1.1, 但是没有*号, 说明了顶级依赖是27.1.1, 当前依赖是27.1.0, 但是没有27.1.1的依赖传递
所以解决办法是在当前module中添加27.1.1的依赖, 或者在comm_base中, recyclerview的依赖方式修改成api, 进行依赖传递
解决冲突
方法一: 直接过滤掉
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.1'){
exclude group : 'com.android.support' , module : 'support-v4'
exclude module : 'recyclerview-v7'
}
// 过滤所有support包
compile ('cn.qqtheme.framework:WheelPicker:1.5.1'){
exclude group:'com.android.support'
}
// 过滤module
implementation (project(':comm_base')) {
exclude group:'com.android.support'
}
方法二: 全局配置(测试没效果)
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:25.1.1'
}
resolutionStrategy {
force 'com.android.support:recyclerview-v7:25.0.0'
}
}