• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
129  .class} --&gt; {@code .dex})
130  </li>
131
132  <li>Новый набор инструментов Jack:<br>
133  <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@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>