go to index

JDK17 与 ButterKinife 冲突 class butterknife.compiler.ButterKnifeProcessor$RScanner的解决方案

read time 2 min read
JDK ButterKnife JVM

概述

在编译 Android Studio 项目时,可能会遇到以下错误提示:

plaintext
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x274412b0) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x274412b0

该错误通常表示 ButterKnife 的处理器类无法访问 JDK 编译器模块中的某些内部类。本文将介绍两种解决方法。

解决办法

一:降低 JDK 版本

如果使用的是 JDK 17,可以尝试将 JDK 版本降为 JDK 11 或 JDK 15。较低版本的 JDK 可能不会出现此类问题。

步骤

  1. 下载并安装较低版本的 JDK

  2. 配置 Android Studio 使用新版本的 JDK

    • 打开 Android Studio,点击菜单栏中的 File -> Project Structure
    • Project 标签下选择新安装的 JDK 版本。

二:修改 gradle.properties 文件

可以在项目的根目录下的 gradle.properties 文件中添加特定的 JVM 参数,以允许访问所需的内部类。

步骤

  1. 编辑 gradle.properties 文件

    • 打开项目根目录下的 gradle.properties 文件。
  2. 添加以下配置

    properties
    org.gradle.jvmargs=-Xmx1920M \
        --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
    
  3. 保存文件并重新构建项目

    • 保存更改后,重新构建项目以确保设置生效。