Pregunta ¿Es posible usar Java 8 para el desarrollo de Android?


Al buscar en la web, no está claro si Java 8 es compatible con el desarrollo de Android o no.

Antes de descargar / configurar Java 8, alguien me puede señalar en cualquier documento "oficial" que dice que Java 8 es o no compatible con el desarrollo de Android.


541
2018-04-27 00:40


origen


Respuestas:


java 8

Android es compatible con todas las características del lenguaje Java 7 y un subconjunto de las características del lenguaje Java 8 que varían según la versión de la plataforma.

Para verificar qué características de java 8 son compatibles

Usar las características del lenguaje Java 8

Hemos decidido agregar soporte para las características del lenguaje Java 8 directamente en el conjunto de herramientas javac y dx actual, y desaprobamos la cadena de herramientas Jack. Con esta nueva dirección, las herramientas existentes y los complementos que dependen del formato de archivo de la clase Java deben seguir funcionando. En el futuro, las características del lenguaje Java 8 serán compatibles de forma nativa con el sistema de compilación de Android. Nuestro objetivo es lanzar esto como parte de Android Studio en las próximas semanas, y queríamos compartir esta decisión anticipadamente con usted.

Compatibilidad con funciones de idioma futuras de Java 8 en Android

Usuarios de Eclipse:

Para los desarrolladores antiguos que prefieren Eclipse, Google deja de ser compatible con las herramientas de Eclipse Android Developer

si instaló Java 8 JDK, pruébelo; si aparece algún problema intente configurar el compilador como 1.6 en Eclipse desde el menú de la ventana → Preferencias → Java → Compilador. Java 7 también funcionará:

Eclipse Preferences -> Java -> Compiler

Se requiere Java 7 o superior si tiene como objetivo Android 5.0 y   mayor.

instala múltiples JDK y prueba.


160
2018-04-27 01:10



ACTUALIZACIÓN 2017/11/04 - Android Studio 3.0 ahora tiene soporte nativo para Java 8.  gradle-retrolambda ahora ya no es necesario. Ver https://developer.android.com/studio/write/java8-support.html

El enlace anterior también incluye instrucciones de migración si está utilizando gradle-retrolambda. Respuesta original a continuación:


Android no es compatible con Java 8. Solo admite hasta Java 7 (si tiene kitkat) y aún no tiene invookedynamic, solo la nueva sintaxis Sugar.

Si quieres usar lambdas, una de las características principales de Java 8 en Android, puedes usar gradle-retrolamba. Es una dependencia de compilación gradle que integra retrolambda, una herramienta que convierte el bytecode de Java 8 a Java 6/7. Básicamente, si configura el compilador en Android Studio para compilar el código de bytes de Java 8, lo que permite lambdas, lo convertirá de nuevo a bytecode de Java 6/7, que a su vez se convierte a dalvik bytecode. Es un truco para si quieres probar algunas características JDK 8 en Android en lugar de soporte oficial.


329
2018-04-27 02:14



Usted puede usar gradle-retrolamba gradle build dependency para usar Java 8 para Android Development.

A continuación se muestra la guía completa que he seguido recientemente para ejecutar expresiones lambda para el desarrollo de Android. La fuente original de esta guía se menciona al final.

En esta guía, un método para llevar Java 8 características en   Se demostrarán las herramientas de desarrollo de Android, específicamente con el objetivo de    Eclipse IDE. Sin embargo, los pasos que se describirán a lo largo de esta guía también podrían adaptarse al nuevo desarrollo de la sublevación de Google.   entorno, Android Studio. Se basa en la edición de la comunidad de   popular IntelliJ Idea IDE por JetBrains y ha sido recientemente   actualizado a su versión 'beta' por Google a principios de julio de 2014, ligeramente   antes de escribir esta guía Eclipse se mantendrá como el prominente   entorno de desarrollo, al menos por un tiempo, y teniendo en   hecho de que la mayoría de los proyectos de Android se han desarrollado utilizando Eclipse, un   método para traer nuevas características de Java 8 como expresiones lambda en   ADT parece ser bastante útil para los desarrolladores.

Android Development se basa en una implementación personalizada de Java llamada   Apache Harmony Project, que finalizó en 2011. La mayoría   la sintaxis Java utilizada comúnmente en Android Development es Java 6 (v1.6) y   Java 7 (v1.7) también es parcialmente compatible con la edición de KitKat   (Android 4.4. +). Por lo tanto, Java 8 se presenta como expresiones lambda   no se puede usar directamente en el desarrollo de aplicaciones de Android sin   aplicando algunos ajustes en las herramientas de desarrollo. Afortunadamente, estos   las construcciones son básicamente algunas mejoras de "azúcar sintáctico" que   dar a los desarrolladores las deficiencias de cosas como 'clases anónimas'   y pueden traducirse a clases Java 6 o Java 7.

