android 解决依赖冲突

查看依赖详情

方法一

// 查看依赖关系
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'
    }
}

猜你喜欢

转载自blog.csdn.net/APTX8899/article/details/88649175