LocalDate 와 minSdk26| 삽질 노트

hoya·2022년 8월 11일
0

삽질 노트

목록 보기
7/8
post-thumbnail

😡 문제 상황

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

profile
즐겁게 하자 🤭

0개의 댓글