依赖了com.android.support:appcompat-v7:27.1.1,并且使用了DataBinding。
编译会失败提示找不到方法“ContextCompat.getColor(@NonNull Context context, @ColorRes int id)”,明明在27.1.1的appcompat-v7包里有有这个方法。
然后能搜到support-v4:21.0.3里也有这个类但是没有这个方法,这就说明依赖冲突了。而support-v4:21.0.3肯定是隐形依赖进来的。
用./gradlew app:dependencies列出库的依赖关系:
+--- com.android.databinding:library:1.3.1
| +--- com.android.support:support-v4:21.0.3
| | \--- com.android.support:support-annotations:21.0.3 -> 27.1.1
| \--- com.android.databinding:baseLibrary:2.3.0-dev -> 3.0.1
原来databinding依赖了support-v4:21.0.3。
在 Gradle 中如果多个库依赖于相同的库的不同版本,Gradle 默认选择那个库的最新版本。上面显示 support-v4:21.0.3
依赖于 support-annotations:21.0.3
,但是有一个新版本 support-annotations:27.1.1
在依赖树中,所以 27.1.1 将会被使用。但是support-v4:21.0.3 只是 21.0.3 版本的,没有使用最新的 27.1.1 版本,导致了冲突。
所有的 com.android.support 库都必须使用完全相同的版本。
所以在项目根目录下的gradle下加就ok了:
android {
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:27.0.2'
}
}
网友评论