使用PreferenceFragmentCompat时Gradle报错:Support Library版本冲突
这个问题我之前也碰到过,Android的Support库对版本一致性要求特别严格——所有com.android.support开头的库必须用完全相同的版本号,不然确实会有运行时崩溃的风险。你遇到的情况是,引入PreferenceFragmentCompat的依赖后,它间接拉取了25.4.0版本的animated-vector-drawable,但你自己的项目里还在用25.3.1的appcompat-v7和cardview-v7,版本不匹配就触发了这个错误。
给你几个可行的解决办法:
1. 统一所有Support库的版本号
最简单直接的方式,把项目里所有com.android.support开头的依赖都改成同一个版本。比如把:
compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:cardview-v7:25.3.1'
改成:
compile 'com.android.support:appcompat-v7:25.4.0' compile 'com.android.support:cardview-v7:25.4.0'
同时确保你引入的PreferenceFragmentCompat依赖版本也是25.4.0,比如:
compile 'com.android.support:preference-v7:25.4.0'
2. 强制所有Support库使用指定版本
如果有些依赖是第三方库间接引入的,你没法直接修改它们的依赖声明,可以在app模块的build.gradle里添加一段配置,强制所有Support库统一版本:
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { // 排除multidex,因为它的版本规则不一样 if (!requested.name.startsWith("multidex")) { details.useVersion '25.4.0' } } } }
这样不管哪个依赖试图引入其他版本的Support库,都会被替换成你指定的25.4.0版本。
3. 排查依赖树找出冲突源
如果不确定是哪个库引入了冲突的版本,可以在终端执行以下命令查看完整的依赖树:
./gradlew app:dependencies
搜索com.android.support:animated-vector-drawable,就能看到是哪个依赖拉取了25.4.0版本,然后针对性地调整那个依赖的版本,或者用上面的强制配置来解决。
最后记得点击Android Studio右上角的"Sync Project with Gradle Files"按钮,同步完成后错误应该就消失了。
内容的提问来源于stack exchange,提问作者user9132502

