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} --> {@code .class}) --> <b>dx</b> ({@code 141 .class} --> {@code .dex}) 142 </li> 143 144 <li>Nova cadeia de ferramentas Jack:<br> 145 <b>Jack</b> ({@code .java} --> {@code .jack} --> {@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>