Rei’s Tech diary

[Flutter] 플러그인 NDK 버전 불일치 문제 해결 본문

프로그래밍/TroubleShooting

[Flutter] 플러그인 NDK 버전 불일치 문제 해결

Reiger 2025. 4. 5. 12:33

📢 문제 상황

요 녀석을 쓰려니 문제가 생김

 

현재 사용하는 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"
        ...
    }

build창의 에러 메시지

 

 

 

💡 해결 방법

 

더 높은 버전(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