Android开发经验谈Android开发Android知识

Android依赖冲突

2019-04-16  本文已影响66人  yin_xin

前言

实际开发过程中不可避免的会使用到一些第三方,而我们引用的第三方可能会和我们使用的其他库产生冲突;或者由于其他原因需要对依赖进行剔除。

依赖冲突的解决方法其实很简单,主要就为以下两个步骤:

  1. 依赖分析,找到冲突的依赖。
  2. 剔除依赖或者强制使用某个版本的依赖。

依赖分析

查看依赖关系需要用到的命令为:gradlew :[module_name]:dependencies

如需分析工程中app这个module的依赖关系行命令则为 :gradlew :app:dependencies

从下面的关系树可以看到各个依赖之间的关系,以及依赖版本号合并后的最终版本号

+--- com.android.support:support-core-utils:28.0.0 (*)
|    |    |    +--- com.android.support:customview:28.0.0
|    |    |    |    +--- com.android.support:support-annotations:28.0.0
|    |    |    |    \--- com.android.support:support-compat:28.0.0 (*)
|    |    |    +--- com.android.support:viewpager:28.0.0
|    |    |    |    +--- com.android.support:support-annotations:28.0.0
|    |    |    |    +--- com.android.support:support-compat:28.0.0 (*)
|    |    |    |    \--- com.android.support:customview:28.0.0 (*)
|    |    |    +--- com.android.support:coordinatorlayout:28.0.0

如果你不想在命令终端中查看,而是想把依赖关系输出到文件中,则可以使用以下命令:
gradlew :[module_name]:dependencies > [output_file]

例如将app module的依赖关系输出到dependence.txt文件中:
gradlew :app:dependencies > dependence.txt

输出文件.png

剔除依赖

通过移除某个第三方中特定的依赖。

使用exclude group:'group_name':module:'module_name'方式剔除具体依赖,如果没有指定module_name则该group下所有的依赖都会被剔除,具体使用:

//剔除rxpermissions这依赖中所有com.android.support相关的依赖,避免和我们自己的冲突
implementation 'com.github.tbruyelle:rxpermissions:0.10.2', {
 exclude group: 'com.android.support'
 exclude group: 'xxxxx'
}
//剔除 tm_navigation(这里是本地依赖)中依赖的springview
implementation project(path: ':tm_navigation'),{ 
  exclude group: 'com.liaoinstan.springview', module: 'library'
}

关于group和module的概念,举一个例子就清楚了。

例如对于依赖implementation 'com.android.support:appcompat-v7:27.1.0'
group为com.android.support,module为appcompat,版本号为27.1.0,同一个group下面可以有很多module的。

下面这种方式可以批量剔除整个工程中的相关依赖

android{
     //....

    //剔除工程中所有的该依赖
    configurations {
         all*.exclude group: 'org.hamcrest', module: 'hamcrest-core'
    }
}

强制版本

有时候依赖传递层级过深或者数量过多,通过上面的方式则不能达到剔除的效果,这时候强制使用版本

android{
  //....

 //强制使用2.8.5
    configurations.all {
        resolutionStrategy {
            force 'com.google.code.gson:gson:2.8.5'
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读