Home | History | Annotate | Download | only in preview
      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} --&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   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>