💨

Android StudioをアップデートしたらビルドでJava Rutime Error

2023/06/21に公開

先日、Android Studio Flamingo | 2022.2.1 Patch 2にアップデートして、FlutterでAndroidをビルドしうとしたらよくあるJava系のエラーが発生。

Javaのバージョンが古いらしい。

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

flutter doctor も通らず

[!] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc2)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

java のバージョンを確認、Java SE 8ではなく、Java SE 11が必要と思われる。

 /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    18 (x86_64) "Oracle Corporation" - "OpenJDK 18" /Users/kentaroyamamoto/Library/Java/JavaVirtualMachines/openjdk-18/Contents/Home
    1.8.0_144 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
    1.8.0_92 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
    1.7.0_71 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
    1.7.0_60 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home

Java SE 11をインストール。(Oracleのアカウントが必要になっている。)

Matching Java Virtual Machines (6):
    18 (x86_64) "Oracle Corporation" - "OpenJDK 18" /Users/kentaroyamamoto/Library/Java/JavaVirtualMachines/openjdk-18/Contents/Home
    11.0.19 (x86_64) "Oracle Corporation" - "Java SE 11.0.19" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    1.8.0_144 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
    1.8.0_92 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home
    1.7.0_71 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
    1.7.0_60 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home

したが、状況変わらず。

brew upgrade

で環境をアップデートしたら、修正されたと思ったら修正されず。

よく考えると、自分の環境はopenjdkで構成されているらしい
https://zenn.dev/hayato94087/articles/c0345e6c2c53e7

記事に従ってbrewを使ってopenjdkをインストールし直したら、java --versionがアップデートされた。

それでも直らず。。結局Android Studioのバグと思われるものを対処したら、flutter doctor が通る様に。。
https://qiita.com/y-matsumoto/items/74467e528c7b2c745b87

ここまででiOSのビルドは通った。Flutter doctor ではOKだったがAndroidのビルドが通らず。android/gradle.propertiesをエディットしてビルドできるようになった。こちらの記事を参考に対応。
https://stackoverflow.com/questions/70423297/java-lang-illegalaccesserror-class-org-gradle-internal-compiler-java-classnamec

変更前

org.gradle.jvmargs=-Xmx1536M

変更後

org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.code=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

Discussion