Android中Gradle依赖强制配置下,运行时lib_B与lib_C版本选择
Android Gradle依赖版本解析问题
背景信息
- 涉及库/模块:
com.group.one:lib_A、com.group.other:lib_B、com.group.other:lib_C - 版本绑定关系:
lib_B 3.0.0依赖lib_C 3.0.0;lib_B 3.1.0依赖lib_C 3.1.0 lib_A:8.0.0的依赖与配置:- 依赖
lib_B:3.1.0 - 其Gradle配置仅强制
com.group.one组的依赖使用3.1.0版本,代码如下:dependencies { implementation "com.group.other:lib_B:3.1.0" ... ... } configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested // force all the flurry modules to same version if (requested.group == 'com.group.one') { details.useVersion "3.1.0" } } }
- 依赖
- 目标应用的依赖配置:
dependencies { implementation "com.group.one:lib_A:8.0.0" implementation "com.group.other:lib_B:3.0.0" }
问题
该应用运行时,lib_B和lib_C会使用3.1.0还是3.0.0版本?
解答
首先要明确:lib_A里的Gradle强制规则只对com.group.one组的依赖生效,lib_B、lib_C属于com.group.other组,不受这个规则影响。
按照Gradle默认的依赖冲突处理逻辑,当同一个库被多个版本依赖时,会自动选择版本号更高的版本。
具体到这个场景:
lib_B版本:应用直接依赖lib_B:3.0.0,同时lib_A:8.0.0引入了lib_B:3.1.0,3.1.0是更高版本,因此最终使用lib_B:3.1.0。lib_C版本:由于lib_B:3.1.0绑定依赖lib_C:3.1.0,且没有其他版本的lib_C被引入,所以最终使用lib_C:3.1.0。
内容的提问来源于stack exchange,提问作者lannyf
相关产品推荐
相关产品推荐

