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} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
141  .class} --&gt; {@code .dex})
142  </li>
143
144  <li>Nueva cadena de herramientas Jack:<br>
145  <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@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>