본문
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를 사용한 기기 테스트 등
'Mobile > Android API' 카테고리의 다른 글
170425(화) - Android 7.0 <Notification Enhancements> (0) | 2017.04.25 |
---|---|
170424(월) - Android 7.0 <Multi-window> (0) | 2017.04.24 |
170411(화) - System permission (0) | 2017.04.11 |
170411(화) - Device Compatibility (0) | 2017.04.11 |
170328(화) - App 기본 항목 (0) | 2017.03.28 |
댓글