본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Java8 을 사용해보자!

by 돼지왕 왕돼지 2018. 10. 2.
반응형

[android] Java8 을 사용해보자!


https://developer.android.com/studio/preview/features/java8-support.html

Android, android studio, build.gradle, bytecode transformation, classname::new, compileoptions, default and static interface methods, desugar, dexguard, function, functionalinterface, getannotationsbytype, isdefault, JACK, jack compiler, java7, java8, java8 gradle, java8 minsdk, javaversion, Lambda expression, lambda serialization, method reference, minSdkVersion, repeatable, repeating annotations, retrolambda, sourcecompatibility, Stream, type annotation, type annotations, version_1_8, [android] Java8 을 사용해보자!, 선언부, 정의부


Android 에서 Java8 사용하기


-

Android Studio 2.4 Preview 4 이상부터 모든 Java7 과 Java8 언어 특성을 지원한다.



-

Java7 을 사용하더라도 JDK8 을 이용해서 컴파일하므로 JDK8 은 필요하다.



-

이전에는 Jack Compiler 를 사용해야 Java8 Compile 이 가능했는데,

이제는 desugar 라는 bytecode transformation 만 있으면 된다.

Jack 이 더 이상 필요하지 않다.

Android, android studio, build.gradle, bytecode transformation, classname::new, compileoptions, default and static interface methods, desugar, dexguard, function, functionalinterface, getannotationsbytype, isdefault, JACK, jack compiler, java7, java8, java8 gradle, java8 minsdk, javaversion, Lambda expression, lambda serialization, method reference, minSdkVersion, repeatable, repeating annotations, retrolambda, sourcecompatibility, Stream, type annotation, type annotations, version_1_8, [android] Java8 을 사용해보자!, 선언부, 정의부


Jack 을 사용하고 있었다면 build.gradle 에서 그 녀석부터 없애라!



-

Java8 을 쓰기 위해서는 Android plugin 을 2.4.0-alpha4 이상으로 update 해야 한다.



-

build.gradle 에 다음을 설정하라.

android {

  ...

  compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

  }

}



-

만약 Jack, Retrolambda, DexGuard 등을 사용하고 있었다면, desugar 대신 설정된 tool 을 사용해서 compile 한다.



-

Android Studio 가 모든 Java8 언어 특성을 지원하는 것은 아니다.

minSdkVersion 에 따라 dependency 도 있다.



-

다음의 것들은 minSdk 상관 없이 쓸 수 있는 기능


Lambda expression ( lambda serialization 일부 제약이 있음 )

Method Reference ( ClassName::new 의 형태 )

Type Annotations ( 몇 가지 제약은 있음 )

Repeating annotations



-

다음의 것들은 minSdk 24 이상


Default and static interface methods


java.lang.annotation.Repeatable

AnnotatedElement.getAnnotationsByType(Class)

java.util.stream

java.lang.FunctionalInterface

java.lang.reflect.Method.isDefault()

java.util.function





참고 : Type Annotations


https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html

https://docs.oracle.com/javase/tutorial/java/annotations/basics.html


더 강력한 type checking 을 위해 Java8 부터 생겼다.

이전에는 정의부(선언부)에만 사용할 수 있었다.

new @Interned MyObject()

myString = (@NonNull String) str;

class UnmodifiableList<T> implements @Readonly List<@Readonly T>{ … }

void monitorTemperature() throws @Critical TemperatureException{ … }




반응형

댓글