Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Java 8 언어 기능 사용

Android는 Java 7 언어 기능 일체를 모두 지원하고, Java 8 언어 기능의 경우 버전에 따라 각각 다르게 부분적으로 지원합니다. 이 페이지에서는 사용할 수 있는 새로운 언어 기능, 이러한 기능을 사용할 프로젝트를 올바르게 구성하는 방법 및 발생할 수 있는 알려진 문제에 대해 설명합니다.

참고: Android용 앱을 개발할 때에는 Java 8 언어 기능을 사용하는 것이 가장 좋습니다. 프로젝트의 소스 및 대상 호환성 값을 Java 7로 유지할 수는 있지만, JDK 8을 사용하여 컴파일해야 합니다.

Java 8 언어 기능에 대한 지원 기능을 사용하려면 Jack이라는 새 컴파일러가 필요합니다. Jack은 Android Studio 2.1 이상 버전에서만 지원됩니다. 따라서 Java 8 언어 기능을 사용하려면 Android Studio 2.1을 사용하여 앱을 빌드해야 합니다.

Android Studio가 이미 설치된 경우 Help > Check for Update(Mac의 경우, Android Studio > Check for Updates)를 클릭하여 최신 버전으로 업데이트해야 합니다. 워크스테이션에 IDE가 아직 설치되어 있지 않은 경우, 여기서 Android Studio를 다운로드하세요.

지원되는 Java 8 언어 기능 및 API

Android는 일부 Java 8 언어 기능을 지원하지 않습니다. 하지만, Android 7.0(API 레벨 24)을 대상으로 하는 앱을 개발하는 경우 다음과 같은 기능을 사용할 수 있습니다.

참고: 형식 주석 정보는 런타임에는 사용할 수 없으며 컴파일 시에만 사용할 수 있습니다.

이전 버전의 Android에서 람다 식, 메서드 참조 및 형식 주석을 테스트하려면 build.gradle 파일로 이동하고 compileSdkVersiontargetSdkVersion을 23 이하로 설정하세요. 이러한 Java 8 기능을 사용하려면 Jack 툴체인도 활성화해야 합니다.

또한, 다음 Java 8 언어 API도 사용할 수 있습니다.

Java 8 기능 및 Jack 툴체인 활성화

새로운 Java 8 언어 기능을 사용하려면 Jack 툴체인도 사용해야 합니다. 이 새로운 Android 툴체인은 Android에서 읽을 수 있는 Dex 바이트코드로 Java 언어 소스를 컴파일하고, 자체 .jack 라이브러리 형식이 있으며, 단일 도구로는 가장 많은 툴체인 기능(리패키징, 축소, 난독화, 멀티덱스)을 제공합니다.

다음은 Android DEX 파일을 빌드하는 데 사용되는 두 개의 툴체인을 비교한 것입니다.

  • 레거시 javac 툴체인:
    javac(.java.class) → dx (.class.dex)
  • 새로운 Jack 툴체인:
    Jack(.java.jack.dex)

Gradle 구성

프로젝트에서 Java 8 언어 기능과 Jack을 활성화하려면 모듈 수준의 build.gradle 파일에 다음을 입력합니다.

android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

알려진 문제

Instant Run은 현재 Jack과 호환되지 않으며 새로운 툴체인을 사용하는 동안 비활성화됩니다.

Jack이 앱을 컴파일할 때 중간 클래스 파일을 생성하지 않으므로, 이들 파일에 의존하는 도구는 현재 Jack과 호환되지 않습니다. 이러한 도구의 예는 다음과 같습니다.

  • 클래스 파일에서 작동하는 Lint 탐지기
  • 앱의 클래스 파일을 필요로 하는 도구 및 라이브러리(예: JaCoCo를 사용한 기기 테스트)

Jack을 사용하는 동안 다른 문제를 발견하면 버그를 보고해주세요.