更新PlayService至12.0.0后应用构建失败,DataBinding相关报错
我之前也碰到过一模一样的情况——把Play Services从11.8.0升到12.0.0后,DataBinding生成的类突然就找不到了,报错和你描述的完全一致。下面是我亲测有效的几个解决办法,你可以挨个试试:
1. 检查Gradle插件与Gradle版本的兼容性
Play Services 12.0.0对Android Gradle Plugin版本有最低要求,你需要确保项目根目录下的build.gradle里的插件版本至少是3.0.0(或更高稳定版):
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' // 也可以用3.1.4这类更高稳定版 // 其他依赖... } }
同时,Gradle wrapper版本也要对应修改,打开gradle/wrapper/gradle-wrapper.properties,把distributionUrl改成对应版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
(注:Android Gradle Plugin 3.0.0对应Gradle 4.1,你可以根据插件版本找匹配的Gradle版本)
2. 手动指定DataBinding注解处理器依赖
升级后注解处理器的自动配置偶尔会出问题,你可以在app模块的build.gradle里手动添加依赖,版本要和Gradle插件版本一致:
android { dataBinding { enabled = true } } dependencies { // 其他业务依赖... annotationProcessor 'com.android.databinding:compiler:3.0.0' }
3. 清理缓存并重新构建项目
这是最基础但经常有效的排障步骤:
- 点击Android Studio菜单栏的
Build->Clean Project - 接着点击
Build->Rebuild Project - 如果还是不行,试试
File->Invalidate Caches / Restart,选择Invalidate and Restart
4. 排查布局文件的隐藏语法错误
DataBinding生成失败很多时候是因为布局文件里有隐性问题,比如<data>标签里的变量名拼写错误、类型不匹配,或者XML标签未正确闭合。你可以打开对应的布局文件(比如main_fragment.xml),仔细检查DataBinding相关的配置内容。
5. 规范Play Services依赖的导入方式
建议不要使用旧的全量依赖compile 'com.google.android.gms:play-services:12.0.0',改用拆分后的组件依赖(比如compile 'com.google.android.gms:play-services-maps:12.0.0'),既减少包体积,也能避免一些兼容性冲突。
如果以上方法都试过还是不行,可以暂时把Play Services版本回退到11.8.0,再逐步排查是不是某个特定组件导致的问题。
内容的提问来源于stack exchange,提问作者Rajasekaran M

