MethodHandle.invoke and MethodHandle.invokeExact are only supported st…
안녕하세요. 드리머즈입니다.
안드로이드 스튜디오에서 Apache POI 라이브러리(4.1.0버전)를 추가하고 빌드를 했더니.. 에러가 발생했습니다.
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버전을 사용하면 문제가 해결됩니다!