본문 바로가기
코틀린/에러모음

[Android/Kotlin] OpenCV MatAt.kt IR 오류 해결 방법

by DevVerseMD 2025. 4. 23.
반응형

 

 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 단계에서 충돌

💡 해결 방법:

  1. 아래 PR 기반으로 MatAt.kt 내부 수정
    👉 opencv-kt-76615.diff GitHub Gist
  2. 핵심 변경: .toUByte(), .toUShort()를 명시적으로 적용
  3. val data = ubyteArrayOf(v._0.toUByte(), v._1.toUByte())
  4. Gradle 클린 및 리빌드
  5. ./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() 수동 적용

🔗 참고링크


이 블로그 글이 같은 문제로 고생하는 개발자들에게 도움이 되길 바랍니다.
질문이나 추가 정보가 필요하시면 댓글로 남겨주세요!
 

반응형