"Por qué Apache Harmony" o "Cómo usar Java 8 en Android"
La mayoría de nosotros ya hemos oído hablar de las características interesantes de Java 8, pero Android no lo soportará. Esto se debe a que Google utiliza Apache Harmony para Android. Esto es lo que nos mantiene (los desarrolladores de aplicaciones de Android) de mejorar nuestro código con lambdas, implementaciones por defecto en las interfaces, el cambio de una cadena y mucho más. Seguramente, vamos a manejar durante algún tiempo, pero ¿qué pasa si algunas bibliotecas que utilizamos en nuestras aplicaciones empiezan a utilizar Java 8 características? Por lo que sé, esto no funcionará (por favor, corrija si está equivocado). Esto crea incompatibilidad entre Standard -Java y Android- Java. No puede ser lo que Google pretende, o por lo menos no puedo pensar en una razón por la que una empresa, el desarrollo de un sistema operativo ampliamente adoptado, wan't permanecer permanentemente con una antigua versión de Java.
Preguntas:
- Importar nuevo módulo Android para el módulo JellyRefreshLayout
- No se pueden usar las funciones lambda en Android con Java 1.8
- Android Studio no puede utilizar la conexión segura para la actualización, quejándose del uso de Java 6
- Maven: Uso de bibliotecas Java 8 en aplicaciones instrumentadas con retrolambda-maven-plugin y DEX-ed con android-maven-plugin
- Gradle + Retrolambda: Fatal Error: No se puede encontrar el paquete java.lang en classpath o bootclasspath
- ¿Por qué utilizan Apache Harmony?
- ¿Por qué no pueden adoptar una versión más reciente de java?
- Si no quieren Java de Oracle, ¿por qué no pueden usar un subconjunto de OpenJDK (noob de licencia aquí)?
- ¿Conoces algún plan para actualizar la versión de Java utilizada?
- ¿Conoces alguna forma de usar clases Java 8 en los sistemas Android actuales?
- Uso de Java 8 en android studio
- Cuando los métodos predeterminados serán compatibles (Java 8) en Android?
- Android Studio Error: Error: CreateProcess error = 216, Esta versión de% 1 no es compatible con la versión de Windows que está ejecutando
- ¿Es posible usar la API de Java 8 Stream en la API de Android <24?
- CompletableFuture en la Biblioteca de soporte de Android?
- La ubicación de Android Studio JDK cambia de nuevo a 1.7 cada vez que se actualiza a la ruta 1.8
- El método stream () no funciona en android
- ¿Está la API Java 8 New Date disponible en Android N?
¿Por qué utilizan Apache Harmony?
Debido a que Sun se negó a proporcionar a Google una licencia para Sun (ahora Oracle) Java en términos aceptables. Google y Sun negociaron, pero terminaron alejándose del acuerdo.
Nitpick: de hecho, las bibliotecas de Android no son Apache Harmony. Comenzaron como basado en Harmony, pero las dos bases de código han divergido. Además, el proyecto Apache Harmony fue oficialmente "retirado" en noviembre de 2011.
¿Por qué no pueden adoptar una versión más reciente de java?
En primer lugar, Android no ejecuta Java ™. Ejecuta un lenguaje idéntico a Java con una biblioteca de clases que es funcionalmente equivalente a un subconjunto de la biblioteca de clases Java (+ bibliotecas específicas de Android), en una máquina virtual con un conjunto de instrucciones diferente .
Desde un punto de vista técnico, podrían … pero sólo si ponen mucho trabajo en la implementación de Java 7 y Java 8 características del lenguaje, características de la biblioteca, etc, para la plataforma Android.
ACTUALIZACIÓN – A partir de Android 19 (KitKat) y Eclipse ADT 22.6, Android ahora soporta las extensiones de lenguaje Java 7; Vea http://tools.android.com/recent/eclipseadt226preview
Si no quieren Java de Oracle, ¿por qué no pueden usar un subconjunto de OpenJDK?
No creo que cambiar a OpenJDK cambiara nada. Oracle Java y OpenJDK son 99,9% iguales.
De todos modos, puede haber licencias y cuestiones legales relacionadas. (Y para tener una idea de eso, lea sobre la demanda de Oracle contra Google … que va a apelar.)
Lo más probable es que Google no vea el valor comercial suficiente para contrarrestar el esfuerzo (masivo) que se necesitaría para cambiar, y la interrupción que causaría al ecosistema de Android … que ya sufre de problemas de fragmentación.
¿Conoces algún plan para actualizar la versión de Java utilizada?
No, no lo hago. No significa que no haya planes, pero si lo hay, no son públicos.
¿Conoces alguna forma de usar clases Java 8 en los sistemas Android actuales?
Usted podría portarlos. O por lo menos, usted podría intentar portarlos. (Algunas API de Java tienen una relación íntima con el lado de código nativo de la JVM … y eso podría hacer problemático el portar).
¿Conoces alguna forma de usar clases Java 8 en los sistemas Android actuales?
Hay algunas bibliotecas que backport partes de Java 8 API (ver la sección de actualización a continuación para el soporte nativo de estas API en las últimas versiones de Android):
- Backport de ThreeTenABP de Java 8 fecha y hora API optimizada para Android
- El soporte de flujo es un backport de la API
java.util.function
(interfaces funcionales) de Java 8 y de la APIjava.util.stream
(streams) para usuarios de Java 6 o 7 complementados con adiciones seleccionadas dejava.util.concurrent
que no existían De nuevo en Java 6.
Y puede utilizar retrolambda (junto con gradle-retrolambda plugin) para utilizar lambdas en el desarrollo de Android.
ACTUALIZAR
Sin embargo, a partir de Android Studio 2.4 Preview 4 (combinado con el complemento de Android 2.4.0-alpha4) hay compatibilidad integrada con algunas de las características del lenguaje Java 8:
- Expresiones lambda
- Referencias de método
- Repetición de anotaciones
Las funciones mencionadas anteriormente se pueden utilizar con cualquier nivel de API de Android.
Desde el nivel 24 de API también podemos usar métodos de interfaz predeterminados y estáticos, así como la siguiente API de Java 8:
-
java.util.stream
-
java.util.function
-
java.lang.FunctionalInterface
El nivel API 26 (Android O Preview) añade java.time
API java.time
.
Actualizar.
Android está planeando utilizar el OpenJDK. Posiblemente porque están pensando como tú y quieren usar las características de Java 8. Vea esto
- ¿Dónde puedo encontrar los iconos predeterminados de Android?
- Disposición del coordinador con la barra de herramientas en fragmentos o actividad