Un enfoque reciente para traducir un código fuente Java 8 en Java inferior   versiones se llama RetroLambda. Esta biblioteca hace que los desarrolladores corran   Código Java 8 con expresiones lambda en Java 7 o incluso inferior.   Desafortunadamente, las características de Java 8 además de las expresiones lambda no son   apoyado por RetroLambda por ahora, pero el concepto de expresiones lambda   es el mayor salto en la plataforma Java 8 y es una gran herramienta para   Desarrolladores de Android de todos modos.

Los detalles sobre esta biblioteca se pueden encontrar en su página de GitHub:

https://github.com/orfjackal/retrolambda#getting-started

Además, un plugin de Gradle para RetroLambda creado por otro desarrollador   permite que las compilaciones basadas en Gradle se implementen en Java o Android   Proyectos. Sin embargo, el desarrollador solo menciona la integración de este   complemento en el entorno de Android Studio. Los detalles se pueden encontrar en su   Página de GitHub:

https://github.com/evant/gradle-retrolambda

Usar estas infraestructuras dentro de un desarrollo basado en Eclipse   entorno no se puede abordar directamente, pero es factible y será   demostrado a lo largo de esta guía.

Preparación

Esta guía supone que el lector tiene una comprensión básica del desarrollo de Android y se basa en la versión 22.6.2 de ADT porque la reciente versión 23.0.2 de ADT parece tener problemas, como la creación de carpetas de diseño. Los detalles sobre este problema se pueden encontrar en el siguiente enlace:

http://code.google.com/p/android/issues/detail?id=72591

Los pasos en esta guía se darán para una Windows 8.1, 64 bits máquina de desarrollo, pero se pueden adaptar fácilmente a otras plataformas. El nuevo sistema de compilación Gradlese usará para procesos de compilación / limpieza y también se proporcionará su procedimiento de instalación. Además, ambos JDK 8 y JDK 7 debe coexistir en la máquina de desarrollo. Los pasos dados a continuación se deben seguir para instalarlos:

  • Ir a la página de vista previa de acceso temprano JDK 8 http://jdk8.java.net
  • Descargue JDK 8u20 e instálelo. La instalación de JRE 8 no es necesaria y se puede omitir
  • Vaya a la última página de lanzamiento estable de JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • Descargue JDK 7u65 e instálelo. La instalación de JRE 7 tampoco es necesaria y se puede omitir
  • Agregue la carpeta de inicio de JDK 8 y JDK 8 bin carpeta a su %PATH% variable
  • Crear una nueva variable de entorno JAVA_HOME con el valor de la ruta de la carpeta de inicio de JDK 8
  • Crear una nueva variable de entorno JAVA8_HOME de nuevo con el valor de la ruta de la carpeta de inicio de JDK 8
  • Crear una nueva variable de entorno JAVA7_HOME con el valor de la ruta de la carpeta de inicio JDK 7
  • Abre una ventana de terminal y ejecuta java -version comando y verificar que Java 8 está en funcionamiento
  • correr javac -version comando en la misma ventana y verificar que el compilador JDK 8 Java también esté funcionando

Ahora, ADT-22.6.2 se debe descargar desde el siguiente enlace:

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • Descargue ADT y descomprima su contenido en una carpeta, p. D:\adt
  • Definir una nueva variable de entorno llamada ANDROID_HOME con el valor de la ruta de la carpeta de instalación de ADT, p. D:\adt\sdk
  • Agrega tu Andoid SDK Platform Tools y Andoid SDK Tools carpetas, p. D:\adt\sdk\tools y D:\adt\sdk\platform-tools, para usted %PATH% variable
  • Cree un acceso directo a Eclipse IDE si lo desea. Se encuentra debajo de la carpeta de instalación de ADT, p. D:\adt\eclipse
  • Ejecute Eclipse IDE y cree un espacio de trabajo, p. D:\adt\workspace
  • Clickea en el Android SDK Manager botón que se encuentra en la barra de herramientas
  • Seleccionar Android SDK Build tools Rev. 19.1 y Android Support Library solamente. Deseleccione todo lo demás e instale estos dos paquetes.

Si todo va bien, ADT estará en funcionamiento.

