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 - (공식 깃허브)