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

Android Studio中ButterKnife Compiler报错求助:JDK模块权限问题

解决ButterKnife在JDK11下的模块访问权限错误

错误原因

这个报错是JDK 9+模块化机制导致的:ButterKnife编译器的ButterKnifeProcessor$RScanner类需要访问jdk.compiler模块内部的com.sun.tools.javac.tree.TreeScanner类,但JDK默认没有将这个包暴露给未命名模块(你的项目代码所在模块),触发了访问权限检查失败。

可行解决方案

方案1:添加module-info.java配置模块权限

  • 在项目主源码目录(通常是src/main/java)创建module-info.java文件
  • 填入以下代码,替换占位符为你的项目信息:
module com.yourcompany.yourapp { // 替换为你的模块完整名称
    requires jdk.compiler;
    requires butterknife.compiler;
    opens com.yourcompany.yourapp to butterknife.compiler; // 替换为你的项目根包路径,多个包可添加多条opens语句
}

同步Gradle后重新构建项目。

方案2:升级ButterKnife到适配JDK11的版本

ButterKnife 10.2.3及以上版本已适配JDK 9+模块化,直接升级依赖即可:
在Module级别的build.gradle中更新依赖:

dependencies {
    implementation 'com.jakewharton:butterknife:10.2.3'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
}

同步Gradle后重新构建。

方案3:添加JVM参数强制开放模块访问

如果不想修改模块声明或升级依赖,可通过JVM参数绕过权限检查:

  1. 打开Android Studio设置:File → Settings(Mac为Android Studio → Settings)
  2. 进入Build, Execution, Deployment → Compiler → Java Compiler
  3. 在Additional command line parameters中添加:
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
  1. 点击Apply后重新构建项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:37:07