홈 > 프로그래밍 > 안드로이드
안드로이드

MethodHandle.invoke and MethodHandle.invokeExact are only supported st…

드리머즈 0 10780

안녕하세요. 드리머즈입니다.


안드로이드 스튜디오에서 Apache POI 라이브러리(4.1.0버전)를 추가하고 빌드를 했더니.. 에러가 발생했습니다.


0e64030ce8dad71a9fd28ff255a45d28_1557310745_161.png
에러가 4개 발생했습니다..


com.android.tools.r8.utils.AbortException: Error: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)


와 같은 에러가 발생했습니다.

minSdkVersion을 26으로 변경하니 정말로 문제가 사라졌습니다. 그런데 minSdkVersion을 26으로 올리는 건 시장이 줄어드는 것을 의미하기에 부담입니다.


 compileOptions {

        sourceCompatibility '1.8'

        targetCompatibility '1.8'

    }

그래들에서 문제를 해결하고자 추가했던 위의 코드를 주석 처리하니.. 에러가 살짝 바뀌네요.


Caused by: com.android.tools.r8.utils.AbortException: Error: Invoke-customs are only supported starting with Android O (--min-api 26)


위의 에러가 원래 뜨던 에러입니다.


구글링해도 딱히 해결책이 없어 POI 버전을 더 과거 버전으로 테스트 해보기로 했습니다.

4.0.0 버전으로 테스트하니 아래의 에러가 발생했습니다.


Error: Default interface methods are only supported starting with Android N (--min-api 24): boolean org.apache.poi.ss.usermodel.Table.contains(org.apache.poi.ss.usermodel.Cell)


이 문제에 대해 해결책을 찾아보니 역시나 그래들 파일에 아래의 코드를 추가하는 것이었습니다.


 compileOptions {

        sourceCompatibility '1.8'

        targetCompatibility '1.8'

    }


다시 추가하고 빌드를 해보니.. 어라? 정말 빌드가 됩니다..


일단 4.0.0 버전을 사용해야 겠습니다.

사실 이 버전 사용해도 문제는 없을 겁니다.


4.0.1버전도 잘 동작합니다.

다시 해봐도 POI 4.1.0 버전에서만 문제가 생기네요.


https://poi.apache.org/changes.html

4.1.0 체인지 로그를 보면


Summary

  • Improved support/fixes for Java 9+ and IBM JVM
  • New EMF renderer and support of SVG images in XSLF
  • Security, stability and memory/resource handling improvements
  • Various bug fixes across function and conditional format rule evaluation
  • Upgrade to XMLBeans 3.1.0
  • Upgrade to Bouncycastle 1.61
  • Upgrade to Curvesapi 1.06
  • Upgrade to Commons-Codec 1.12
  • Upgrade to Commons-Collections4 4.3
  • Upgrade to XMLSec 2.1.2



위의 수정이 안드로이드 스튜디오에 영향을 미치는 것 같습니다..


어쨋든 4.0.1버전을 사용하면 문제가 해결됩니다!



0 Comments
제목