La instalación de las siguientes herramientas también es muy recomendable:

  • Compatibilidad con Eclipse Kepler Java 8: hace que Eclipse reconozca las nuevas extensiones de sintaxis de Java 8 y le permite deshacerse de las molestas red dots en tu editor de código Java. Puede ser instalado a través de Help -> Install New Software en Eclipse. Entrar http://download.eclipse.org/eclipse/updates/4.3-P-builds/ en el Work with campo y continúen instalándolo.

  • Nodeclipse / Enide Gradle: se usa principalmente para resaltar las palabras clave de Groovy. Groovy se usa como el DSL para los scripts de compilación de Gradle. Este complemento se puede instalar a través de Eclipse Marketplace. Sin embargo, Eclipse dentro de ADT-22.6.2 no viene junto con Eclipse Marketplace Client. Por lo tanto, primero tendrá que instalar Eclipse Marketplace Client por medio de Install New Software herramienta en Eclipse. Ingrese http //: download.eclipse.org/mpc/kepler/ en el Work with campo y continúen instalándolo. Después de instalar Eclipse Marketplace Client, puedes buscar Nodeclipse/Enide Gradle en el Eclipse Marketplace Client e instalarlo.

  • Dispositivo virtual Genymotion: es un gran reemplazo del dispositivo predeterminado Android Virtual Device que viene junto con ADT. AVD es molestamente engorroso y sigue estrellándose sin ningún motivo. Genymotion te hace preparar Android VD usando CyanogenModimágenes que son ejecutadas por Oracle VirtualBox. Su licencia de usuario único es gratis y se puede descargar desde http://www.genymotion.com. Solo se requiere iniciar sesión y también se puede integrar en Eclipse. Los detalles se pueden encontrar en:

https://cloud.genymotion.com/page/doc/#collapse8

A continuación se muestra una captura de pantalla de un dispositivo virtual CyanogenMod basado en Android 4.3,

enter image description here

Se puede considerar como un dispositivo Android totalmente desarrollado que se ejecuta en una computadora personal basada en x86 o x64. Para usar servicios de Google como Google PlayStore en este dispositivo virtual, un gapps la imagen para la versión de Android que utiliza se debe flashear en el dispositivo. Una adecuada gapps la imagen para el dispositivo se puede descargar del sitio web de CyanogenMod:

http://wiki.cyanogenmod.org/w/Google_Apps

La instalación de Gradle es opcional, ya que también la proporciona Android SDK, pero se recomienda encarecidamente su instalación por separado. La instalación de la misma se puede realizar siguiendo estos pasos:

  • Ir al sitio web de Gradle: http://www.gradle.org/

  • Hacer clic Downloads

  • Debajo Previous Releases elija la versión 1.10 y descargue gradle-1.10-all.zip o gradle-1.10-bin.zip
  • Descomprima su contenido en una carpeta, p. D:\adt\gradle
  • Definir una nueva variable de entorno llamada GRADLE_HOME con el valor de la ruta de la carpeta de instalación de Gradle, p. D:\adt\gradle
  • Agregue su carpeta de binarios de Gradle, p. D:\adt\gradle\bin, para usted %PATH% variable
  • Abre una ventana de terminal y ejecuta gradle -v comando y verificar que esté funcionando Si ha llegado a este punto con éxito, significa que está listo para crear su primera aplicación de Android con las características de Java 8.

Aplicación de demostración

Se creará una aplicación simple para demostrar el uso de las herramientas que se describieron en la sección anterior. Simplemente puede seguir los pasos que figuran a continuación para obtener una idea sobre el uso de expresiones lambda en las herramientas de desarrollo de Android:

  • Ejecute Eclipse IDE y cree una nueva aplicación de Android seleccionando File -> New -> Other -> Android -> Android Application Project
  • Complete el formulario que aparece como se muestra a continuación:

