tutorial - "Warum Apache Harmony" oder "Wie verwende ich Java 8 auf Android"




java 8 tutorial (2)

Die meisten von uns haben inzwischen von den coolen Features von Java 8 gehört, aber Android wird es nicht unterstützen. Dies liegt daran, dass Google Apache Harmony für Android verwendet. Dies ist es, was uns (die Android-App-Entwickler) davon abhält, unseren Code mit Lambdas, Standardimplementierungen in Schnittstellen, Einschalten eines Strings und vielem mehr zu verbessern. Sicher werden wir für einige Zeit damit umgehen, aber was ist, wenn einige Bibliotheken, die wir in unseren Apps verwenden, Java 8-Funktionen verwenden? Soweit ich weiß, wird dies nicht funktionieren (bitte korrigieren Sie mich, wenn Sie falsch liegen). Dies erzeugt eine Inkompatibilität zwischen Standard- Java und Android- Java. Es kann nicht sein, was Google beabsichtigt, oder zumindest kann ich mir keinen Grund vorstellen, warum ein Unternehmen, das ein weit verbreitetes Betriebssystem entwickelt, dauerhaft bei einer alten Java-Version bleiben würde.

Fragen:

  • Warum verwenden sie Apache Harmony?
  • Warum können sie keine neuere Version von Java verwenden?
  • Wenn sie Oracle's Java nicht wollen, warum können sie dann nicht eine Teilmenge von OpenJDK (Lizenzierung hier noob)?
  • Kennen Sie Pläne zur Aktualisierung der verwendeten Java-Version?
  • Kennen Sie Java-Klassen auf aktuellen Android-Systemen?

https://code.i-harness.com


Kennen Sie Java-Klassen auf aktuellen Android-Systemen?

Es gibt einige Bibliotheken, die Teile der Java 8-API zurückveröffentlichen (siehe den folgenden Abschnitt zur nativen Unterstützung dieser APIs in den neuesten Android-Versionen):

  • ThreeTenABP Backport von Java 8 Datum und Uhrzeit API für Android optimiert
  • Die Stream-Unterstützung ist ein Backport der Java 8-Funktion java.util.function (funktionale Schnittstellen) und der java.util.stream API (Streams) für Benutzer von Java 6 oder 7, die mit ausgewählten Zusätzen aus java.util.concurrent die nicht vorhanden waren zurück in Java 6.

Und Sie können retrolambda (zusammen mit gradle-retrolambda Plugin), um Lambdas in Android-Entwicklung zu nutzen.

AKTUALISIEREN

Ab Android Studio 2.4 Preview 4 (kombiniert mit dem Android-Plug-in 2.4.0-alpha4) gibt es eine integrierte Unterstützung für einige der Java 8-Sprachfunktionen:

  • Lambda-Ausdrücke
  • Methodenreferenzen
  • Wiederholen von Anmerkungen

Die oben genannten Funktionen können mit jeder Android-API-Ebene verwendet werden.

Ab API-Stufe 24 können wir auch Standardmethoden und statische Schnittstellen sowie die folgende Java 8-API verwenden:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface

API-Ebene 26 (Android O Preview) fügt java.time API-Unterstützung hinzu.


Warum verwenden sie Apache Harmony?

Weil Sun sich geweigert hat, Google eine Lizenz für Sun (jetzt Oracle) Java unter akzeptablen Bedingungen zur Verfügung zu stellen. Google und Sun haben verhandelt, aber sie sind von dem Deal weggegangen.

Nitpick: In der Tat sind die Android-Bibliotheken nicht Apache Harmony. Sie begannen als basierend auf Harmony, aber die beiden Codebasen haben sich voneinander getrennt. Außerdem wurde das Apache Harmony-Projekt offiziell im November 2011 in den Ruhestand versetzt.

Warum können sie keine neuere Version von Java verwenden?

Erstens läuft Android Java (tm) nicht. Es wird eine Java-ähnliche Sprache mit einer Klassenbibliothek ausgeführt, die funktional einer Untergruppe der Java-Klassenbibliothek (+ Android-spezifische Bibliotheken) auf einer virtuellen Maschine mit einem anderen Befehlssatz entspricht.

Aus technischer Sicht könnten sie ... aber nur, wenn sie viel Arbeit in die Implementierung von Java 7 und Java 8 Sprachfunktionen, Bibliotheksfunktionen usw. für die Android-Plattform stecken.

UPDATE - Ab Android 19 (KitKat) und Eclipse ADT 22.6 unterstützt Android jetzt die Java 7-Spracherweiterungen. siehe http://tools.android.com/recent/eclipseadt226preview

Wenn sie Oracle's Java nicht wollen, warum können sie dann nicht eine Teilmenge von OpenJDK verwenden?

Ich glaube nicht, dass der Wechsel zu OpenJDK irgendetwas verändern würde. Oracle Java und OpenJDK sind 99,9% gleich.

Wie auch immer, es kann Lizenzierung und damit verbundene rechtliche Probleme geben. (Und um ein Gefühl dafür zu bekommen, lesen Sie die Oracle gegen Google Klage ... das wird ansprechen.)

Wahrscheinlicher ist, dass Google nicht genug kommerziellen Wert sieht, um den (massiven) Anstrengungen zu begegnen, die nötig wären, um Änderungen vorzunehmen, und die Störungen, die es für das Android-Ökosystem verursachen würde, das bereits unter Fragmentierungsproblemen leidet.

Kennen Sie Pläne zur Aktualisierung der verwendeten Java-Version?

Nein, tu ich nicht. Das bedeutet nicht, dass es keine Pläne gibt, aber wenn es welche gibt, sind sie nicht öffentlich.

Kennen Sie Java-Klassen auf aktuellen Android-Systemen?

Du könntest sie portieren. Oder zumindest könnten Sie versuchen , sie zu portieren. (Einige Java-APIs haben eine enge Beziehung zur Seite des systemeigenen Codes der JVM ... und das könnte die Portierung problematisch machen.)







java-8