构建成功,但在模拟器上运行失败,并在控制台中显示以下消息:
原因:超类访问检查失败:类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,但目前将整个项目转换为一项艰巨的任务。谢谢!
一些 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
我在将 android Studio 更新到 Android Studio Flamingo 后就遇到了这个问题 | 2022年2月1日,我的项目使用的是嵌入式jdk,我使用简单的步骤修复了
你应该使用不同的jdk进行编译,我正在使用太高级的jdk进行编译。将其恢复为 jdk11 解决了我的问题
请使用 JDK 11。虽然我们将 Gradle JDK 设置为 jdk11 或 correto 11,但 Android studio 无法识别这一点。
解决方案:
在终端中输入
java --version
查看它是否显示为 JDK 11
如果版本不是 JDK 11,则设置
JAVA_HOME
环境变量 export JAVA_HOME=/Users/${echo $USER}/documents/Android\Studio.app/Contents/jre/Contents/Home
在终端中输入
java --version
查看它是否显示为 JDK 11。
使用上面答案中的想法并使用 Android Studio:文件 |设置|构建、执行、部署 |构建工具|摇篮。 Gradle JDK -> Android Studio 默认 JDK(版本 11.0.13 ...)
在 Windows 上,要从终端构建,还必须添加
JAVA_HOME=C:\Program Files\Android\Android Studio\jre
前往文件 |设置|终端|环境变量
从文件夹 C:\Users\yourUser.gradle\ 中删除文件夹 .gradle 解决了该问题。
尝试将以下代码添加到应用程序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
请将此行添加到 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', ] } }