1page.title=Java 8 언어 기능
2page.keywords="android N", "Java 8", "Jack"
3@jd:body
4
5<div id="qv-wrapper">
6  <div id="qv">
7    <ol>
8      <li>
9        <a href="#supported-features">지원되는 Java 8 언어 기능 및 API</a>
10      </li>
11      <li>
12        <a href="#configuration">Java 8 기능 및 Jack 툴체인 활성화</a>
13      </li>
14    </ol>
15  </div>
16</div>
17
18<p>Android N은 Java 8 언어 기능을 지원합니다.
19이 기능은 Android N을 대상으로 하는 앱을 개발할 때 사용될 수 있습니다.
20이 페이지에서는 Android N Preview에서 지원되는 새로운 언어 기능,
21프로젝트를 적절히 설정하여 언어 기능을 사용하는 방법 그리고
22발생할 수도 있는 알려진 문제에 대해 설명합니다.
23</p>
24
25<p>이 기능을 사용하려면 Android
26Studio 2.1 및 Android N Preview SDK를 다운로드하고 설치해야 합니다. 여기에는 필수
27Jack 툴체인과 업데이트된 Android Plugin for Gradle이 포함되어 있습니다. 아직
28Android N Preview SDK를 설치하지 않았다면 <a href="{@docRoot}preview/setup-sdk.html">Android N용 개발 설정</a>을 참조하세요.</p>
29
30
31
32<p class="note">
33  <strong>참고:</strong> 새로운 Java 8 언어 기능을 사용하는 것은
34Android N 플랫폼을 대상으로 하는 앱 개발에 반드시 필요한 것은 아닙니다. Java 8
35언어 기능으로 코드를 작성하고 싶지 않다면, 프로젝트의 원본 및 대상
36호환성 값을 Java 7로 설정할 수 있지만 Android N 플랫폼용으로 빌드하려면
37JDK 8로 컴파일해야 합니다.
38</p>
39
40<h2 id="supported-features">
41  지원되는 Java 8 언어 기능 및 API
42</h2>
43
44<p>
45  Android는 현재 모든 Java 8 언어 기능을 지원하는 것은 아닙니다. 그러나
46Android N Preview를 대상으로 하는
47앱을 개발할 때 이제 다음 기능을 이용할 수 있습니다.
48</p>
49
50<ul>
51  <li>
52    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">기본
53및 정적 인터페이스 메서드</a>
54  </li>
55
56  <li>
57    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">람다
58식</a>(API 레벨 23 이하에서도 사용 가능)
59  </li>
60
61  <li>
62    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">반복 가능한
63주석</a>
64  </li>
65
66  <li>
67    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html">메서드
68참조</a>(API 레벨 23 이하에서도 사용 가능)
69  </li>
70</ul>
71
72<p class="note">
73  <strong>참고:</strong> 이전 버전의 Android에서 람다 식 및 메서드 참조를 테스트하려면
74{@code build.gradle}
75파일로 이동하고 {@code compileSdkVersion} 및 {@code targetSdkVersion}을 23
76이하로 설정하세요. 이러한 Java 8 기능을 사용하려면 <a href="#configuration">Jack
77툴체인을 활성화</a>해야 합니다.
78</p>
79
80<p>
81  또한, 현재 다음과 같은 Java 8 언어 기능 API를 사용할 수 있습니다.
82</p>
83
84<ul>
85  <li>Reflection API 및 언어 관련 API:
86    <ul>
87      <li>
88        <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html">
89        {@code java.lang.FunctionalInterface}</a>
90      </li>
91
92      <li>
93        <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html">
94        {@code java.lang.annotation.Repeatable}</a>
95      </li>
96
97      <li>
98        <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#isDefault--">
99        {@code java.lang.reflect.Method.isDefault()}</a>
100      </li>
101
102      <li>반복 가능한 주석과 관련된 Reflection API
103      예: <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getAnnotationsByType-java.lang.Class-">
104{@code AnnotatedElement.getAnnotationsByType(Class)}</a>
105      </li>
106    </ul>
107  </li>
108
109  <li>Utility API:
110    <ul>
111      <li>
112        <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">
113        {@code java.util.function}</a>
114      </li>
115
116      <li>
117        <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html">
118        {@code java.util.stream}</a>
119      </li>
120    </ul>
121  </li>
122</ul>
123
124<h2 id="configuration">
125  Java 8 기능 및 Jack 툴체인 활성화
126</h2>
127
128<p>
129  새로운 Java 8 언어 기능을 사용하려면
130또한 새로운 <a class="external-link" href="https://source.android.com/source/jack.html">Jack 툴체인</a>을 사용해야 합니다. 이 새로운
131Android 툴체인은 Android에서 읽을 수 있는 Dex
132바이트코드로 Java 언어 소스를 컴파일하고, 자체 {@code .jack} 라이브러리 형식이 있으며, 단일 도구로는 가장 많은 툴체인
133기능을
134제공합니다(리패키징, 축소, 난독화, 멀티덱스).
135</p>
136
137<p>다음은 Android DEX 파일을 빌드하는 데 사용되는 두 개의 툴체인을 비교한 것입니다.</p>
138<ul>
139  <li>레거시 javac 툴체인:<br>
140  <b>javac</b> ({@code .java} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
141  .class} --&gt; {@code .dex})
142  </li>
143
144  <li>새로운 Jack 툴체인:<br>
145  <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@code .dex})
146  </li>
147</ul>
148
149<h3>
150  Gradle 구성
151</h3>
152
153<p>
154  프로젝트에서 Java 8 언어 기능과 Jack을 활성화하려면
155모듈 수준의{@code build.gradle} 파일에 다음을 입력합니다.
156</p>
157
158<pre>
159android {
160  ...
161  defaultConfig {
162    ...
163    jackOptions {
164      enabled true
165    }
166  }
167  compileOptions {
168    sourceCompatibility JavaVersion.VERSION_1_8
169    targetCompatibility JavaVersion.VERSION_1_8
170  }
171}
172</pre>
173
174<h3 id="known-issues">
175  알려진 문제
176</h3>
177
178<p>
179  <a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant
180Run</a>은 현재 Jack과 호환되지 않으며 새로운 툴체인을 사용하는 동안
181비활성화됩니다.
182</p>
183
184<p>Jack이 앱을 컴파일할 때 중간 클래스 파일을 생성하지 않으므로,
185이들 파일에 의존하는 도구는 현재 Jack과 호환되지 않습니다. 이러한 도구의 예는
186다음과 같습니다.</p>
187
188<ul>
189  <li>클래스 파일에서 작동하는 Lint 탐지기
190  </li>
191
192  <li>앱의 클래스 파일을 필요로 하는 도구 및 라이브러리(예:
193JaCoCo를 사용한 기기 테스트)
194  </li>
195</ul>
196
197<p>Jack을 사용하는 동안 다른 문제를 발견하면 <a href="http://tools.android.com/filing-bugs">버그를 보고해주세요</a>.</p>