
Call requries API level 26 (current min is 24): java.time.LocalDate#now
해당 API는 최소 안드로이드 API 26버전부터 사용할 수 있습니다.: java.time.LocalDate#now
오픈 소스를 사용 중, LocalDate 를 필연적으로 사용해야 하는 상황이 나왔는데, 위의 사진과 같이 오류가 발생했다.
지금 사용하려는 LocalDate 클래스가 속해있는 java.time API 자체가 Java 8 버전에서 추가된 것이고, 이 Java.time API를 Android 8.0 (API 26) 버전부터 지원을 시작했기 때문에 사용하지 못하는 것이다.
컴파일 과정에서 Desugaring을 수행하여 JDK 버전 호환 문제를 해결해야 한다. 안드로이드 공식 문서에도 친절하게 설명이 되어있어 해결에 어려움을 겪진 않았다.
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}
}
일단 LocalDate 클래스를 사용하는데 1.1.5 버전은 사용해야 불편함 없이 사용할 수 있는 것 같다. 물론 가장 최근에 릴리즈된 버전이 더 많은 Java 8 API를 제공하니, 아래에 첨부한 공식 깃허브에 방문해 버전 별로 어떤 것이 바뀌었는지 체크하고 상황에 맞게 사용하면 될 것 같다.
참고 및 출처
Android 호환성 유지에 대한 고찰 ~ 언어편 - (Pluu님 블로그)
자바 8 언어 기능 및 API 사용 - (공식 문서)
desugar_jdk_libs - (공식 깃허브)