如何修复 Android Studio 中的“模块 java.base 不会“打开 java.io”到未命名模块的“错误”?

IT小君   2021-12-31T04:09:12

背景

  1. 我在 android studio 开始了我的第一个项目,以熟悉 Android 编程。
  2. 我正在关注本教程,其中
  • 我创建了一个新项目 Empty Activity,没有任何更改
  • 它应该模拟一个显示“Hello World”消息的简单应用程序

问题描述 但是每次我尝试运行和构建(我现在想要模拟器)时,我都会收到以下错误消息。

Unable to make field private final java.lang.String java.io.File.path accessible:
Unable to make field private final java.lang.String java.io.File.path
accessible: module java.base does not "opens java.io" to unnamed module @42760a00

这是我的配置设置

  1. Android Gradle 插件版本:4.2.1
  2. Gradle 版本:7.0.1(已更改以解决我在同步 Gradle 时遇到的另一个问题(“Gradle 同步失败:不支持的类文件主要版本 60”)和基于此论坛上的讨论,如下所述)

Andrey Dernov 评论 2021 年 4 月 14 日 00:18 请使用 Gradle 7.0 或低于 16 版本的 JDK 来导入和构建项目(设置(macOS 上的首选项)| 构建、执行、部署 | 构建工具 | Gradle | Gradle JVM 选项)。

  1. JDK:16.0.1

有什么建议或想法吗?

评论(8)
IT小君

来自GitHub的解决方案对我有用不需要降级Java JDK。刚刚将 gradle-wrapper 属性中的 gradle 版本更改为 7.1.1(6.x 不支持 java 16),并在 gradle.properties 中添加以下行:

org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
2021-12-31T04:09:12   回复
IT小君

我发现这个讨论与我的问题有关。但无法弄清楚如何在Android Studio 中传递JVM 参数。

但是,用 JDK 15 替换 JDK 16 后错误消失了。

2021-12-31T04:09:13   回复
IT小君

我想我找到了解决方案。

如果您正在导入旧项目,则可能会遇到此错误。

基本上,您使用较低的 JDK 版本制作了旧项目,现在您的系统中当前安装了较高的 JDK 版本。

您应该避免使用更高的 JDK 版本来构建较旧的项目。

  1. 基本上下载 JDK 8 (1.8) 并安装它。
  2. 更改环境变量(将 JDK 8 路径写入环境变量)
  3. 然后更改您的项目结构并将 JDK 8 路径写入 JDK 位置。

在此处输入图片说明

  1. 使缓存无效并重新启动 android studio。
  2. 构建您的项目,它应该可以工作。

如果您收到以下错误:

Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

然后在 app.gradle 文件中添加以下依赖项:

 // multidex
implementation 'com.android.support:multidex:1.0.3'

那么你需要在你的 app.gradle 文件中启用 multidex。

android {
compileSdkVersion 30

defaultConfig {
    applicationId "com.convenient.easymeasure"
    minSdkVersion 19
    targetSdkVersion 30
    versionCode 1
    versionName "1.0"
    multiDexEnabled true

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
2021-12-31T04:09:13   回复
IT小君

运行Flutter doctor,如果有错误表明无法找到捆绑的 java(特别是如果您有 Android Studio 版本的Artic Fox),如果使用 Mac,请运行以下命令:

  1. cd /Applications/Android\ Studio.app/Contents/jre
  2. ln -s ../jre jdk
  3. ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk
2021-12-31T04:09:13   回复
IT小君

您必须使用 JDK-16,使用低于 JDK-16 的版本,就我而言,我降级到 JDK-11 并且对我有用。

2021-12-31T04:09:13   回复
IT小君

检查是否安装了 JDK 或未配置您的 SDK,然后再试一次,您可以从Java SE下载 JDK

2021-12-31T04:09:14   回复
IT小君

在 Macbook Air M1 Apple Silicon 为我工作。您无需降级或卸载 Java JDK。

就我而言,只需将 gradle-wrapper.properties 中的 gradle 版本更改为 7.2,如下所示:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip 

并在 gradle.properties 中添加以下行:

org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

github上的相关解决方案

2021-12-31T04:09:14   回复
IT小君

我下载了 2 JDK jdk-17.0.1jdk-11.0.13并在 gradle.properties 上添加以下行

org.gradle.java.home=C\:\\Program Files (x86)\\Java\\jdk-11.0.13

也去 Android Studio (Arctic Fox)-> Project Structure -> Gradle setting 并选择 JDK version

2021-12-31T04:09:14   回复