`

Gradle解决依赖冲突(转)

 
阅读更多

转自:http://www.jianshu.com/p/8d02da77c83d

问题描述

  有时候项目依赖的com.android.support:support-v4的版本会遇到和其他依赖库中com.android.support:support-v4的版本发生冲突的情况。例如我项目中使用的22.2.1版本,但是引入的最新的Fresco中依赖的是23的版本,由于Fragment的源码有变化导致之前的版本出现问题。这是由于默认情况下会优先高版本的依赖库。这种时候需要我们去手动排除依赖。

解决方案

  1. 检查依赖报告:
    当你运行dependencies任务时,这个依赖树会打印出来,依赖树显示了你build脚本声明的顶级依赖和它们的传递依赖:
     +--- project :photoAlbum            
     |    +--- com.android.support:support-v4:22.2.1 ->23.1.1
     |    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
     |    +--- pl.droidsonroids.gif:android-gif-drawable:1.1.7
     |    +--- com.qiniu:qiniu-android-sdk:7.0.6
     |    |    \--- com.loopj.android:android-async-http:1.4.6 -> 1.4.7
     |    +--- com.nostra13.universalimageloader:universal-image-loader:1.9.1
     |    +--- com.loopj.android:android-async-http:1.4.7
     |    +--- com.umeng.analytics:analytics:5.4.2
     |    +--- com.facebook.fresco:fresco:0.10.0
     |    |    +--- com.facebook.fresco:drawee:0.10.0
     |    |    |    \--- com.android.support:support-v423.1.1(*)
     |    |    |    | --- com.facebook.fresco:fbcore:0.10.0
     |    |    +--- com.facebook.fresco:fbcore:0.10.0
     |    |    \--- com.facebook.fresco:imagepipeline:0.10.0
     |    |         +--- com.android.support:support-v4:23.1.1 (*)
     |    |         +--- com.nineoldandroids:library:2.4.0
     |    |         +--- com.facebook.fresco:fbcore:0.10.0
     |    |         +--- com.facebook.fresco:imagepipeline-base:0.10.0
     |    |         |    +--- com.nineoldandroids:library:2.4.0
     |    |         |    +--- com.facebook.fresco:fbcore:0.10.0
     |    |         |    \--- com.parse.bolts:bolts-android:1.1.4
     |    |         \--- com.parse.bolts:bolts-android:1.1.4
    这个是我项目中的一个module,顶级依赖中使用的是23.1.1。仔细观察你会发现有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle会自动分析下载最合适的依赖。有些依赖形如22.2.1 ->23.1.1是由于默认会优先版本高的依赖.这个时候你想使用版本低的依赖的话需要排除掉高的依赖。因此这里需要排除Fresco里面的supportV4依赖。
  2. 排除依赖:
     compile('com.facebook.fresco:fresco:0.10.0') {
           exclude module: 'support-v4'
     }
    重新sync一下,再打印出依赖树,发现结果如下:
     +--- project :photoAlbum            
     |    +--- com.android.support:support-v4:22.2.1 (*)
     |    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
     |    +--- pl.droidsonroids.gif:android-gif-drawable:1.1.7
     |    +--- com.qiniu:qiniu-android-sdk:7.0.6
     |    |    \--- com.loopj.android:android-async-http:1.4.6 -> 1.4.7
     |    +--- com.nostra13.universalimageloader:universal-image-loader:1.9.1
     |    +--- com.loopj.android:android-async-http:1.4.7
     |    +--- com.umeng.analytics:analytics:5.4.2
     |    +--- com.facebook.fresco:fresco:0.10.0
     |    |    +--- com.facebook.fresco:drawee:0.10.0
     |    |    |    \--- com.facebook.fresco:fbcore:0.10.0
     |    |    +--- com.facebook.fresco:fbcore:0.10.0
     |    |    \--- com.facebook.fresco:imagepipeline:0.10.0
     |    |         +--- com.nineoldandroids:library:2.4.0
     |    |         +--- com.facebook.fresco:fbcore:0.10.0
     |    |         +--- com.facebook.fresco:imagepipeline-base:0.10.0
     |    |         |    +--- com.nineoldandroids:library:2.4.0
     |    |         |    +--- com.facebook.fresco:fbcore:0.10.0
     |    |         |    \--- com.parse.bolts:bolts-android:1.1.4
     |    |         \--- com.parse.bolts:bolts-android:1.1.4
    这样就发现成功排除掉了fresco中的supportV4包,转而使用顶级依赖中的22.2.1的版本。

 
分享到:
评论

相关推荐

    详解Gradle依赖冲突解决方式

    Gradle依赖冲突解决方式 Gradle依赖冲突是Android开发中经常遇到的问题,解决依赖冲突的方式有多种,下面将详细介绍三种解决依赖冲突的方式。 一、统一版本管理 统一版本管理是解决依赖冲突的一种有效方式,特别...

    Android Studio Gradle依赖冲突解决方法

    总结来说,处理Gradle依赖冲突需要理解依赖树,然后根据项目需求选择合适的方法。逐个排除、显式依赖和强制依赖都是有效的策略,但每种都有其优缺点。在实践中,可能需要结合使用这些方法,以达到最佳的项目稳定性和...

    spring gradle依赖 .gradle文件

    总结起来,"spring gradle依赖 .gradle文件"是指使用Gradle作为构建工具来管理Spring框架项目的依赖,并且强调了".gradle"目录在Gradle工作流程中的重要性,包括Gradle Wrapper、守护进程和缓存机制。在Eclipse中...

    Gradle依赖包的spring依赖

    当我们谈论"Gradle依赖包的spring依赖"时,我们关注的是如何在Gradle项目中配置和管理与Spring框架相关的依赖库。 Spring框架是Java开发中的核心组件,它提供了依赖注入(DI)和面向切面编程(AOP)等关键特性,...

    Gradle-spring依赖包依赖包

    了解这些文件的用途有助于我们更好地管理和优化Gradle构建过程,尤其是在解决依赖冲突、调试问题或提升构建效率时。 总的来说,"Gradle-spring依赖包依赖包"涉及到的关键点在于如何使用Gradle管理Spring框架的依赖...

    AndroidStrudio gradle 多渠道打包 外部依赖

    可以通过`resolutionStrategy`来处理依赖冲突或指定特定版本: ```groovy configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested...

    Android-AndroidStudio依赖远程的gradle文件示例

    要在Android Studio中配置远程Gradle依赖,我们需要在`build.gradle`文件中指定远程仓库和依赖的库。以下是一个基本示例: ```groovy // 项目级 build.gradle 文件 allprojects { repositories { google() // ...

    gradle-4.6版本

    特别是对于依赖管理,可以查看文档以了解如何在构建脚本中声明和管理依赖,以及如何解决可能出现的冲突。同时,通过示例项目可以实践这些概念,提升对Gradle的理解和应用能力。 总之,Gradle 4.6 在依赖管理上的...

    gradle入门指南(离线版)

    - **解决冲突**: 使用`exclude`规则避免重复依赖或解决版本冲突。 ### 5. 编译与构建 - **clean Task**: 清理项目生成的输出文件。 - **assemble Task**: 编译和打包项目,通常包括编译源码、生成JAR或APK等。 - *...

    gradle-files-2.1

    2. **依赖管理**:Gradle的依赖管理系统允许开发者声明项目依赖,并自动解决版本冲突。在2.1版本中,依赖管理更加智能,能更准确地识别和解决间接依赖关系,同时增强了对传递性依赖的控制。 3. **插件系统**:...

    gradle-7.2-all,gradle-7.0.2-bin

    它还支持依赖版本管理和解决冲突。 4. **缓存机制**: - Gradle 的本地缓存机制可以存储已下载的依赖,避免不必要的网络请求,提高构建速度。 5. **插件系统**: - Gradle 插件生态系统丰富,有官方和社区开发的...

    gradle7.3.1

    7.3.1可能增强了依赖解析策略,比如对transitive依赖的管理,以及对冲突依赖的解决。 5. **Gradle插件生态**:Gradle支持丰富的插件生态系统,允许开发者使用预定义的插件快速实现特定功能,如Spring Boot、Android...

    gradle-4.1-all

    2. **更好的依赖管理**:此版本加强了依赖解析,提供了更精确的依赖报告,帮助开发者识别和解决依赖冲突。同时,它也支持对传递性依赖的排除,使得对依赖树的控制更加精细。 3. **插件增强**:Gradle 4.1增强了插件...

    gradle合集 gradle-6.2.2.zip

    在6.2.2版本中,依赖解析更加精确,避免了因依赖冲突导致的问题,同时提供了更好的依赖报告,帮助开发者理解项目的依赖结构。 3. **插件系统**:Gradle 插件生态系统丰富,允许开发者扩展其功能。6.2.2版本增强了...

    gradle-7.5.1-all.zip

    3. **依赖管理**:Gradle强大的依赖管理系统允许项目引用外部库,并自动解决依赖冲突。开发者可以在`dependencies`块中声明库依赖,Gradle会自动下载并管理这些库。 4. **版本控制**:通过`gradlew`脚本,Gradle...

    gradle-4.0.1-all及gradle-4.1-all

    - Gradle的依赖管理允许开发者声明项目所需的库和版本,自动解决依赖冲突,并从远程仓库下载。 - `dependencies`块是声明依赖的关键部分,如`implementation`, `compileOnly`, `testImplementation`等配置。 5. *...

    gradle合集-gradle-6.1.1.zip

    此外,它可能提供了更好的依赖解析策略,减少了依赖冲突。 3. 构建缓存:Gradle的构建缓存功能可以在后续构建中重用以前的输出,从而显著加快速度。6.1.1可能会进一步优化缓存的效率和可靠性。 4. Kotlin DSL 支持...

    gradle-6.5-bin.zip

    在Gradle 6.5中,依赖解析策略更加智能,减少了因依赖冲突导致的问题。 此外,Gradle的插件系统允许开发者自定义构建流程。例如,可以创建自定义的打包任务,实现特定的编译需求。这在标签"Gradle"中体现,表明...

Global site tag (gtag.js) - Google Analytics