[Flutter] exception in phase 'semantic analysis' in source unit 'BuildScript' Unsupported class file major version 64
플러터가 안드로이드 애뮬레이터로 실행(디버깅)이 안되는 에러
iOS Simulator로는 잘만 디버깅되었는데 특정 기능이 iOS 시뮬레이터에선 작동이 안되는 기능이라 안드로이드 애뮬레이터로 확인해보려고 오랜만에 안드로이드 애뮬레이터를 켰는데 아래와 같은 에러와 함께 애뮬레이터로 디버깅이 안되는 상황이 발생했다.
FAILURE: Build failed with an exception.
* What went wrong: Could not open settings generic class cache for settings file '.\android\settings.gradle' (.\.gradle\caches\6.8.3\scripts\9w4vzv9io97x5h1yfb63h0ld4).
> BUG! exception in phase 'semantic analysis' in source unit 'BuildScript' Unsupported class file major version 64
To fix this issue, first, check the Java version used by Flutter by running flutter doctor --verbose.
Then, update the Gradle version specified in .\android\gradle\wrapper\gradle-wrapper.properties to be compatible with that Java version.
에러 문구에 나와있는데로 flutter doctor --verbose 를 통해 간단 진단을 해보았지만 그 진단을 통해서는 알 수 있는게 딱히 없었고, 그 문제는 아니었다.
해보았던 시도들
- flutter doctor --verbose 터미널에 입력
현재 내 플러터 상태를 간단하게 진단해주는 명령어인데, 이 문제는 아니었다.
- android > app > build.gradle 들어가서 설정 바꾸기
android {
namespace "~~~~"
compileSdkVersion 33
ndkVersion flutter.ndkVersion
compileOptions {
~~~~
}
kotlinOptions {
~~~~
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "~~"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 19//flutter.minSdkVersion
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
buildTypes {
~~~
}
lintOptions {
~~~
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "androidx.multidex:multidex:2.0.1"
}
여기에서 compileSdkVersion이랑 minSdkVersion, targetSdkVersion을 바꾸라고 해서 변경 해봤는데 바꿔도 별 변경점은 없었다.
문제원인
내 컴퓨터의 Java SDK Version과 프로젝트의 Gradle Version이 서로 호환되지 않는 문제다.
내 컴퓨터의 Java SDK Version은 20이었고, Gradle Version은 정확히 확인되진 않았다.
내가 기존에 Java가 11 Version이었던 걸로 기억하는데 지금 내 컴퓨터엔 왜 20으로 업데이트되어있는 진 모르겠지만
너무 높은 Java SDK Version이 문제라고 판단했다.
해결 방안
따라서 내 컴퓨터 Java SDK Version을 다운그레이드 하기로 결정했다.
1) 현재 내 Java SDK 확인
java -version
2) 현재 내 컴퓨터에 설치된 모든 Java SDK들 확인
/usr/libexec/java_home -V
3) 원하는 Java SDK로 변경하기 (나는 11.0.20)
open ~/.zshrc
vim이나 vi를 사용해서 터미널 상에서 자바 SDK를 변경해주어도 되지만, 개인적으로 vim 사용법이 좀 미숙해서
그냥 .zshrc 파일을 열어서 그 파일 내에서 직접 Java SDK Version을 변경해주었다.
현재 내 컴퓨터에 원하는 자바 SDK가 저장되어있지않다면 오라클 홈페이지 들어가서 다운로드 받고 난 후에 다시 확인하고
그 SDK로 변경해주면 된다.
https://www.oracle.com/java/technologies/downloads/
Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.
www.oracle.com
4) 변경한 Java SDK 버전 확인
이렇게 하고 다시 안드로이드 애뮬레이터로 디버깅을 실행시키기 잘 작동한다!
자바 SDK 버전이랑 프로젝트의 Gradle 버전 잘 맞는 지 안드로이드 사용할 땐 항상 유의하기!