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} --> {@code .class}) --> <b>dx</b> ({@code 141 .class} --> {@code .dex}) 142 </li> 143 144 <li>새로운 Jack 툴체인:<br> 145 <b>Jack</b> ({@code .java} --> {@code .jack} --> {@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>