Android依赖版本冲突求助:support-v4编译与运行版本不一致
解决Android Support-v4编译与运行时版本冲突问题
嗨,我来帮你搞定这个依赖版本冲突的问题!这种情况通常是你的库模块或者某个间接依赖悄悄引入了不同版本的support-v4导致的,别着急,咱们一步步来排查和解决:
第一步:找出冲突的根源
先搞清楚到底是哪个依赖拉了旧版本的support-v4,在终端里运行Gradle依赖树命令:
- 如果你是Mac/Linux:
./gradlew app:dependencies - 如果你是Windows:
gradlew.bat app:dependencies
运行完之后,在输出里搜索com.android.support:support-v4,就能看到所有引入这个依赖的层级,很快就能定位到是你的库模块还是某个第三方依赖带进来的21.0.3版本。
第二步:统一版本的两种方案
方案一:强制所有support库用同一版本(最省心)
直接在Project级别的build.gradle(不是主模块那个)里添加版本强制策略,让所有依赖的support库都用你指定的27.1.1版本:
allprojects { repositories { google() jcenter() // 或者你用到的其他仓库 } configurations.all { resolutionStrategy { // 强制指定support-v4的版本 force 'com.android.support:support-v4:27.1.1' // 可以顺带把其他相关support库也强制统一,避免后续其他冲突 force 'com.android.support:support-annotations:27.1.1' force 'com.android.support:support-core-ui:27.1.1' } } }
不管哪个依赖想拉旧版本,都会被Gradle替换成你指定的版本,完美解决版本不一致的问题。
方案二:排除特定依赖的旧版本(更精准)
如果你不想强制所有版本,就找到刚才定位到的那个引入21.0.3的依赖,把它自带的support-v4排除掉:
- 如果是你的库模块引入的,就在主模块的
dependencies里修改:
implementation project(':library-module') { exclude group: 'com.android.support', module: 'support-v4' }
- 如果是某个第三方依赖引入的,比如
com.example:some-lib:1.0.0,就这么写:
implementation 'com.example:some-lib:1.0.0' { exclude group: 'com.android.support', module: 'support-v4' }
这样主项目的support-v4就会统一使用你配置的27.1.1版本了。
最后一步:同步编译
修改完之后,点击Android Studio右上角的「Sync Now」按钮同步Gradle,之后重新编译项目,这个版本冲突的问题就应该消失啦!
另外提一句,如果你的项目还没迁移到AndroidX,其实可以考虑逐步替换成AndroidX的依赖,这样能从根源上避免这类support库的版本冲突问题哦。
内容的提问来源于stack exchange,提问作者Calvin Kitchen
相关产品推荐
相关产品推荐

