• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Recursos de linguagem do 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">Recursos de linguagem e APIs do Java 8 com suporte</a>
10      </li>
11      <li>
12        <a href="#configuration">Como ativar os recursos do Java 8 e a cadeia de ferramentas Jack</a>
13      </li>
14    </ol>
15  </div>
16</div>
17
18<p>O Android N introduz o suporte aos recursos de linguagem do Java 8
19 que podem ser usados ao desenvolver aplicativos direcionados ao Android N.
20 Esta página descreve os novos recursos de linguagem com suporte no Android N
21 Preview, como configurar seu projeto para usá-los e os
22 problemas conhecidos que você poderá encontrar.
23</p>
24
25<p>Para começar a usar esses recursos, primeiro faça o download e instale o Android
26Studio 2.1 e o Android N Preview SDK, que inclui a
27cadeia de ferramentas Jack obrigatória e o Android Plugin for Gradle atualizado. Se você ainda não
28instalou o Android N Preview SDK, consulte <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o Android N</a>.</p>
29
30
31
32<p class="note">
33  <strong>Observação:</strong> O uso dos novos recursos de linguagem do Java 8 não é
34 obrigatório para desenvolver aplicativos direcionados à plataforma Android N. Se
35 não quiser escrever código com os recursos de linguagem do Java 8, você poderá manter
36 os valores de compatibilidade de origem e destino do seu projeto definidos para o Java 7, mas ainda
37 será necessário compilar com o JDK 8 para desenvolver para a plataforma Android N.
38</p>
39
40<h2 id="supported-features">
41  Recursos de linguagem e APIs do Java 8 com suporte
42</h2>
43
44<p>
45  Atualmente, o Android não oferece suporte a todos os recursos de linguagem do Java 8. No entanto, os
46 recursos a seguir agora estão disponíveis para o desenvolvimento de aplicativos direcionados ao
47 Android 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">Métodos
53 de interface padrão e estáticos</a>
54  </li>
55
56  <li>
57    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">
58 Expressões Lambda</a> (também disponíveis em nível da API 23 ou anterior)
59  </li>
60
61  <li>
62    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Anotações
63 repetíveis</a>
64  </li>
65
66  <li>
67    <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html">
68 Referências de método</a> (também disponíveis em nível da API 23 ou anterior)
69  </li>
70</ul>
71
72<p class="note">
73  <strong>Observação:</strong> Para testar expressões Lambda ou referências de método em
74 versões mais antigas do Android, acesse o arquivo {@code build.gradle}
75 e configure {@code compileSdkVersion} e {@code targetSdkVersion} como 23 ou
76anterior. Você precisará <a href="#configuration">permitir que a
77 cadeia de ferramentas Jack</a> use esses recursos do Java 8.
78</p>
79
80<p>
81  Além disso, as seguintes APIs de recursos de linguagem do Java 8 agora estão disponíveis:
82</p>
83
84<ul>
85  <li>APIs relacionadas a reflexo e linguagem:
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>e Reflection APIs associadas a anotações repetíveis, como
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 APIs:
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  Como ativar os recursos do Java 8 e a cadeia de ferramentas Jack
126</h2>
127
128<p>
129  Para usar os novos recursos de linguagem do Java 8, você também deve usar a
130 nova <a class="external-link" href="https://source.android.com/source/jack.html">cadeia de ferramentas Jack</a>. Essa nova
131 cadeia de ferramentas Android compila o código-fonte de linguagem Java em um código de bytes dex que pode ser lido no Android,
132 tem o próprio formato de biblioteca {@code .jack} e fornece a maioria dos recursos
133 de uma cadeia de ferramentas em uma só ferramenta: reempacotamento, redução, ofuscação e
134 multidex.
135</p>
136
137<p>Veja uma comparação entre duas cadeias de ferramentas usadas para compilar arquivos Android DEX:</p>
138<ul>
139  <li>Cadeia de ferramentas legada javac:<br>
140  <b>javac</b> ({@code .java} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
141  .class} --&gt; {@code .dex})
142  </li>
143
144  <li>Nova cadeia de ferramentas Jack:<br>
145  <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@code .dex})
146  </li>
147</ul>
148
149<h3>
150  Configuração do Gradle
151</h3>
152
153<p>
154  Para ativar os recursos de linguagem do Java 8 e o Jack para seu projeto, insira
155 o seguinte no arquivo {@code build.gradle} de nível do módulo:
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  Problemas conhecidos
176</h3>
177
178<p>
179  <a href="{@docRoot}tools/building/building-studio.html#instant-run">O Instant
180 Run</a> não funciona com o Jack e será desativado enquanto
181 a nova cadeia de ferramentas estiver em uso.
182</p>
183
184<p>Como o Jack não gera arquivos de classe intermediária ao compilar um
185aplicativo, ferramentas que dependem desses arquivos não funcionam com o Jack. Alguns
186exemplos dessas ferramentas são:</p>
187
188<ul>
189  <li>Detectores de códigos suspeitos que operam em arquivos de classe
190  </li>
191
192  <li>Ferramentas e bibliotecas que exigem os arquivos de classe do aplicativo (como
193 testes de instrumentação com JaCoCo)
194  </li>
195</ul>
196
197<p>Se encontrar outros problemas ao usar o Jack, <a href="http://tools.android.com/filing-bugs">envie um relatório de erros</a>.</p>