page.title=Recursos de linguagem do Java 8 page.keywords="android N", "Java 8", "Jack" @jd:body <div id="qv-wrapper"> <div id="qv"> <ol> <li> <a href="#supported-features">Recursos de linguagem e APIs do Java 8 com suporte</a> </li> <li> <a href="#configuration">Como ativar os recursos do Java 8 e a cadeia de ferramentas Jack</a> </li> </ol> </div> </div> <p>O Android N introduz o suporte aos recursos de linguagem do Java 8 que podem ser usados ao desenvolver aplicativos direcionados ao Android N. Esta página descreve os novos recursos de linguagem com suporte no Android N Preview, como configurar seu projeto para usá-los e os problemas conhecidos que você poderá encontrar. </p> <p>Para começar a usar esses recursos, primeiro faça o download e instale o Android Studio 2.1 e o Android N Preview SDK, que inclui a cadeia de ferramentas Jack obrigatória e o Android Plugin for Gradle atualizado. Se você ainda não instalou o Android N Preview SDK, consulte <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o Android N</a>.</p> <p class="note"> <strong>Observação:</strong> O uso dos novos recursos de linguagem do Java 8 não é obrigatório para desenvolver aplicativos direcionados à plataforma Android N. Se não quiser escrever código com os recursos de linguagem do Java 8, você poderá manter os valores de compatibilidade de origem e destino do seu projeto definidos para o Java 7, mas ainda será necessário compilar com o JDK 8 para desenvolver para a plataforma Android N. </p> <h2 id="supported-features"> Recursos de linguagem e APIs do Java 8 com suporte </h2> <p> Atualmente, o Android não oferece suporte a todos os recursos de linguagem do Java 8. No entanto, os recursos a seguir agora estão disponíveis para o desenvolvimento de aplicativos direcionados ao Android N Preview: </p> <ul> <li> <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">Métodos de interface padrão e estáticos</a> </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html"> Expressões Lambda</a> (também disponíveis em nível da API 23 ou anterior) </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Anotações repetíveis</a> </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html"> Referências de método</a> (também disponíveis em nível da API 23 ou anterior) </li> </ul> <p class="note"> <strong>Observação:</strong> Para testar expressões Lambda ou referências de método em versões mais antigas do Android, acesse o arquivo {@code build.gradle} e configure {@code compileSdkVersion} e {@code targetSdkVersion} como 23 ou anterior. Você precisará <a href="#configuration">permitir que a cadeia de ferramentas Jack</a> use esses recursos do Java 8. </p> <p> Além disso, as seguintes APIs de recursos de linguagem do Java 8 agora estão disponíveis: </p> <ul> <li>APIs relacionadas a reflexo e linguagem: <ul> <li> <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html"> {@code java.lang.FunctionalInterface}</a> </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html"> {@code java.lang.annotation.Repeatable}</a> </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#isDefault--"> {@code java.lang.reflect.Method.isDefault()}</a> </li> <li>e Reflection APIs associadas a anotações repetíveis, como <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getAnnotationsByType-java.lang.Class-"> {@code AnnotatedElement.getAnnotationsByType(Class)}</a> </li> </ul> </li> <li>Utility APIs: <ul> <li> <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html"> {@code java.util.function}</a> </li> <li> <a class="external-link" href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html"> {@code java.util.stream}</a> </li> </ul> </li> </ul> <h2 id="configuration"> Como ativar os recursos do Java 8 e a cadeia de ferramentas Jack </h2> <p> Para usar os novos recursos de linguagem do Java 8, você também deve usar a nova <a class="external-link" href="https://source.android.com/source/jack.html">cadeia de ferramentas Jack</a>. Essa nova 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, tem o próprio formato de biblioteca {@code .jack} e fornece a maioria dos recursos de uma cadeia de ferramentas em uma só ferramenta: reempacotamento, redução, ofuscação e multidex. </p> <p>Veja uma comparação entre duas cadeias de ferramentas usadas para compilar arquivos Android DEX:</p> <ul> <li>Cadeia de ferramentas legada javac:<br> <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code .class} --> {@code .dex}) </li> <li>Nova cadeia de ferramentas Jack:<br> <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex}) </li> </ul> <h3> Configuração do Gradle </h3> <p> Para ativar os recursos de linguagem do Java 8 e o Jack para seu projeto, insira o seguinte no arquivo {@code build.gradle} de nível do módulo: </p> <pre> android { ... defaultConfig { ... jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } </pre> <h3 id="known-issues"> Problemas conhecidos </h3> <p> <a href="{@docRoot}tools/building/building-studio.html#instant-run">O Instant Run</a> não funciona com o Jack e será desativado enquanto a nova cadeia de ferramentas estiver em uso. </p> <p>Como o Jack não gera arquivos de classe intermediária ao compilar um aplicativo, ferramentas que dependem desses arquivos não funcionam com o Jack. Alguns exemplos dessas ferramentas são:</p> <ul> <li>Detectores de códigos suspeitos que operam em arquivos de classe </li> <li>Ferramentas e bibliotecas que exigem os arquivos de classe do aplicativo (como testes de instrumentação com JaCoCo) </li> </ul> <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>