183 lines
8.2 KiB
Plaintext
183 lines
8.2 KiB
Plaintext
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> |