转自:http://www.jianshu.com/p/8d02da77c83d
问题描述
有时候项目依赖的com.android.support:support-v4的版本会遇到和其他依赖库中com.android.support:support-v4的版本发生冲突的情况。例如我项目中使用的22.2.1版本,但是引入的最新的Fresco中依赖的是23的版本,由于Fragment的源码有变化导致之前的版本出现问题。这是由于默认情况下会优先高版本的依赖库。这种时候需要我们去手动排除依赖。
解决方案
-
检查依赖报告:
当你运行dependencies任务时,这个依赖树会打印出来,依赖树显示了你build脚本声明的顶级依赖和它们的传递依赖:
这个是我项目中的一个module,顶级依赖中使用的是23.1.1。仔细观察你会发现有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle会自动分析下载最合适的依赖。有些依赖形如22.2.1 ->23.1.1是由于默认会优先版本高的依赖.这个时候你想使用版本低的依赖的话需要排除掉高的依赖。因此这里需要排除Fresco里面的supportV4依赖。+--- 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-v4:23.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
-
排除依赖:
重新sync一下,再打印出依赖树,发现结果如下:compile('com.facebook.fresco:fresco:0.10.0') { exclude module: 'support-v4' }
这样就发现成功排除掉了fresco中的supportV4包,转而使用顶级依赖中的22.2.1的版本。+--- 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
相关推荐
Gradle依赖冲突解决方式 Gradle依赖冲突是Android开发中经常遇到的问题,解决依赖冲突的方式有多种,下面将详细介绍三种解决依赖冲突的方式。 一、统一版本管理 统一版本管理是解决依赖冲突的一种有效方式,特别...
总结来说,处理Gradle依赖冲突需要理解依赖树,然后根据项目需求选择合适的方法。逐个排除、显式依赖和强制依赖都是有效的策略,但每种都有其优缺点。在实践中,可能需要结合使用这些方法,以达到最佳的项目稳定性和...
总结起来,"spring gradle依赖 .gradle文件"是指使用Gradle作为构建工具来管理Spring框架项目的依赖,并且强调了".gradle"目录在Gradle工作流程中的重要性,包括Gradle Wrapper、守护进程和缓存机制。在Eclipse中...
当我们谈论"Gradle依赖包的spring依赖"时,我们关注的是如何在Gradle项目中配置和管理与Spring框架相关的依赖库。 Spring框架是Java开发中的核心组件,它提供了依赖注入(DI)和面向切面编程(AOP)等关键特性,...
了解这些文件的用途有助于我们更好地管理和优化Gradle构建过程,尤其是在解决依赖冲突、调试问题或提升构建效率时。 总的来说,"Gradle-spring依赖包依赖包"涉及到的关键点在于如何使用Gradle管理Spring框架的依赖...
可以通过`resolutionStrategy`来处理依赖冲突或指定特定版本: ```groovy configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested...
要在Android Studio中配置远程Gradle依赖,我们需要在`build.gradle`文件中指定远程仓库和依赖的库。以下是一个基本示例: ```groovy // 项目级 build.gradle 文件 allprojects { repositories { google() // ...
特别是对于依赖管理,可以查看文档以了解如何在构建脚本中声明和管理依赖,以及如何解决可能出现的冲突。同时,通过示例项目可以实践这些概念,提升对Gradle的理解和应用能力。 总之,Gradle 4.6 在依赖管理上的...
- **解决冲突**: 使用`exclude`规则避免重复依赖或解决版本冲突。 ### 5. 编译与构建 - **clean Task**: 清理项目生成的输出文件。 - **assemble Task**: 编译和打包项目,通常包括编译源码、生成JAR或APK等。 - *...
2. **依赖管理**:Gradle的依赖管理系统允许开发者声明项目依赖,并自动解决版本冲突。在2.1版本中,依赖管理更加智能,能更准确地识别和解决间接依赖关系,同时增强了对传递性依赖的控制。 3. **插件系统**:...
它还支持依赖版本管理和解决冲突。 4. **缓存机制**: - Gradle 的本地缓存机制可以存储已下载的依赖,避免不必要的网络请求,提高构建速度。 5. **插件系统**: - Gradle 插件生态系统丰富,有官方和社区开发的...
7.3.1可能增强了依赖解析策略,比如对transitive依赖的管理,以及对冲突依赖的解决。 5. **Gradle插件生态**:Gradle支持丰富的插件生态系统,允许开发者使用预定义的插件快速实现特定功能,如Spring Boot、Android...
2. **更好的依赖管理**:此版本加强了依赖解析,提供了更精确的依赖报告,帮助开发者识别和解决依赖冲突。同时,它也支持对传递性依赖的排除,使得对依赖树的控制更加精细。 3. **插件增强**:Gradle 4.1增强了插件...
在6.2.2版本中,依赖解析更加精确,避免了因依赖冲突导致的问题,同时提供了更好的依赖报告,帮助开发者理解项目的依赖结构。 3. **插件系统**:Gradle 插件生态系统丰富,允许开发者扩展其功能。6.2.2版本增强了...
3. **依赖管理**:Gradle强大的依赖管理系统允许项目引用外部库,并自动解决依赖冲突。开发者可以在`dependencies`块中声明库依赖,Gradle会自动下载并管理这些库。 4. **版本控制**:通过`gradlew`脚本,Gradle...
- Gradle的依赖管理允许开发者声明项目所需的库和版本,自动解决依赖冲突,并从远程仓库下载。 - `dependencies`块是声明依赖的关键部分,如`implementation`, `compileOnly`, `testImplementation`等配置。 5. *...
此外,它可能提供了更好的依赖解析策略,减少了依赖冲突。 3. 构建缓存:Gradle的构建缓存功能可以在后续构建中重用以前的输出,从而显著加快速度。6.1.1可能会进一步优化缓存的效率和可靠性。 4. Kotlin DSL 支持...
在Gradle 6.5中,依赖解析策略更加智能,减少了因依赖冲突导致的问题。 此外,Gradle的插件系统允许开发者自定义构建流程。例如,可以创建自定义的打包任务,实现特定的编译需求。这在标签"Gradle"中体现,表明...