일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 다행이야...ㅎ
- 플러터
- 얘들아 잘 지내니
- 확진
- 지독한 컨셉충
- 뽀모도로 타이머
- 재택치료
- 정보처리기사 2022
- AWS
- 아싸의 생일
- FLUTTER
- 모바일 청첩장
- 다들 안잊어서
- 레이튼 교수와 이상한 마을
- 다음에 또 만나자
- 수제비2022 정리
- 스프링 MVC
- N-Queen
- 교육봉사
- 개강해짐
- CRUDS
- 생일축하해 나 자신
- 대외활동
- 교수님 과제 이제 그만..
- pem키 분실
- 수제비 2022
- 자가격리
- 2022 정보처리기사
- 정보처리기사2022
- 대학생
- Today
- Total
Rei’s Tech diary
[Flutter] 플러그인 NDK 버전 불일치 문제 해결 본문
📢 문제 상황
현재 사용하는 Android NDK 버전은 26.3.11579264 인데,
flutter_native_splash 플러그인을 사용하려는 과정에서
해당 플러그인은 NDK 버전 27.0.12077973 버전을 요구해서 생기는 문제이다.
🚫 왜 문제가 되는가?
- 같은 프로젝트에서 서로 다른 NDK 버전을 요구하면 컴파일 시 충돌이 나서 빌드 실패가 뜬다.
- flutter_native_splash 같이 빌드시 네이티브 작업을 포함하는 패키지는 특정 버전에 의존할 수 있으니 주의!
✨ Android NDK는 버전이 올라가도 대부분 하위 호환이 돼서 더 높은 버전을 쓰는게 일반적으로 안전하다.
📢 에러 메시지
Your project is configured with Android NDK 26.3.11579264, but the following plugin(s) depend on a different Android NDK version:
- flutter_native_splash requires Android NDK 27.0.12077973
Fix this issue by using the highest Android NDK version (they are backward compatible).
Add the following to C:\flutterProjects\pomodoro_timer\android\app\build.gradle.kts:
android {
ndkVersion = "27.0.12077973"
...
}
💡 해결 방법
더 높은 버전(27.0.1277973)으로 통일해주면 된다!
1. Tools > SDK Manager > SDK Tools 에서 27.0.1 버전을 체크한 후, OK 하여 설치
2. build.gradle.kts (Gradle 설정 파일) 파일 수정
android > app > build.gradle.kts(Gradle 설정 파일)을 보면 다음과 같이 설정되어있다.
flutter.ndkVersion을 타고 들어가보면 현재 26.3.115... 버전을 쓰고 있다는걸 알 수 있다.
이제 이걸 다음과 같이 맞는 버전으로 변경해준다.
이때 JVM 타겟 버전도 17로 맞춰줘야 빌드 오류가 안난다.
이후 yaml 파일에서 Sync Now 한 뒤, Terminal 에서 의존성 정리하고, 설정 리셋한 다음 빌드하니 정상적으로 작동했다.
# 의존성 정리
flutter pub get
# Android 관련 설정 리셋
flutter clean
# 앱 실행
flutter run
📢 Java 8+ API 관련 오류 해결 (Core library desugaring 활성화 하기)
추가적으로 Java 8+ API 관련 오류 해결법이다.
(대표적으로 requires core library desugaring to be enabled, Unsupported class file major version XX, Default interface methods are only supported starting with Android N (API 24), Lambda expressions not supported 등등)
위에 적은 NDK 충돌 문제와는 별개로, 사용중인 라이브러리가 Java 8+ 기능을 사용할때 desugaring 설정이 필요하다.
✅ Desugaring이란?
Java 8 이상에서 새롭게 추가된 기능들, 예를 들면 람다 표현식, Stream API, 기본 메서드 인터페이스 등을 구 버전의 Android 시스템에 지원하도록 변환하는 기술이다.
즉, Android가 이해하지 못하는 Java 8 기능을 구버전에서 작동하도록 변환해주는 기술이다.
주의!! ) Android Gradle Plugin 4.0 이상이어야 제대로 동작한다. 너무 낮은 버전은 desugaring이 안될 수도 있다고 한다.
android/app/build.gradle
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
// 👇 Add this line to enable core library desugaring
isCoreLibraryDesugaringEnabled = true
}
}
dependencies {
// 👇 Add this line to support Java 8+ APIs needed by some libraries
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3")
}
참조)
https://developer.android.com/studio/write/java8-support?hl=ko#kts
Java 8 언어 기능 및 API 사용 | Android Studio | Android Developers
사용할 수 있는 Java 8 언어 기능, 이러한 기능을 사용할 프로젝트를 올바르게 구성하는 방법 및 발생할 수 있는 알려진 문제를 알아봅니다.
developer.android.com
'프로그래밍 > TroubleShooting' 카테고리의 다른 글
[Flutter] 회전 메타데이터 문제 해결 - Android에서 동영상이 이상하게 회전돼서 나올 때 (feat. FFmpeg) (0) | 2025.05.12 |
---|---|
오버플로우 방지 중간값 계산 (overflow-safe midpoint calculation) (2) | 2025.01.14 |
[Spring Boot] JWT Cannot pass null or empty values to constructor 문제 해결하기 (0) | 2024.04.22 |
[Spring Boot] JWT 403 Forbidden 오류 해결하기 (0) | 2024.04.22 |
[AWS] pem키 분실 문제 해결하기 (0) | 2024.01.02 |