본문 바로가기

Front-End/Flutter

[Flutter] Android Studio Ladybug에서 발생한 JDK Version 오류

반응형

회사에서 새로 지급받은 데스크톱에 플러터 세팅을 마치고, (flutter doctor -v까지 이상 없었음)
 
기존에 작업중이던 앱을 실행했는데 다음과 같은 에러가 발생했다.

Execution failed for task ':connectivity_plus:compileDebugJavaWithJavac'. Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'. > Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
 
간단히 구글링으로 해결하면 될줄 알았는데,
 
이것을 시작으로 6시간의 디버깅 지옥이 시작되었다. (대체 왜 그런 헛고생을 했을까...)
 
다른 말 필요없이 답만 알고 싶은 분들을 위해 결론부터 말하면,

flutter config --jdk-dir "자바 설치경로"

터미널에 이 명령어를 넣음으로써 해결되었다.


 
이제 해결을 위해 어떤 사고를 했는지 좀 주저리주저리 적어보겠다.
 
아래는 순서는 정확하진 않지만 마주했던 에러들이다.
 
아마 내가 제일 처음 적은 에러 말고도 이 아래에 있는 에러를 검색해서 들어온 분들도 있을거 같은데,
 
나처럼 무시하지말고 저 명령어 한 번 시도해보길,,


① Execution failed for task ':camera_android_camerax:compileDebugJavaWithJavac'. > Could not resolve all files for configuration ':camera_android_camerax:androidJdkImage'. > Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
 
Flutter failed to write to a file at "C:\Users\<사용자명>\StudioProjects\<프로젝트명>\.flutter-plugins". The flutter tool cannot access the file or directory.
위 에러는 아래 게시물 참조.
 https://three-jun.tistory.com/m/80

[Flutter] [Windows] Flutter failed to write to a file at "C:\Users\<사용자명>\StudioProjects\<프로젝트명>\.flutter-plug

오늘은 아주 간단하지만 골때리는 트러블슈팅을 가져왔다. 바로 제목처럼 파일 권한 문제인데, 나같은 경우 Mac에선 괜찮다가 윈도우10에서 발생했다. MacOS나 Linux 라면 바로 chmod를 할텐데, 윈

three-jun.tistory.com


Your project is configured to compile against Android SDK 33, but the following plugin(s) require to be compiled against a higher Android SDK version:
 
④ Error resolving plugin [id: 'dev.flutter.flutter-plugin-loader', version: '1.0.0'] > A problem occurred configuring project ':gradle'. > Could not read workspace metadata from C:\Users\<사용자명>\.gradle\caches\8.8\kotlin-dsl\accessors\927ac5881648da55799dc6aa0c8a3e2e\metadata.bin
 
 A problem occurred configuring project ':device_info_null_safety'. > Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl. > Namespace not specified. Specify a namespace in the module's build file:
 
⑥ Execution failed for task ':flutter_android_volume_keydown:processDebugManifest'. > A failure occurred while executing com.android.build.gradle.tasks.ProcessLibraryManifest$ProcessLibWorkAction


 
처음엔 몇 번의 구글링을 통해 AGP나 Gradle 의 버전 문제라고 생각했고,
 

android/settings.gradlegradle-wrapper.properties 두 파일의

id "com.android.application" version <버전> apply false
distributionUrl=https\://services.gradle.org/distributions/gradle-<버전>-all.zip

두 문장에 들어갈 버전만 수정해서 고치려고 했다.
 
그러나, 패키지 하나에 맞추면 다른 패키지가 안맞는다고 에러가 났고,
 
몇 개 맞추다보면 다시 제일 처음 패키지가 문제가 되는, 무한 에러의 굴레에 빠졌다.
 
그러다보니,
 
설치된 자바의 버전이 문젠가 하는 생각이 들었다.
 
해당 데스크탑에 설치된 자바의 버전은 17.

