升级Android Support Library到27.1.0因kapt导致编译失败
嘿,我之前也碰到过类似的坑!你把Support Library从27.0.2升到27.1.0后,Kotlin数据绑定的Kapt任务在KaptTask.kt:124报错,结合你用的Kotlin 1.2.30和Data Binding Compiler 3.0.1,这大概率是依赖版本不兼容搞的鬼,下面给你一步步排查解决:
为啥会出这问题?
Support Library 27.1.0要求搭配的Android Gradle插件至少是3.0.1,你用的Data Binding Compiler版本是对的,但Kotlin 1.2.30和这个组合存在Kapt的兼容性bug——毕竟Kapt是注解处理工具,对版本匹配的要求特别严,尤其是Data Binding这种和编译流程深度绑定的东西。
具体怎么解决?
1. 先确认Data Binding Compiler和插件版本完全同步
Data Binding Compiler的版本必须和你根目录build.gradle里的Android Gradle插件版本一模一样。先打开根目录的build.gradle看看:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.0.1' // 核对这个版本 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30" } }
如果插件版本是3.0.1,那你的kapt依赖没问题;要是插件版本更高(比如3.1.x),就得把kapt改成对应版本,比如:
kapt "com.android.databinding:compiler:3.1.4" // 和插件版本严格对齐
2. 升级Kotlin版本到兼容的稳定版
Kotlin 1.2.30确实有不少Kapt相关的bug,和Support Library 27.1.0搭配容易出问题。建议你把Kotlin升到1.2.41或者更高(这个版本修复了一堆编译相关的问题):
// 模块build.gradle里的依赖 implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.41" // 根目录build.gradle里的插件也要同步升级 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.41"
3. 清缓存再重新编译
有时候缓存会残留旧的编译信息,导致奇怪的错误。你可以:
- 在Android Studio里点
File -> Invalidate Caches / Restart,选Invalidate and Restart - 或者终端里跑命令:
./gradlew clean ./gradlew assembleDebug
4. 检查数据绑定代码有没有语法问题
要是上面几步都没用,可能是升级后Data Binding的检查更严格了,你得看看自己的代码:
- 布局里的
@{}表达式有没有类型不匹配的情况 - 数据类的getter/setter是不是符合Data Binding的要求
- 自定义的BindingAdapter有没有参数写错
验证一下
改完之后重新跑assemble任务,如果成功了就搞定了;要是还报错,建议用./gradlew assembleDebug --stacktrace看更详细的堆栈信息,看看具体是哪个注解处理器出了问题,这样更容易定位。
内容的提问来源于stack exchange,提问作者Matthew Ruth

