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">Поддерживаемые API-интерфейсы и возможности языка Java 8</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 21Preview, объяснено как настроить проект для их использования, а также указаны известные 22проблемы, с которыми можно столкнуться. 23</p> 24 25<p>Для использования этих функций необходимо загрузить и установить Android 26Studio 2.1 (предварительная версия) и Android N Preview SDK, который включает набор инструментов 27Jack и обновленный подключаемый модуль Android для 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 не является обязательным требованием 34при разработке приложений для платформы Android N. Если вы не хотите 35писать код с использованием возможностей языка Java 8, можно указать 36Java 7 в качестве значения совместимости для проекта, однако все-равно 37необходимо будет выполнить компиляцию с JDK 8 для осуществления сборки на платформе Android N. 38</p> 39 40<h2 id="supported-features"> 41 Поддерживаемые API-интерфейсы и возможности языка Java 8 42</h2> 43 44<p> 45 В настоящее время Android поддерживает не все возможности языка Java 8. 46Однако при разработке приложений для 47Android N Preview доступны следующие функции. 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> 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</ul> 66 67 68<p> 69 Кроме того, доступны следующие API-интерфейсы для реализации возможностей языка Java 8. 70</p> 71 72<ul> 73 <li>API-интерфейсы отражения и языковых функций: 74 </li> 75 76 <li style="list-style: none; display: inline"> 77 <ul> 78 <li>{@code java.lang.FunctionalInterface}; 79 </li> 80 81 <li>{@code java.lang.annotation.Repeatable}; 82 </li> 83 84 <li>{@code java.lang.reflect.Method.isDefault()}; 85 </li> 86 87 <li>а также API-интерфейсы отражения, связанные с повторяющимися примечаниями, например, 88{@code AnnotatedElement.getAnnotationsByType(Class)}. 89 </li> 90 </ul> 91 </li> 92 <li>Вспомогательные API: 93 </li> 94 95 <li style="list-style: none; display: inline"> 96 <ul> 97 <li>{@code java.util.function}. 98 </li> 99 </ul> 100 </li> 101</ul> 102 103<p class="note"> 104 <strong>Примечание.</strong> В Android N реализация 105лямбда-выражений выполнена с помощью анонимных классов. Данный подход обеспечивает их 106обратную совместимость и возможность выполнения в предыдущих версиях Android. При тестировании 107лямбда-выражений в предыдущих версиях перейдите в файл {@code 108 build.gradle} и установите для параметров {@code compileSdkVersion} и {@code 109 targetSdkVersion} значения 23 или ниже. 110</p> 111 112<h2 id="configuration"> 113 Активация возможностей Java 8 и набора инструментов Jack 114</h2> 115 116<p> 117 Для использования новых возможностей языка Java 8 необходимо также использовать 118новый <a class="external-link" href="https://source.android.com/source/jack.html">набор инструментов Jack</a>. С его помощью 119Android компилирует языковой источник Java в считываемый Android байткод Dalvik Executable (dex). 120В Jack предусмотрен собственный формат библиотеки {@code .jack}, большинство функциональных возможностей набора 121инструментов предоставляется в рамках одного инструмента: перекомпоновка, сжатие, обфускация и 122использование нескольких файлов DEX. 123</p> 124 125<p>Ниже представлено сравнение двух наборов инструментов, используемых для сборки файлов DEX в Android.</p> 126<ul> 127 <li>Старый набор инструментов javac:<br> 128 <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code 129 .class} --> {@code .dex}) 130 </li> 131 132 <li>Новый набор инструментов Jack:<br> 133 <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex}) 134 </li> 135</ul> 136 137<h3> 138 Настройка Gradle 139</h3> 140 141<p> 142 Чтобы использовать возможности языка Java 8 и набор инструментов Jack для проекта, добавьте 143в файл модуля {@code build.gradle} следующий код: 144</p> 145 146<pre> 147android { 148 ... 149 defaultConfig { 150 ... 151 jackOptions { 152 enabled true 153 } 154 } 155 compileOptions { 156 sourceCompatibility JavaVersion.VERSION_1_8 157 targetCompatibility JavaVersion.VERSION_1_8 158 } 159} 160</pre> 161 162<h3> 163 Известные проблемы 164</h3> 165 166<p> 167 Функция Instant Run, появившаяся в Android Studio 2.0 (Beta), не работает 168с набором инструментов Jack и будет отключена при его использовании. 169</p> 170 171<p>Поскольку набор инструментов Jack не создает промежуточные файлы классов при компиляции 172приложения, инструменты, которые используют такие файлы, пока с Jack не работают. Примеры таких 173инструментов приведены ниже.</p> 174 175<ul> 176 <li>Детекторы Lint, работающие c файлами классов. 177 </li> 178 179 <li>Инструменты и библиотеки, которым требуются файлы классов приложения (например, JaCoCo 180и Mockito)</li> 181</ul> 182 183<p>Если вы обнаружите другие проблемы во время использования набора инструментов Jack, <a href="http://tools.android.com/filing-bugs">сообщите о них</a>.</p>