android {
    namespace "com.example.equip_check_client"
    compileSdk flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

코드를 살펴보니 요구하는 자바 버전은 8.
 
와중에 이거 처음에 18인줄 알고 18 깔았다가 8 깔았다. (멘붕에 빠진 사람은 이렇게 멍청합니다)
 
https://work2type.tistory.com/entry/CS-Java-18%EA%B3%BC-Java-8%EC%9D%98-%EC%B0%A8%EC%9D%B4

[CS] Java 1.8과 Java 8의 차이

안드로이드 프로젝트 설정을 하다 보면 gradle에서 jvmTarget, javaversion 설정을 해줘야한다. 그럴 때마다 1.8과 8버전에 대해 접하는데, 정작 이에 대해 궁금해서 자세히 알아본 적이 없는 것 같아 조

work2type.tistory.com

 
 
환경변수의 JAVA_HOME을 열심히 바꿔주고 재부팅까지 해주며 실행한 결과,
 
변화는 없었다.
 
이정도에 이르자 아무 죄없는 플러터 재설치도 해보았다.
 
당연히 해결은 되지 않았다.
 
작업하는 프로젝트의 dependency 패키지들이 좀 많았는데,
 
이 중 deprecated 된게 많은건가 싶어서
 
최근 잘 마무리된 프로젝트를 불러와서 실행해봤는데 여전히 빌드 실패.
 
이정도면 기기 문제인가 싶어서 전에 작업한적 있는 맥북에서 해봤는데 성공.
 
코드가 안바뀐 상태에서 기기만 바꾸고 성공했다는건 코드상에 명시된 AGP나 Gradle 버전의 문제는 아니라는 것이었고,
 
자바나 플러터 버전 또한 맞춰놨기에 결국엔 IDE 또는 하드웨어 문제 같았다.
 
(맥북에 설치된 안드로이드 스튜디오는 버전이 Koala 였다.)
 
이에 관해 관련 이슈가 있나 검색을 해보고 그 이유를 알 수 있었다.
 
https://stackoverflow.com/questions/79067849/flutter-3-24-3-problem-with-android-studio-ladybug-2024-2-1

Flutter 3.24.3 problem with Android Studio Ladybug | 2024.2.1

When I update Android studio to last version "Ladybug 2024.2.1" an error occur whenever I run application in android emulator or physical phone, this problem shows an error with a specific

stackoverflow.com

정리하자면,
 
Ladybug가 자체적인 자바 번들을 갖고 있는데, 이전 버전 플러터 플러그인 생태계에 대한 호환성이 매우 나빠서 자바를 별도로 설치 후 사용하도록 명시해줘야하는 것이었다. (어쩐지 그냥 자바만 설치했을 땐 안되더라 ㅜ)

flutter config --jdk-dir "자바 설치경로"

그래서 위와 같은 명령어를 사용하면 해결되는 것이다.
 
정말 정말 웃기고 어이가 없던 점은
 
제일 처음 생겼던 이 에러
 
Execution failed for task ':connectivity_plus:compileDebugJavaWithJavac'. Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'. > Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
 
를 검색하면 나오는 첫 게시글의 첫 답변이 바로 저 해결책이다.
 

https://stackoverflow.com/questions/79053829/could-not-resolve-all-files-for-configuration-connectivity-plusandroidjdkimag

Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'

I am working on a Flutter project and recently upgraded my Android Studio, Java versions and also the gradle version in gradle-wrapper.properties file to the latest In gradle-wrapper.properties file:

stackoverflow.com

 
난 처음에 해당 명령어가 설정창에 들어가서 자바 버전을 선택하는 것과 동일한 것인줄 알고,
 
이미 해본 방법이라고 생각해 스킵했는데 아니었다는거 ㅜ
 
다만 처음에 운좋게 바로 해결했다면 이런 지식이나 경험치는 얻지 못했을것이다.
 
이번 기회로 조금 더 성장했길 바란다..

반응형