| page.title=Funciones del lenguaje Java 8 |
| page.keywords="android N", "Java 8", "Jack" |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <ol> |
| <li> |
| <a href="#supported-features">Funciones y API admitidas del lenguaje Java 8</a> |
| </li> |
| <li> |
| <a href="#configuration">Habilitar funciones de Java 8 y del conjunto de herramientas Jack</a> |
| </li> |
| </ol> |
| </div> |
| </div> |
| |
| <p>En Android N se ofrece compatibilidad con funciones |
| del idioma Java 8 que puedes usar al desarrollar aplicaciones orientadas a Android N. |
| En esta página se describen las funciones de idioma compatibles con la Android N |
| Preview, también la manera adecuada de configurar tu proyecto para usarlas y muchos problemas |
| conocidos que puedes experimentar. |
| </p> |
| |
| <p>Para comenzar a usar estas funciones, debes descargar y configurar Android |
| Studio 2.1 y el Android N Preview SDK, en el que se incluyen el conjunto de herramientas |
| Jack y el complemento de Android para Gradle. Si aún no |
| instalaste el Android N Preview SDK, consulta <a href="{@docRoot}preview/setup-sdk.html">Configuración para desarrollar con Android N</a>.</p> |
| |
| |
| |
| <p class="note"> |
| <strong>Nota:</strong> No es obligatorio usar las nuevas funciones del lenguaje Java 8 |
| para desarrollar aplicaciones orientadas a la plataforma de Android N. Si |
| no deseas escribir código con funciones del lenguaje Java 8, puedes mantener los |
| valores de compatibilidad de origen y destino de tu proyecto en Java 7, pero debes |
| usar JDK 8 para crear la compilación en función de la plataforma de Android N. |
| </p> |
| |
| <h2 id="supported-features"> |
| Funciones y API admitidas del lenguaje Java 8 |
| </h2> |
| |
| <p> |
| Actualmente, Android no admite todas las funciones del lenguaje Java 8. Sin embargo, las |
| siguientes características ahora se encuentran disponibles para el desarrollo de aplicaciones orientadas a la |
| Android N Preview: |
| </p> |
| |
| <ul> |
| <li> |
| <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">métodos de interfaz |
| predeterminados y estáticos;</a> |
| </li> |
| |
| <li> |
| <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html"> |
| expresiones Lambda</a> (también disponible en API nivel 23 e inferiores); |
| </li> |
| |
| <li> |
| <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">anotaciones |
| reiterables;</a> |
| </li> |
| |
| <li> |
| <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html"> |
| referencias de métodos</a> (también disponible en API nivel 23 e inferiores). |
| </li> |
| </ul> |
| |
| <p class="note"> |
| <strong>Nota:</strong> Para probar expresiones Lambda y métodos de referencia en |
| versiones anteriores de Android, accede al archivo {@code build.gradle} |
| y fija {@code compileSdkVersion} y {@code targetSdkVersion} en 23 o |
| un valor inferior. Tendrás que <a href="#configuration">habilitar la cadena de herramientas |
| Jack</a> para usar estas funciones de Java 8. |
| </p> |
| |
| <p> |
| A su vez, las siguientes API de funciones del lenguaje Java 8 ahora se encuentran disponibles: |
| </p> |
| |
| <ul> |
| <li>Las API Reflection y las relacionadas con el lenguaje: |
| <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>También las API Reflection asociadas con anotaciones reiterables, 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>API de utilidades: |
| <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"> |
| Habilitar funciones de Java 8 y del conjunto de herramientas Jack |
| </h2> |
| |
| <p> |
| Para usar las nuevas funciones del lenguaje Java 8, también debes usar el |
| nueva <a class="external-link" href="https://source.android.com/source/jack.html">conjunto de herramientas Jack</a>. Este nueva |
| conjunto de herramientas de Android permite compilar fuentes del lenguaje Java en código de bytes dex legible a través de |
| Android, también tiene su propio formato de biblioteca {@code .jack} y proporciona la mayoría de las funciones de conjunto de |
| herramientas como parte de una única herramienta: reempaquetado, reducción, alteración y |
| MultiDex. |
| </p> |
| |
| <p>A continuación, se muestra una comparación de los conjuntos de herramientas empleados para generar archivos DEX de Android:</p> |
| <ul> |
| <li>Conjunto de herramientas javac heredada:<br> |
| <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code |
| .class} --> {@code .dex}) |
| </li> |
| |
| <li>Nueva cadena de herramientas Jack:<br> |
| <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex}) |
| </li> |
| </ul> |
| |
| <h3> |
| Configuración de Gradle |
| </h3> |
| |
| <p> |
| Si deseas habilitar las funciones del lenguaje Java 8 y de Jack para tu proyecto, escribe lo |
| siguiente en tu archivo de nivel de módulo {@code build.gradle}: |
| </p> |
| |
| <pre> |
| android { |
| ... |
| defaultConfig { |
| ... |
| jackOptions { |
| enabled true |
| } |
| } |
| compileOptions { |
| sourceCompatibility JavaVersion.VERSION_1_8 |
| targetCompatibility JavaVersion.VERSION_1_8 |
| } |
| } |
| </pre> |
| |
| <h3 id="known-issues"> |
| Problemas conocidos |
| </h3> |
| |
| <p> |
| Actualmente, <a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant |
| Run</a> no funciona con Jack y permanecerá deshabilitado cuando se use |
| el nuevo conjunto de herramientas. |
| </p> |
| |
| <p>Debido a que Jack no genera archivos de clase intermedia al compilar una |
| aplicación, las herramientas que dependen de estos archivos actualmente no funcionan con Jack. Algunos |
| ejemplos de estas herramientas:</p> |
| |
| <ul> |
| <li>Detectores Lint que funcionan en archivos de clases; |
| </li> |
| |
| <li>Herramientas y bibliotecas que requieren los archivos de clase de la aplicación (como |
| pruebas de instrumentación con JaCoCo). |
| </li> |
| </ul> |
| |
| <p>Si experimentas otros problemas al usar Jack, <a href="http://tools.android.com/filing-bugs">envía un error</a>.</p> |