64 votes

"Pourquoi Apache Harmony" ou "Comment utiliser Java 8 sur Android"

Note: je ne savais pas où mettre cette question, elle avait l'air de sortir de la place sur Android Amateurs. S'il vous plaît pardonnez-moi :)

Ainsi, la plupart d'entre nous ont entendu maintenant des fonctionnalités de Java 8, mais Android ne prendra pas en charge. C'est à cause de Google à l'aide de Apache Harmony pour Android. C'est ce que nous permettent de garder (l'appli android, les développeurs) de l'amélioration de notre code avec des lambdas, des implémentations par défaut dans les interfaces, la commutation sur une Chaîne et beaucoup plus. Sûrement, nous nous occupons depuis un certain temps, mais si certaines bibliothèques que nous utilisons dans nos apps début de l'utilisation de Java 8? Autant que je sache, cela ne fonctionnera pas (corrigez-moi si mauvais). Cela crée une incompatibilité entre le StandardJava et AndroidJava. Il ne peut pas être ce que Google a l'intention, ou, au moins, je ne peux pas penser à une raison pourquoi une entreprise, le développement d'une largement adopté de système d'exploitation, serait-wan pas définitivement séjour avec une vieille version de Java.

Questions pour vous:

  • Pourquoi ont-ils utiliser Apache Harmony?
  • Pourquoi ne peuvent-ils adopter une version plus récente de java?
  • Si ils ne veulent pas d'Oracle Java, pourquoi ne peuvent-ils pas utiliser un sous-ensemble de OpenJDK (licence noob ici)?
  • Connaissez-vous des plans pour mettre à jour la version de Java utilisée?
  • Connaissez-vous un moyen d'utiliser Java 8 classes sur Android?

Je vous remercie à l'avance pour répondre à ces questions,
Jusqu'

55voto

Stephen C Points 255558

Pourquoi ont-ils utiliser Apache Harmony?

Parce que le Soleil a refusé de fournir à Google une licence pour Oracle Java selon les modalités qui étaient acceptables. Google et le Soleil de négociation, mais ils ont fini par s'éloigner de l'affaire.

Pinailler: en fait, le Android les bibliothèques ne sont pas Apache Harmonie. Ils ont commencé en tant que basée sur l'Harmonie, mais les deux bases de code ont divergé. En outre, l'Apache Harmony projet a été officiellement pris sa "retraite" en novembre 2011.

Pourquoi ne peuvent-ils adopter une version plus récente de java?

Tout d'abord, Android ne fonctionne pas Java(tm). Il exécute une langue qui est identique à la Java avec une bibliothèque de classe qui est fonctionnellement équivalent à un sous-ensemble de la classe Java bibliothèque (+ Android, bibliothèques), sur une machine virtuelle avec une différente du jeu d'instructions.

À partir d'une technique pespective, ils pourraient ... mais seulement si ils ont mis beaucoup de travail dans la mise en œuvre de Java 7 et Java 8 fonctionnalités de langage, les fonctions de la bibliothèque, etc, pour la plateforme Android.

Mise à JOUR de Android 19 (KitKat) et Eclipse ADT 22.6, Android ne prend désormais en charge Java 7 extensions de langage; voir http://tools.android.com/recent/eclipseadt226preview

Si ils ne veulent pas d'Oracle Java, pourquoi ne peuvent-ils pas utiliser un sous-ensemble de OpenJDK?

Je ne pense pas que les changements OpenJDK quoi que ce soit. Oracle et Java OpenJDK sont à 99,9% le même.

De toute façon, il peut y avoir des licences et les questions juridiques connexes. (Et pour obtenir une sensation pour cela, lire l'Oracle vs Google procès ... c'est d'aller en appel.)

Plus probablement, Google ne voit pas assez de valeur commerciale pour contrer l' (massive) de l'effort qu'il faudrait pour changer, et les bouleversements que cela causerait à l'écosystème Android ... qui souffre déjà de problèmes de la fragmentation.

Connaissez-vous des plans pour mettre à jour la version de Java utilisée?

Non, je ne. Cela ne veut pas dire qu'il n'y a pas de plans, mais si il y a, elles ne sont pas publiques.

Connaissez-vous un moyen d'utiliser Java 8 classes sur Android?

Vous pourriez port. Ou au moins, vous pouvez essayer de port. (Certains des Api Java ont une relation intime avec le code natif côté de la JVM ... et qui pourrait faire le portage de problématique.)

12voto

Idolon Points 11503

Connaissez-vous un moyen d'utiliser Java 8 classes sur Android?

Il y a quelques bibliothèques qui backport parties de Java 8 API:

  • ThreeTen backport de Java 8 date et l'heure de l'API
  • En charge des flux est un rétroportage de Java 8 java.util.function (interfaces fonctionnelles) et java.util.stream (flux) de l'API pour les utilisateurs de Java 6 ou 7 complété avec certains ajouts java.util.concurrent qui n'existait pas en arrière dans la version 6 de Java.

Et vous pouvez utiliser retrolambda (avec gradle-retrolambda plugin) pour utiliser les expressions lambda en développement Android.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X