Skip to content

module java.base does not "opens java.io" to unnamed module エラーの解決方法

このエラーは、Java 9以降で導入されたモジュールシステムとリフレクション操作の互換性問題によって発生します。Android Studioでプロジェクトを実行しようとしたときに表示される場合があります。

問題の原因

Java 9で導入されたモジュールシステムでは、セキュリティ強化のためリフレクションを用いた内部APIへのアクセスが制限されています。特に、以下の状況でこのエラーが発生します:

  • Java 16以上のJDKを使用している
  • 古いバージョンのGradleプラグインを使用している
  • リフレクションを多用するライブラリ(Gsonなど)を使用している

エラーメッセージは、java.ioパッケージが無名モジュールに対して「開かれていない」ことを示しています。

解決方法

方法1: JDKのダウングレード(推奨)

Android開発では、JDK 8または11を使用することが最も安全です。

INFO

Android Studioでは、プロジェクトごとに異なるJDKバージョンを設定できます。

手順:

  1. JDK 8または11をインストール
  2. Android Studioで File > Project Structure
  3. SDK Location タブを選択
  4. JDK location にダウンロードしたJDKのパスを設定

方法2: Gradleの設定変更

gradle.properties ファイルに以下の設定を追加します:

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

方法3: GradleとJDKの互換性調整

使用しているGradleバージョンとJDKの互換性を確認してください。

互換性テーブル:

JDKバージョン推奨Gradleバージョン
JDK 8Gradle 6.x
JDK 11Gradle 7.x
JDK 17+Gradle 7.3+

設定変更手順:

  1. gradle-wrapper.properties の更新:
properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
  1. build.gradle の依存関係更新:
gradle
dependencies {
    classpath 'com.android.tools.build:gradle:7.2.1'
}

方法4: 環境変数によるJDK指定

プロジェクト固有のJDKを使用する場合:

properties
# gradle.propertiesに追加
org.gradle.java.home=C\:\\Path\\To\\Your\\JDK

またはコマンドラインで:

bash
JAVA_HOME=/path/to/jdk ./gradlew build

フラッター(Flutter)プロジェクトの場合

Flutterプロジェクトでこのエラーが発生した場合:

  1. android フォルダ内の設定を上記の方法で修正
  2. または以下のコマンドでAndroidフォルダを再生成:
bash
flutter create .

回避策(非推奨)

どうしても解決できない場合の最終手段:

WARNING

この方法はセキュリティリスクがあるため、一時的な回避策としてのみ使用してください。

properties
# gradle.propertiesに追加
org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED

まとめ

このエラーを解決するには、以下のいずれかの方法を試してください:

  1. JDKを8または11にダウングレード(最も安全な解決策)
  2. GradleのバージョンとJDKの互換性を調整
  3. gradle.propertiesに必要なJVM引数を追加

Android Studioのバージョンやプロジェクトの状況に応じて、最適な解決方法を選択してください。新しいプロジェクトでは、常に最新の安定版JDKとGradleの使用を推奨します。