개발 환경: OSX, Android Studio, Flutter, JDK17, Gradle 7.5
사이드 프로젝트로 Flutter 개발을 진행 중에 마주한 에러...
python이 주언어인 나에게 venv 개념을 적용할 수 없는 새로운 영역의 개발 프로젝트였다
아니나 다를까 개발 과정에서 가장 고통스러웠던 부분이 의존성 관리 🤯
jdk, kotlin, gradle 간의 호환성을 체크하고 패키지와 프로젝트 버전 사이에 의존성을 관리하는 게 너무 어지러웠다 😇
flutter 가 친절하게 문제 해결 방향을 안내해 주기는 했지만,
고쳐도 계속 나타나는 using incompatible Gradle version 에러 😔
[!] Your project's Gradle version is incompatible with the Java version that Flutter is using │
│ for Gradle.
...
Then, update the Gradle version specified in │
│ /Users/-/Downloads/proj/capstone-demo/client/android/gradle/wrapper/gradle-wrapper.proper │
│ ties to be compatible with that Java version. See the link below for more information on │
│ compatible Java/Gradle versions: │
│ https://docs.gradle.org/current/userguide/compatibility.html#java
삽질의 기록
먼저 에러 로그가 안내해 준 대로 현재 내 로컬 JDK에 맞는 Gradle, kotlin 버전을 찾아 수정해 준다
https://docs.gradle.org/current/userguide/compatibility.html#java
# 1) ~/android/gradle/gradle-wrapper.properties 파일 수정
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-8.3-all.zip
# 2) ~/android/app/src/build.gradle 파일 수정
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
id "com.google.gms.google-services" // Google Services plugin
}
...
android {
compileSdkVersion 34
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
checkReleaseBuilds false
}
defaultConfig {
applicationId "com.mycompany.test"
minSdkVersion 23
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
minSdkVersion 23
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
...
}
}
}
...
}
}
...
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.10"
}
그래도 동일 > 다른 버전 > 반복 > 다른 버전 > ...
그런데 뭔가 이상하다
로컬 java home 은 17 인데 android studio flutter 는 자꾸만 21로 잡는다?
아래 명령어를 다 사용해 봐도 요지부동!
$ ./gradlew clean
$ ./gradlew --refresh-dependencies
$ ./gradlew lintDebug -PwriteBaselineFile=true
그러다 문득 $ flutter create .
명령어를 실행하라는 코멘트를 발견한다
결과는?
All done!
You can find general documentation for Flutter at: https://docs.flutter.dev/
Detailed API documentation is available at: https://api.flutter.dev/
If you prefer video documentation, consider: https://www.youtube.com/c/flutterdev
In order to run your application, type:
$ cd .
$ flutter run
Your application code is in ./lib/main.dart.
The configured version of Java detected may conflict with the Gradle version in your new Flutter app.
[RECOMMENDED] If so, to keep the default Gradle version 8.3, make
sure to download a compatible Java version
(Java 17 <= compatible Java version < Java 21).
You may configure this compatible Java version by running:
`flutter config --jdk-dir=<JDK_DIRECTORY>`
Note that this is a global configuration for Flutter.
Alternatively, to continue using your configured Java version, update the Gradle
version specified in the following file to a compatible Gradle version (compatible Gradle version range: 8.4 - 8.7):
/Users/-/Downloads/proj/grammar-backend/client/android/gradle/wrapper/gradle-wrapper.properties
You may also update the Gradle version used by running
`./gradlew wrapper --gradle-version=<COMPATIBLE_GRADLE_VERSION>`.
See
https://docs.gradle.org/current/userguide/compatibility.html#java for details
on compatible Java/Gradle versions, and see
https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:upgrading_wrapper
for more details on using the Gradle Wrapper command to update the Gradle version
used.
OMG 😳 flutter prj를 잡아주고 성공하자 매우매우 친절한 로그가 출력된다
현재 플젝에 jdk config 지정, gradle 버전 재설정 하니 flutter run 성공!
$ flutter config --jdk-dir=<JDK_DIRECTORY>
$ ./gradlew wrapper --gradle-version=<COMPATIBLE_GRADLE_VERSION>
기초 구조를 git 에서 pull 받고 flutter config 지정도 없이 doctor, pub get 을 난무했더니 버전이 꼬일대로 꼬인 것이었다
특히 venv 처럼 응용하겠다고 fvm 커맨드를 난사한 것도 영향이 컸다
제일 좋은 지침서는 공식 문서!
오늘의 교훈이다... 수많은 블로그, stack overflow, llm 의 도움을 받았지만 가장 명쾌한 것은 공식 문서와 디버깅 로그였다
힌트는 역시 가장 가까운 곳에... 🥹
flutter 에도 nvm 과 유사하게 sdk 버전 관리를 지원하는 fvm
이 있다
설치된 여러 jdk 중 프로젝트에 따라 호환되는 버전을 스위칭하는 컨셉 같다
$ fvm use 3.10.5
같이 손쉽게 사용 가능한 기본 개념이니 익숙해지면 좋을 듯하다
감사합니다. 선생님 저도 이것때문에 미쳐버리는줄 알았는데 따라하니까 해결되네요.