| 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">Поддерживаемые API-интерфейсы и возможности языка Java 8</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 для 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 в качестве значения совместимости для проекта, однако все-равно |
| необходимо будет выполнить компиляцию с JDK 8 для осуществления сборки на платформе Android N. |
| </p> |
| |
| <h2 id="supported-features"> |
| Поддерживаемые API-интерфейсы и возможности языка Java 8 |
| </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> |
| </li> |
| |
| <li> |
| <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Повторяющиеся |
| примечания</a> |
| </li> |
| </ul> |
| |
| |
| <p> |
| Кроме того, доступны следующие API-интерфейсы для реализации возможностей языка Java 8. |
| </p> |
| |
| <ul> |
| <li>API-интерфейсы отражения и языковых функций: |
| </li> |
| |
| <li style="list-style: none; display: inline"> |
| <ul> |
| <li>{@code java.lang.FunctionalInterface}; |
| </li> |
| |
| <li>{@code java.lang.annotation.Repeatable}; |
| </li> |
| |
| <li>{@code java.lang.reflect.Method.isDefault()}; |
| </li> |
| |
| <li>а также API-интерфейсы отражения, связанные с повторяющимися примечаниями, например, |
| {@code AnnotatedElement.getAnnotationsByType(Class)}. |
| </li> |
| </ul> |
| </li> |
| <li>Вспомогательные API: |
| </li> |
| |
| <li style="list-style: none; display: inline"> |
| <ul> |
| <li>{@code java.util.function}. |
| </li> |
| </ul> |
| </li> |
| </ul> |
| |
| <p class="note"> |
| <strong>Примечание.</strong> В Android N реализация |
| лямбда-выражений выполнена с помощью анонимных классов. Данный подход обеспечивает их |
| обратную совместимость и возможность выполнения в предыдущих версиях Android. При тестировании |
| лямбда-выражений в предыдущих версиях перейдите в файл {@code |
| build.gradle} и установите для параметров {@code compileSdkVersion} и {@code |
| targetSdkVersion} значения 23 или ниже. |
| </p> |
| |
| <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 компилирует языковой источник Java в считываемый Android байткод Dalvik Executable (dex). |
| В Jack предусмотрен собственный формат библиотеки {@code .jack}, большинство функциональных возможностей набора |
| инструментов предоставляется в рамках одного инструмента: перекомпоновка, сжатие, обфускация и |
| использование нескольких файлов DEX. |
| </p> |
| |
| <p>Ниже представлено сравнение двух наборов инструментов, используемых для сборки файлов DEX в Android.</p> |
| <ul> |
| <li>Старый набор инструментов javac:<br> |
| <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code |
| .class} --> {@code .dex}) |
| </li> |
| |
| <li>Новый набор инструментов Jack:<br> |
| <b>Jack</b> ({@code .java} --> {@code .jack} --> {@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> |
| Известные проблемы |
| </h3> |
| |
| <p> |
| Функция Instant Run, появившаяся в Android Studio 2.0 (Beta), не работает |
| с набором инструментов Jack и будет отключена при его использовании. |
| </p> |
| |
| <p>Поскольку набор инструментов Jack не создает промежуточные файлы классов при компиляции |
| приложения, инструменты, которые используют такие файлы, пока с Jack не работают. Примеры таких |
| инструментов приведены ниже.</p> |
| |
| <ul> |
| <li>Детекторы Lint, работающие c файлами классов. |
| </li> |
| |
| <li>Инструменты и библиотеки, которым требуются файлы классов приложения (например, JaCoCo |
| и Mockito)</li> |
| </ul> |
| |
| <p>Если вы обнаружите другие проблемы во время использования набора инструментов Jack, <a href="http://tools.android.com/filing-bugs">сообщите о них</a>.</p> |