본문

170418(화) - Java 8 언어 기능 사용

Java 8 언어 기능 사용


Jack

Android에서 Java 8을 사용하려면 Jack compiler가 필요하다.


- Jack toolchain is deprecated



Supported Java 8

Android N버전 이상의 앱일 경우 아래와 같은 기능 사용가능


기능

- Default and static interface methods

- Lambda expressions (API level 23 이하도 사용가능)

- 반복 가능한 annotations

- Method References (API level 23 이하도 사용가능)

- Type annotation (API level 23 이하도 사용가능)

ㆍ런타임시 사용 불가하고, 컴파일시에만 사용가능



API

Reflection API & Language API

- java.lang.FunctionalInterface

- java.lang.annotation.Repeatable

- java.reflect.Method.isDefault()

- Repeatable annotation 과 관련된 Reflection API

ex : AnnotatedElement.getAnnotationsByType(Class)


Utility API

- java.util.function

- java.util.stream



Java 8 & Jack toolchain

Java 8 기능을 사용하려면 Jack toolchain 이 필요


- Jack toolchain

ㆍAndroid에서 읽을 수 있는 Dex 바이트 코드

ㆍJava 언어 소스를 컴파일

ㆍ자체 .jack 라이브러리 형식 존재

ㆍ단일도구로는 가장 많은 툴체인 기능 (리패키징, 축소, 난독화, 멀티덱스)


- 기존 툴체인과의 비교

ㆍLegacy javac toolchain

javac (.java ▶ .class) → dx (.class ▶ .dex)


ㆍ New Jack toolchain

Jack (.java ▶ .jack ▶ .dex)



- gradle 추가


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


Issue

- Instant Run 은 현재 Jack과 호환되지 않는다.

- Jack은 컴파일시 중간 클래스를 만들지 않으므로 이 파일에 의존하는 도구는 Jack과 호환 불가능

ㆍLint 탐지기

ㆍJaCoCo를 사용한 기기 테스트 등

공유

댓글