1page.title=Funciones del lenguaje 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">Funciones y API admitidas del lenguaje Java 8</a> 10 </li> 11 <li> 12 <a href="#configuration">Habilitar funciones de Java 8 y del conjunto de herramientas Jack</a> 13 </li> 14 </ol> 15 </div> 16</div> 17 18<p>En Android N se ofrece compatibilidad con funciones 19 del idioma Java 8 que puedes usar al desarrollar aplicaciones orientadas a Android N. 20 En esta página se describen las funciones de idioma compatibles con la Android N 21 Preview, también la manera adecuada de configurar tu proyecto para usarlas y muchos problemas 22 conocidos que puedes experimentar. 23</p> 24 25<p>Para comenzar a usar estas funciones, debes descargar y configurar Android 26Studio 2.1 y el Android N Preview SDK, en el que se incluyen el conjunto de herramientas 27Jack y el complemento de Android para Gradle. Si aún no 28instalaste el Android N Preview SDK, consulta <a href="{@docRoot}preview/setup-sdk.html">Configuración para desarrollar con Android N</a>.</p> 29 30 31 32<p class="note"> 33 <strong>Nota:</strong> No es obligatorio usar las nuevas funciones del lenguaje Java 8 34 para desarrollar aplicaciones orientadas a la plataforma de Android N. Si 35 no deseas escribir código con funciones del lenguaje Java 8, puedes mantener los 36 valores de compatibilidad de origen y destino de tu proyecto en Java 7, pero debes 37 usar JDK 8 para crear la compilación en función de la plataforma de Android N. 38</p> 39 40<h2 id="supported-features"> 41 Funciones y API admitidas del lenguaje Java 8 42</h2> 43 44<p> 45 Actualmente, Android no admite todas las funciones del lenguaje Java 8. Sin embargo, las 46 siguientes características ahora se encuentran disponibles para el desarrollo de aplicaciones orientadas a la 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 de interfaz 53 predeterminados y 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 expresiones Lambda</a> (también disponible en API nivel 23 e inferiores); 59 </li> 60 61 <li> 62 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">anotaciones 63 reiterables;</a> 64 </li> 65 66 <li> 67 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html"> 68 referencias de métodos</a> (también disponible en API nivel 23 e inferiores). 69 </li> 70</ul> 71 72<p class="note"> 73 <strong>Nota:</strong> Para probar expresiones Lambda y métodos de referencia en 74 versiones anteriores de Android, accede al archivo {@code build.gradle} 75 y fija {@code compileSdkVersion} y {@code targetSdkVersion} en 23 o 76 un valor inferior. Tendrás que <a href="#configuration">habilitar la cadena de herramientas 77 Jack</a> para usar estas funciones de Java 8. 78</p> 79 80<p> 81 A su vez, las siguientes API de funciones del lenguaje Java 8 ahora se encuentran disponibles: 82</p> 83 84<ul> 85 <li>Las API Reflection y las relacionadas con el lenguaje: 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>También las API Reflection asociadas con anotaciones reiterables, 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>API de utilidades: 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 Habilitar funciones de Java 8 y del conjunto de herramientas Jack 126</h2> 127 128<p> 129 Para usar las nuevas funciones del lenguaje Java 8, también debes usar el 130 nueva <a class="external-link" href="https://source.android.com/source/jack.html">conjunto de herramientas Jack</a>. Este nueva 131 conjunto de herramientas de Android permite compilar fuentes del lenguaje Java en código de bytes dex legible a través de 132 Android, también tiene su propio formato de biblioteca {@code .jack} y proporciona la mayoría de las funciones de conjunto de 133 herramientas como parte de una única herramienta: reempaquetado, reducción, alteración y 134 MultiDex. 135</p> 136 137<p>A continuación, se muestra una comparación de los conjuntos de herramientas empleados para generar archivos DEX de Android:</p> 138<ul> 139 <li>Conjunto de herramientas javac heredada:<br> 140 <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code 141 .class} --> {@code .dex}) 142 </li> 143 144 <li>Nueva cadena de herramientas Jack:<br> 145 <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex}) 146 </li> 147</ul> 148 149<h3> 150 Configuración de Gradle 151</h3> 152 153<p> 154 Si deseas habilitar las funciones del lenguaje Java 8 y de Jack para tu proyecto, escribe lo 155 siguiente en tu archivo de nivel de módulo {@code build.gradle}: 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 conocidos 176</h3> 177 178<p> 179 Actualmente, <a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant 180 Run</a> no funciona con Jack y permanecerá deshabilitado cuando se use 181 el nuevo conjunto de herramientas. 182</p> 183 184<p>Debido a que Jack no genera archivos de clase intermedia al compilar una 185aplicación, las herramientas que dependen de estos archivos actualmente no funcionan con Jack. Algunos 186ejemplos de estas herramientas:</p> 187 188<ul> 189 <li>Detectores Lint que funcionan en archivos de clases; 190 </li> 191 192 <li>Herramientas y bibliotecas que requieren los archivos de clase de la aplicación (como 193 pruebas de instrumentación con JaCoCo). 194 </li> 195</ul> 196 197<p>Si experimentas otros problemas al usar Jack, <a href="http://tools.android.com/filing-bugs">envía un error</a>.</p>