Android中ButterKnife的@OnClick失效且触发BootstrapMethodError异常
解决ButterKnife @OnClick失效+BootstrapMethodError异常的问题
嘿,我来帮你搞定这个问题!从你贴的报错日志和代码来看,这个BootstrapMethodError是关键——它出现在ButterKnife内部的DebouncingOnClickListener初始化环节,说白了就是ButterKnife用了Java 8的特性,但你的项目没开启Java 8编译支持,或者版本不兼容导致的。下面给你分情况解决:
最常见原因:没开Java 8编译支持
ButterKnife从9.x版本开始就依赖Java 8特性了,所以必须在项目里开启这个配置:
- 打开你Module级别的
build.gradle(一般是app/build.gradle) - 在
android代码块里加上这些配置:
android { // 保留你原来的配置,新增下面这段 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // 如果你的项目用了Kotlin,还要加这个 kotlinOptions { jvmTarget = '1.8' } }
- 点Android Studio右上角的「Sync Now」同步Gradle
- 先清理项目(Build → Clean Project),再重新构建(Build → Rebuild Project)
如果开了Java 8还是不行:检查版本兼容性
要是上面的步骤做完还报错,那可能是ButterKnife和Android Gradle插件(AGP)版本不匹配:
- 先把ButterKnife更到最新稳定版,在
app/build.gradle的依赖里改:
dependencies { // 换成当前最新的稳定版,比如10.2.3(可根据官方更新调整) implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' }
- 检查AGP版本,Project级别的
build.gradle里,AGP至少要3.2.0以上(ButterKnife 10+要求的):
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 用稳定版,别太老旧 } }
- 同样同步Gradle,清理重建项目
最后再检查几个小细节
- 你代码里
ButterKnife.bind(this)放在setContentView()之后,这步是对的,不用改 - 确认布局里的
test_btnID没写错,别和代码里的名字对不上 - 如果你的项目是AndroidX,那没问题,ButterKnife 10+完全支持AndroidX
按照上面的步骤来,@OnClick应该就能正常触发点击事件,那个BootstrapMethodError也会消失啦!
内容的提问来源于stack exchange,提问作者Kostya Lotysh
相关产品推荐
相关产品推荐

