开启DataBinding后出现Support库版本冲突及方法找不到问题原因咨询
一、Support库版本冲突警告的原因
当你开启DataBinding时,你使用的旧版Gradle插件(3.0.1)会自动引入低版本的support-v4库(21.0.3),而你项目中已经声明了27.0.2版本的appcompat-v7。由于appcompat-v7本身依赖高版本的support库,这就导致项目中同时存在不同版本的support组件(比如com.android.support:animated-vector-drawable:27.0.2和com.android.support:support-v4:21.0.3),从而触发版本冲突警告。
二、checkSelfPermission找不到引用的原因
这个问题是版本冲突的连锁反应:旧版本的support-v4(21.0.3)中并没有ContextCompat.checkSelfPermission方法——这个方法是从support-v4的23.1.0版本才开始添加的。当DataBinding引入的旧版support-v4覆盖了你原本依赖的高版本组件后,编译器自然找不到这个方法的引用。
具体解决方案
你可以选择以下两种方案中的任意一种:
方案1:强制统一所有Support库的版本
在项目根目录的build.gradle中添加配置,强制所有support相关依赖使用你指定的版本(27.0.2):
allprojects { repositories { google() jcenter() } // 添加版本统一配置 configurations.all { resolutionStrategy { force "com.android.support:support-v4:$support_version" force "com.android.support:support-fragment:$support_version" // 若还有其他冲突组件,可根据警告提示补充 } } }
这样就能让DataBinding引入的support库也使用27.0.2版本,彻底解决版本不一致的问题。
方案2:升级Gradle插件到更高版本
旧版Gradle插件(3.0.x)的DataBinding依赖管理存在缺陷,升级到更高版本(比如3.2.x及以上,注意和你的Android Studio版本兼容)可以从根源上解决这个问题。修改根目录build.gradle中的gradle插件版本:
buildscript { ext.kotlin_version = '1.2.10' repositories { google() jcenter() } dependencies { // 示例:升级到3.2.1版本,可根据实际情况选择兼容版本 classpath 'com.android.tools.build:gradle:3.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
升级后,DataBinding会自动匹配你声明的support版本,无需额外配置。
内容的提问来源于stack exchange,提问作者Alon Parker

