gradle隐形依赖

依赖了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'
    }
}

你可能感兴趣的:(gradle隐形依赖)