| 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> |