blob: 85570a9822b38ca0a2f696ac5b803c2fa9383c75 [file] [log] [blame]
page.title=Java 8 언어 기능
page.keywords="android N", "Java 8", "Jack"
@jd:body
<div id="qv-wrapper">
<div id="qv">
<ol>
<li>
<a href="#supported-features">지원되는 Java 8 언어 기능 API</a>
</li>
<li>
<a href="#configuration">Java 8 기능 Jack 툴체인 활성화</a>
</li>
</ol>
</div>
</div>
<p>Android N Java 8 언어 기능을 지원합니다.
기능은 Android N 대상으로 하는 앱을 개발할 사용될 있습니다.
페이지에서는 Android N Preview에서 지원되는 새로운 언어 기능,
프로젝트를 적절히 설정하여 언어 기능을 사용하는 방법 그리고
발생할 수도 있는 알려진 문제에 대해 설명합니다.
</p>
<p> 기능을 사용하려면 Android
Studio 2.1 Android N Preview SDK 다운로드하고 설치해야 합니다. 여기에는 필수
Jack 툴체인과 업데이트된 Android Plugin for Gradle 포함되어 있습니다. 아직
Android N Preview SDK 설치하지 않았다면 <a href="{@docRoot}preview/setup-sdk.html">Android N 개발 설정</a>을 참조하세요.</p>
<p class="note">
<strong>참고:</strong> 새로운 Java 8 언어 기능을 사용하는 것은
Android N 플랫폼을 대상으로 하는 개발에 반드시 필요한 것은 아닙니다. Java 8
언어 기능으로 코드를 작성하고 싶지 않다면, 프로젝트의 원본 대상
호환성 값을 Java 7 설정할 있지만 Android N 플랫폼용으로 빌드하려면
JDK 8 컴파일해야 합니다.
</p>
<h2 id="supported-features">
지원되는 Java 8 언어 기능 API
</h2>
<p>
Android 현재 모든 Java 8 언어 기능을 지원하는 것은 아닙니다. 그러나
Android N Preview 대상으로 하는
앱을 개발할 이제 다음 기능을 이용할 있습니다.
</p>
<ul>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">기본
정적 인터페이스 메서드</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">람다
식</a>(API 레벨 23 이하에서도 사용 가능)
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">반복 가능한
주석</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html">메서드
참조</a>(API 레벨 23 이하에서도 사용 가능)
</li>
</ul>
<p class="note">
<strong>참고:</strong> 이전 버전의 Android에서 람다 메서드 참조를 테스트하려면
{@code build.gradle}
파일로 이동하고 {@code compileSdkVersion} {@code targetSdkVersion}을 23
이하로 설정하세요. 이러한 Java 8 기능을 사용하려면 <a href="#configuration">Jack
툴체인을 활성화</a>해야 합니다.
</p>
<p>
또한, 현재 다음과 같은 Java 8 언어 기능 API 사용할 있습니다.
</p>
<ul>
<li>Reflection API 언어 관련 API:
<ul>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html">
{@code java.lang.FunctionalInterface}</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html">
{@code java.lang.annotation.Repeatable}</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#isDefault--">
{@code java.lang.reflect.Method.isDefault()}</a>
</li>
<li>반복 가능한 주석과 관련된 Reflection API
예: <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getAnnotationsByType-java.lang.Class-">
{@code AnnotatedElement.getAnnotationsByType(Class)}</a>
</li>
</ul>
</li>
<li>Utility API:
<ul>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">
{@code java.util.function}</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html">
{@code java.util.stream}</a>
</li>
</ul>
</li>
</ul>
<h2 id="configuration">
Java 8 기능 Jack 툴체인 활성화
</h2>
<p>
새로운 Java 8 언어 기능을 사용하려면
또한 새로운 <a class="external-link" href="https://source.android.com/source/jack.html">Jack 툴체인</a>을 사용해야 합니다. 새로운
Android 툴체인은 Android에서 읽을 있는 Dex
바이트코드로 Java 언어 소스를 컴파일하고, 자체 {@code .jack} 라이브러리 형식이 있으며, 단일 도구로는 가장 많은 툴체인
기능을
제공합니다(리패키징, 축소, 난독화, 멀티덱스).
</p>
<p>다음은 Android DEX 파일을 빌드하는 사용되는 개의 툴체인을 비교한 것입니다.</p>
<ul>
<li>레거시 javac 툴체인:<br>
<b>javac</b> ({@code .java} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
.class} --&gt; {@code .dex})
</li>
<li>새로운 Jack 툴체인:<br>
<b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@code .dex})
</li>
</ul>
<h3>
Gradle 구성
</h3>
<p>
프로젝트에서 Java 8 언어 기능과 Jack 활성화하려면
모듈 수준의{@code build.gradle} 파일에 다음을 입력합니다.
</p>
<pre>
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
</pre>
<h3 id="known-issues">
알려진 문제
</h3>
<p>
<a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant
Run</a>은 현재 Jack 호환되지 않으며 새로운 툴체인을 사용하는 동안
비활성화됩니다.
</p>
<p>Jack 앱을 컴파일할 중간 클래스 파일을 생성하지 않으므로,
이들 파일에 의존하는 도구는 현재 Jack 호환되지 않습니다. 이러한 도구의 예는
다음과 같습니다.</p>
<ul>
<li>클래스 파일에서 작동하는 Lint 탐지기
</li>
<li>앱의 클래스 파일을 필요로 하는 도구 라이브러리(예:
JaCoCo 사용한 기기 테스트)
</li>
</ul>
<p>Jack 사용하는 동안 다른 문제를 발견하면 <a href="http://tools.android.com/filing-bugs">버그를 보고해주세요</a>.</p>