183 lines
5.8 KiB
Plaintext
183 lines
5.8 KiB
Plaintext
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 (muestra) 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>
|
|
</li>
|
|
|
|
<li>
|
|
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">anotaciones
|
|
reiterables.</a>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<p>
|
|
A su vez, las siguientes API de funciones del lenguaje Java 8 ahora se encuentran disponibles:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>Las API de Reflection y las relacionadas con el lenguaje:
|
|
</li>
|
|
|
|
<li style="list-style: none; display: inline">
|
|
<ul>
|
|
<li>{@code java.lang.FunctionalInterface}
|
|
</li>
|
|
|
|
<li>{@code java.lang.annotation.Repeatable}
|
|
</li>
|
|
|
|
<li>{@code java.lang.reflect.Method.isDefault()}
|
|
</li>
|
|
|
|
<li>También API Reflection asociadas con anotaciones reiterables, como
|
|
{@code AnnotatedElement.getAnnotationsByType(Class)}:
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>API de utilidades:
|
|
</li>
|
|
|
|
<li style="list-style: none; display: inline">
|
|
<ul>
|
|
<li>{@code java.util.function}
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="note">
|
|
<strong>Nota:</strong> la implementación de expresiones Lambda
|
|
de Android N se basa en clases anónimas. Este enfoque permite que
|
|
tengan compatibilidad con versiones anteriores y puedan ejecutarse en versiones anteriores de Android. Para probar
|
|
expresiones Lambda en versiones anteriores, recuerda acceder a tu archivo {@code
|
|
build.gradle} y fijar {@code compileSdkVersion} y {@code
|
|
targetSdkVersion} en 23 o un valor inferior.
|
|
</p>
|
|
|
|
<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 empleadas 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 conjunto 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 específico 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>
|
|
Problemas conocidos
|
|
</h3>
|
|
|
|
<p>
|
|
Instant Run, presentado en Android Studio 2.0 (beta), actualmente 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 JaCoCo
|
|
y Mockito).</li>
|
|
</ul>
|
|
|
|
<p>Si experimentas otros problemas al usar Jack, <a href="http://tools.android.com/filing-bugs">informa los errores</a>.</p> |