You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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+更稳定:

  1. 在app模块的build.gradle中启用ViewBinding:
android {
  // 原有配置...
  buildFeatures {
    viewBinding true
  }
}
  1. 替换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 { /* 点击逻辑 */ }
      }
      
  2. 移除ButterKnife相关依赖,清理项目后重新编译。

验证步骤

  1. 执行File > Sync Project with Gradle Files
  2. 执行Build > Clean Project
  3. 执行Build > Rebuild Project
  4. 尝试调试运行

内容的提问来源于stack exchange,提问作者Seyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:15:16