如何在 Android Studio 中使用 ButterKnife 修复此错误?

问题描述 投票:0回答:8

构建成功,但在模拟器上运行失败,并在控制台中显示以下消息:

原因:超类访问检查失败:类butterknife.compiler.ButterKnifeProcessor$RScanner(在未命名模块@0x65e8e2f6中)无法访问类com.sun.tools.javac.tree.TreeScanner(在模块jdk.compiler中),因为模块jdk.compiler可以访问不将 com.sun.tools.javac.tree 导出到未命名模块 @0x65e8e2f6

我尝试过的:从 Gradle 中删除 Butterknife,同步,添加回来,再次同步。完全删除 Butterknife 库,这不会在编译时产生此错误,但显然由于缺少 Butterknife 而无法编译。

我的环境:Butterknife 10.2.3 Android Grade插件版本:7.1.2 - Gradle版本:7.2 - Android Studio Bumblebee

我读到,在某些罕见的情况下,其他库也会发生此错误,这些情况似乎与我的无关,但我仍然没有找到解决方案。我知道 Butterknife 已被弃用,我应该迁移到 ViewBinding,但目前将整个项目转换为一项艰巨的任务。谢谢!

android android-studio butterknife
8个回答
26
投票

一些 sun 库需要对较新的 Java 编译器可见。请参阅此答案了解更多信息。我将以下内容添加到我们的

gradle.properties
文件中,它解决了问题。 (我们使用 Butterknife 和 Realm,并且需要添加以下三个包。(对于 Butterknife,您可能不需要“javac.code”))

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

12
投票

我在将 android Studio 更新到 Android Studio Flamingo 后就遇到了这个问题 | 2022年2月1日,我的项目使用的是嵌入式jdk,我使用简单的步骤修复了

  1. https://www.oracle.com/pk/java/technologies/javase/jdk11-archive-downloads.html
  2. 下载适合您所需操作系统的 JDK 11
  3. 安装
  4. Android Studio-> 文件 -> 项目结构 -> SDK 位置 -> 单击 Gradle 设置(蓝色突出显示的文本) -> 从列表中选择版本名称为 11.0 的 jdk 11
  5. 运行项目
  6. 繁荣!这是作品

11
投票

你应该使用不同的jdk进行编译,我正在使用太高级的jdk进行编译。将其恢复为 jdk11 解决了我的问题


4
投票

请使用 JDK 11。虽然我们将 Gradle JDK 设置为 jdk11 或 correto 11,但 Android studio 无法识别这一点。

解决方案:

  1. 在终端中输入

    java --version
    查看它是否显示为 JDK 11

  2. 如果版本不是 JDK 11,则设置

    JAVA_HOME
    环境变量
    export JAVA_HOME=/Users/${echo $USER}/documents/Android\Studio.app/Contents/jre/Contents/Home

  3. 在终端中输入

    java --version
    查看它是否显示为 JDK 11。


4
投票

使用上面答案中的想法并使用 Android Studio:文件 |设置|构建、执行、部署 |构建工具|摇篮。 Gradle JDK -> Android Studio 默认 JDK(版本 11.0.13 ...)

在 Windows 上,要从终端构建,还必须添加

JAVA_HOME=C:\Program Files\Android\Android Studio\jre

前往文件 |设置|终端|环境变量


1
投票

从文件夹 C:\Users\yourUser.gradle\ 中删除文件夹 .gradle 解决了该问题。


1
投票

尝试将以下代码添加到应用程序build.gradle

tasks.withType(JavaCompile).configureEach{
options.fork = true
options.forkOptions.jvmArgs +=[
'--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']
}

在 gradle.properties 文件中,

android.nonFinalResIds=false

0
投票

请将此行添加到 build.gradle(:app) 文件中。

安卓{ tasks.withType(JavaCompile).configureEach { 选项.fork = true options.forkOptions.jvmArgs += [ '--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', '--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED', ] } }

© www.soinside.com 2019 - 2024. All rights reserved.