Android Studio Flamingo升级后出现compileDebugJavaWithJavac错误
解决AGP 8.0升级后ButterKnife编译报错问题
问题原因
报错核心是ButterKnife注解处理器的旧版本不兼容JDK 11的模块系统,AGP 8.0默认适配JDK 11,而ButterKnife编译器尝试访问JDK内部的com.sun.tools.javac.tree.TreeScanner类,但JDK模块系统未将该包暴露给ButterKnife所在的未命名模块,导致访问权限被拦截。
解决方案
方案1:升级ButterKnife到最新兼容版本
ButterKnife最后一个维护版本是10.2.3,若项目使用的版本低于此,先升级依赖:
在app模块的build.gradle中修改ButterKnife相关依赖:
dependencies { implementation 'com.jakewharton:butterknife:10.2.3' // Java项目用annotationProcessor annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' // Kotlin项目替换为kapt // kapt 'com.jakewharton:butterknife-compiler:10.2.3' }
同步Gradle后重新编译。
方案2:添加JVM参数开放JDK内部API访问
若升级后仍报错,需给注解处理器添加JVM参数,让JDK开放相关内部包:
在app模块的build.gradle的android块中补充配置:
android { // 原有配置... compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 // 给Java注解处理器添加参数 annotationProcessorOptions { compilerArgs += [ "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" ] } } // Kotlin项目额外添加kapt参数 kapt { arguments { arg("add-exports", "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED") arg("add-exports", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED") arg("add-exports", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED") } } }
方案3:替换ButterKnife为ViewBinding(推荐)
ButterKnife已停止维护,Google官方推荐使用ViewBinding替代,适配AGP 8.0+更稳定:
- 在app模块的
build.gradle中启用ViewBinding:
android { // 原有配置... buildFeatures { viewBinding true } }
- 替换ButterKnife的注解代码:
- 移除所有
@BindView、@OnClick等注解 - 在Activity/Fragment中通过生成的Binding类获取View:
// Activity示例 private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 直接通过binding访问控件,替代ButterKnife的注解变量 binding.submitBtn.setOnClickListener { /* 点击逻辑 */ } }
- 移除所有
- 移除ButterKnife相关依赖,清理项目后重新编译。
验证步骤
- 执行
File > Sync Project with Gradle Files - 执行
Build > Clean Project - 执行
Build > Rebuild Project - 尝试调试运行
内容的提问来源于stack exchange,提问作者Seyf
相关产品推荐
相关产品推荐

