반응형
Kotlin 2.0 이후 발생하는 Android + OpenCV 빌드 문제
Kotlin 2.0 이상 버전 부터 OPenCV 컴파일러 에러가 발생합니다;.
java 프로젝트는 시도해보진 않았지만 Java 에서는 잘작동되는것으로 보입니다, 하지만 코틀린 2.0 이상부터는 문제가 발생하더라구요.. 버전을 다운그레이드 하거나 아래방법을 따라하면 해결하실수있을거에요.
특히 Android 프로젝트에서 OpenCV 모듈을 사용할 때 아래와 같은 에러 메시지를 마주했다면,
이 글이 큰 도움이 될 수 있습니다:
Execution failed for task ':opencv:compileDebugKotlin'.
> A failure occurred while executing ...GradleKotlinCompilerWorkAction
> Internal compiler error. See log for more details
또는
Caused by: org.gradle.api.InvalidUserCodeException:
Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (17) and 'compileDebugKotlin' (21).
이는 Kotlin IR(Intermediate Representation) 컴파일러가 내부적으로 충돌하는 전형적인 문제이며,
OpenCV의 MatAt.kt와 Kotlin DSL 설정이 핵심 이슈입니다.
⚙️ 문제 원인 및 해결 방법
✅ 1. JDK / Kotlin / Gradle 버전 불일치
📌 증상:
- Kotlin 컴파일러가 jvmTarget 17을 사용하지 않거나, Java와 Kotlin이 서로 다른 JVM 타겟을 사용할 때 충돌 발생
- Kotlin 2.0의 기본 jvmTarget은 21이지만, 프로젝트가 JDK 17을 사용할 경우 충돌
💡 해결 방법:
**/app/build.gradle.kts 그리고 opencv/build.gradle 에 아래 설정 추가:
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 //버전은 자신이 쓰는 버전으로
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17" // Kotlin 컴파일 타겟 명시
}
}
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
2. OpenCV MatAt.kt 관련 IR 컴파일 오류
📌 증상:
- Kotlin IR lowering 중 MatAt.kt에서 BackendException 발생
- reified, UByte, UShort 등 특수 타입 처리 코드가 IR 단계에서 충돌
💡 해결 방법:
- 아래 PR 기반으로 MatAt.kt 내부 수정
👉 opencv-kt-76615.diff GitHub Gist - 핵심 변경: .toUByte(), .toUShort()를 명시적으로 적용
- val data = ubyteArrayOf(v._0.toUByte(), v._1.toUByte())
- Gradle 클린 및 리빌드
- ./gradlew clean :opencv:compileDebugKotlin
이후 오류가 사라지고 정상적으로 Kotlin + OpenCV 빌드가 가능해졌습니다.
: Kotlin 2.0 시대, IR 충돌은 예고된 이슈
Kotlin 2.0은 성능 및 언어적 개선이 많지만,
IR 기반 컴파일러의 엄격함이 증가하면서 기존 코드와의 충돌 가능성도 커졌습니다.
특히:
- OpenCV처럼 Java 기반 외부 라이브러리와 Kotlin의 고급 기능(inline, reified)을 같이 쓰는 경우
- JDK, Kotlin, Gradle 간 버전 호환이 정확히 일치하지 않으면 치명적인 에러로 이어집니다
🔖 요약
문제 원인 해결
compileDebugKotlin 실패 | JDK/Kotlin/Gradle 불일치 | jvmTarget, jvmToolchain 명시 |
MatAt.kt IR lowering 오류 | Kotlin IR과 OpenCV 타입 추론 충돌 | .toUByte(), .toUShort() 수동 적용 |
🔗 참고링크
이 블로그 글이 같은 문제로 고생하는 개발자들에게 도움이 되길 바랍니다.
질문이나 추가 정보가 필요하시면 댓글로 남겨주세요!
반응형
'코틀린 > 에러모음' 카테고리의 다른 글
[Android/Kotlin] Tensorflow error : Cannot access class 'org.tensorflow.lite.gpu.GpuDelegateFactory.Options 해결법 (2) | 2025.05.01 |
---|