1 page.title=Funciones del lenguaje Java 8 2 page.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 pgina se describen las funciones de idioma compatibles con la Android N 21 Preview, tambin 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 26 Studio 2.1 y el Android N Preview SDK, en el que se incluyen el conjunto de herramientas 27 Jack y el complemento de Android para Gradle. Si an no 28 instalaste el Android N Preview SDK, consulta <a href="{@docRoot}preview/setup-sdk.html">Configuracin 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 cdigo 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 compilacin en funcin 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 caractersticas 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">mtodos de interfaz 53 predeterminados y estticos;</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> (tambin 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 mtodos</a> (tambin 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 mtodos 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. Tendrs 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>Tambin 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, tambin 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 cdigo de bytes dex legible a travs de 132 Android, tambin tiene su propio formato de biblioteca {@code .jack} y proporciona la mayora de las funciones de conjunto de 133 herramientas como parte de una nica herramienta: reempaquetado, reduccin, alteracin y 134 MultiDex. 135 </p> 136 137 <p>A continuacin, se muestra una comparacin 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 Configuracin 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 mdulo {@code build.gradle}: 156 </p> 157 158 <pre> 159 android { 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 185 aplicacin, las herramientas que dependen de estos archivos actualmente no funcionan con Jack. Algunos 186 ejemplos 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 aplicacin (como 193 pruebas de instrumentacin con JaCoCo). 194 </li> 195 </ul> 196 197 <p>Si experimentas otros problemas al usar Jack, <a href="http://tools.android.com/filing-bugs">enva un error</a>.</p>