enter image description here

  • Simplemente haga clic en Next botón en los siguientes formularios y haga clic en Finish botón en el último. Espere hasta que ADT termine de cargar el proyecto
  • Haga clic derecho en el proyecto y seleccione New -> Folder y nombrarlo builders
  • Haga clic derecho sobre gen (Generated Java Files) carpeta y eliminarlo. Gradle generará los mismos archivos para nosotros en breve y los agregaremos al proyectos build path. TheLa carpeta gen` creada por el generador de Ant predeterminado ya no es necesaria y los artefactos de esa carpeta estarán obsoletos.
  • Cree los siguientes archivos por lotes debajo del builders carpeta:

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Complete estos archivos por lotes de la siguiente manera:

gradle_build.cmd:

enter image description here

gradle_post_build.cmd:

enter image description here

gradle_clean.cmd:

enter image description here

  • Des-seleccionar Project -> Build Automatically opción de menú
  • Haga clic derecho en el proyecto y seleccione Properties -> Builders y anule la selección de todos los constructores predeterminados proporcionados por ADT
  • Haga clic en el New botón en la misma ventana y seleccione Program y haga clic OK
  • Aparecerá una nueva ventana de configuración del generador. Complete sus pestañas de la siguiente manera:

MainPestaña de la nueva configuración del constructor

enter image description here

RefreshPestaña de la nueva configuración del constructor

enter image description here

EnvironmentPestaña de la nueva configuración del constructor

enter image description here

Build OptionsPestaña de la nueva configuración del constructor

enter image description here

  • Crea el segundo constructor llamado Gradle_Post_Build que usa gradle_post_build.cmd como su programa. Todas las demás configuraciones de este constructor deben ser exactamente iguales al constructor creado anteriormente. Este constructor será responsable de copiar los artefactos creados por el proceso de construcción en el bin carpeta.
  • Crea el tercer generador llamado Gradle_Cleaner que usa gradle_clean.cmd como su programa. Solamente Run the builder la configuración en la pestaña final debe configurarse como During a Clean. Todas las demás configuraciones de este constructor deben ser exactamente iguales al primer constructor. Este constructor será responsable de limpiar los artefactos creados por el proceso de compilación como su nombre lo sugiere.

Nuevos constructores de la HelloLambda Proyecto

enter image description here

  • Haga clic derecho en el proyecto y seleccione Export
  • Seleccionar Android -> Generate Gradle Build Files y haga clic Next
  • Seleccione el proyecto en la siguiente ventana y haga clic Finish
  • Ve a la carpeta raíz de tu proyecto y elimina los archivos gradlew y gradlew.bat. Eliminar también gradle carpeta
  • Vuelve a Eclipse y selecciona Project -> Clean opción de menú. Complete el formulario que se muestra de la siguiente manera:

Clean Project Ventana

enter image description here

  • Hacer clic OK y espere hasta que el proceso de limpieza se complete
  • Agregue el fragmento de código de Java que figura a continuación justo después de la llamada a setContentView función en su MainActivity clase:

enter image description here

  • Cambiar el comienzo de la build.gradle archivo hasta el sourceCompatibility sección de la siguiente manera:

enter image description here

  • Haga clic derecho en el proyecto y seleccione Properties -> Java Compiler opción y establecer todos los niveles de cumplimiento en Java 8. Esto hará que Eclipse reconozca nuevas construcciones Java 8 como expresiones lambda.
  • Hacer clic No en la ventana de notificación
  • Haga clic derecho en el proyecto y seleccione Build project. Eclipse comenzará a construir el proyecto.

Proceso de compilación enter image description here

  • Haga clic derecho en el proyecto y vaya a Properties -> Java Build Path. Agregue las siguientes carpetas a la ruta de compilación (también se muestra en la imagen a continuación):

    • build\source\buildConfig\debug
    • build\source\r\debug

enter image description here

Eclipse ahora podrá reconocer R.java y buildConfig.java archivos y no mostrará ningún red dots que denotan errores relacionados con los archivos de recursos del proyecto.

  • Crear un nuevo Run Configuration para su plataforma de destino de Android haciendo clic derecho en el proyecto y luego seleccionando Run As -> Run Configurations. Por ejemplo, esta aplicación de demostración se ve como se muestra a continuación en Genymotion VD:

Aplicación HelloLambda

enter image description here

Puedes observar en el LogCat ventana que el fragmento de código con una expresión lambda simple funciona correctamente

enter image description here

Fuente: Usando Java 8 Lambda Expressions en Android Developer Tools


97
2018-02-08 12:39



Sigue este enlace para nuevas actualizaciones. Usar las características del lenguaje Java 8

Vieja respuesta

A partir de Vista previa de Android N lanzamiento de soporte de Android limitado caracteristicas de Java 8 ver Características del lenguaje Java 8

Para comenzar a utilizar estas funciones, debe descargar y configurar Androide   Studio 2.1  y Android N Preview SDK, que incluye   necesario Jack toolchain y Plugin de Android actualizado para Gradle. Si tu   aún no ha instalado el Android SDK SDK Preview, consulte Configurar para desarrollar   para Android N.

Características de lenguaje Java 8 admitidas y API

Actualmente, Android no es compatible con todas las características del lenguaje Java 8.   Sin embargo, las siguientes características están ahora disponibles cuando se desarrollan aplicaciones   orientada a la vista previa de Android N:

Métodos de interfaz predeterminados y estáticos

Expresiones Lambda (también disponible en API nivel 23 y menor)

Anotaciones repetibles

Referencias de métodos (también disponible en API nivel 23 y menor)

Hay algunas características adicionales de Java 8 compatibles con Android, puede ver detalles completos de Características del lenguaje Java 8

Actualizar

Nota: Android N basa su implementación de expresiones lambda en   clases anónimas Este enfoque les permite estar al revés   compatible y ejecutable en versiones anteriores de Android. Probar   expresiones lambda en versiones anteriores, recuerde ir a su   archivo build.gradle y establezca compileSdkVersion y targetSdkVersion en   23 o menos

Actualización 2

Ahora soporte de lanzamiento estable de Android studio 3.0 Bibliotecas Java 8 y características del lenguaje Java 8 (sin el compilador de Jack).


42
2018-03-10 04:50



Android usa una Java que se deriva de Java 6.

A partir de Android SDK versión 19, puede usar las características de Java 7 al hacer esto. Sin soporte completo para Java 8 (todavía).


19
2017-10-20 23:58



Sí, Android admite Java 8 ahora (24.1.17)

Ahora es posible

Pero necesitará ejecutar su dispositivo rom en java 1.8 y habilitar "jackOptions" para ejecutarlo. Jack es el nombre del nuevo compilador de Android que ejecuta Java 8

https://developer.android.com/guide/platform/j8-jack.html

agregue estas líneas a build_gradle

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8 parece ser el motor Java en ejecución de Android Studio 2.0, Pero todavía no acepta la sintaxis de java 8 después de que lo verifiqué, y no puedes elegir un compilador desde el estudio de Android ahora. Sin embargo, puede usar el complemento scala si necesita un mecanismo de programación funcional en su cliente de Android.

enter image description here


17
2017-11-25 14:14



Android OFICIALMENTE admite Java 8 desde Android N.

Los anuncios de funciones están aquí, el anuncio del lenguaje Java 8 es:

Compatibilidad mejorada con el lenguaje Java 8 - Estamos muy contentos de traer características de lenguaje Java 8 a Android. Con el compilador Jack de Android, puedes   ahora usa muchas características populares del lenguaje Java 8, incluidas lambdas y   más, en versiones de Android que se remontan a Gingerbread. Las nuevas funciones   ayuda a reducir el código repetitivo. Por ejemplo, lambdas puede reemplazar   clases internas anónimas al proporcionar oyentes de eventos. Algunos Java 8   funciones de idioma: como métodos predeterminados y estáticos, secuencias y   interfaces funcionales: ahora también están disponibles en N y más arriba. Con   Jack, esperamos seguir el lenguaje Java más de cerca   mientras se mantiene la compatibilidad con versiones anteriores.


14
2018-03-09 18:44



Podemos usar Java 8 usando:

  1. En build.gradle (Project: myProject) agregue lo siguiente

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
    
  2. En build.gradle (Module: myModule) agregue lo siguiente

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

11
2017-12-21 12:20



Native Java 8 llega a Android! ¡Finalmente!

eliminar el complemento Retrolambda y el bloque retrolambda de cada módulo   archivo build.gradle:

Para desactivar Jack y cambiar a la cadena de herramientas predeterminada, simplemente elimine   JackOptions bloquea desde el archivo build.gradle de su módulo

Para comenzar a utilizar las características de lenguaje Java 8 compatibles, actualice el complemento de Android a 3.0.0 (o superior)

A partir de Android Studio 3.0, las características del lenguaje Java 8 son ahora compatibles nativamente con Android:

  • Expresiones Lambda
  • Referencias de métodos
  • Escriba anotaciones (actualmente, la información de anotación no está disponible en tiempo de ejecución, pero solo en tiempo de compilación);
  • Anotaciones repetidas
  • Métodos de interfaz predeterminados y estáticos (en el nivel de API 24 o superior, sin soporte de ejecución instantánea tho);

También desde el mínimo nivel API 24, están disponibles las siguientes API Java 8:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (clase)
  • java.lang.reflect.Method.isDefault ()

Agregue estas líneas a build.gradle de su módulo de aplicación para informar el proyecto del nivel de idioma:

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

Deshabilite la compatibilidad con las características del lenguaje Java 8 agregando lo siguiente a su gradle.properties archivo:

android.enableDesugar=false

¡Terminaste! ¡Ahora puede usar native java8!


11
2018-03-10 12:20