Sie können in der Tat die gradle-retrolamba
Gradle-Build-Abhängigkeit verwenden, um Java 8 für die Android-Entwicklung zu verwenden.
Unten finden Sie die vollständige Anleitung, die ich kürzlich befolgt habe, um Lambda-Ausdrücke für die Android-Entwicklung auszuführen. Die Originalquelle dieses Handbuchs wird am Ende erwähnt.
In diesem Handbuch wird eine Methode zum Einbringen einiger Java 8- Funktionen in die Android-Entwicklungstools vorgestellt, die speziell auf die Eclipse-IDE abzielt
. Die Schritte, die in diesem Handbuch beschrieben werden, können jedoch auch an die neue Entwicklungsumgebung für Aufstände von Google, Android Studio, angepasst werden. Es basiert auf der Community-Edition der beliebten IntelliJ Idea IDE von JetBrains und wurde kürzlich von Google Anfang Juli 2014 auf die Beta-Version aktualisiert, kurz bevor dieser Leitfaden verfasst wurde. Eclipse wird zumindest für eine Weile die herausragende Entwicklungsumgebung bleiben. Angesichts der Tatsache, dass die meisten Android-Projekte mit Eclipse entwickelt wurden, scheint eine Methode zum Einbringen neuer Java 8-Funktionen wie Lambda-Ausdrücke in ADT für Entwickler recht nützlich zu sein.
Die Android-Entwicklung basiert auf einer benutzerdefinierten Java-Implementierung namens Apache Harmony Project, die bereits 2011 beendet wurde. Die in der Android-Entwicklung am häufigsten verwendete Java-Syntax ist Java 6 (v1.6), und Java 7 (v1.7) wird teilweise auch unterstützt die KitKat Edition (Android 4.4. +). Daher können Java 8-Funktionen wie Lambda-Ausdrücke nicht direkt in der Android-App-Entwicklung verwendet werden, ohne dass einige Änderungen an den Entwicklungstools vorgenommen wurden. Glücklicherweise handelt es sich bei diesen Konstrukten im Grunde genommen um einige Verbesserungen des "syntaktischen Zuckers", die Entwicklern die Mängel von Dingen wie "anonymen Klassen" vermitteln, und sie können in Java 6- oder Java 7-Klassen übersetzt werden.
Ein neuerer Ansatz zur Übersetzung eines Java 8-Quellcodes in niedrigere Java-Versionen heißt RetroLambda . Mit dieser Bibliothek können Entwickler Java 8-Code mit Lambda-Ausdrücken auf Java 7 oder niedriger ausführen. Leider werden andere Java 8-Funktionen als Lambda-Ausdrücke von RetroLambda derzeit nicht unterstützt, aber das Konzept der Lambda-Ausdrücke ist der größte Sprung auf der Java 8-Plattform und ein großartiges Tool für Android-Entwickler.
Details zu dieser Bibliothek finden Sie auf der GitHub-Seite:
https://github.com/orfjackal/retrolambda#getting-started
Ein von einem anderen Entwickler erstelltes Gradle-Plugin für RetroLambda ermöglicht die Implementierung von Gradle-basierten Builds in Java- oder Android-Projekten. Der Entwickler erwähnt jedoch nur die Integration dieses Plugins in die Android Studio-Umgebung. Details finden Sie auf der GitHub-Seite:
https://github.com/evant/gradle-retrolambda
Die Verwendung dieser Infrastrukturen in einer Eclipse-basierten Entwicklungsumgebung kann nicht direkt angegangen werden, ist jedoch machbar und wird in diesem Handbuch demonstriert.
Vorbereitung
In diesem Handbuch wird davon ausgegangen, dass der Leser über grundlegende Kenntnisse der Android-Entwicklung verfügt und auf ADT Version 22.6.2 basiert, da die aktuelle ADT-Version 23.0.2 Probleme mit der Erstellung von Layoutordnern zu haben scheint. Details zu diesem Problem finden Sie unter folgendem Link:
http://code.google.com/p/android/issues/detail?id=72591
Die Schritte in diesem Handbuch werden für einen 64-Bit- Entwicklungscomputer von Windows 8.1 angegeben, können jedoch problemlos an andere Plattformen angepasst werden. Das neue Build-System Gradle
wird für Build / Clean-Prozesse verwendet, und das Installationsverfahren wird ebenfalls bereitgestellt. Außerdem müssen beide JDK 8
und JDK 7
auf der Entwicklungsmaschine koexistieren. Die folgenden Schritte müssen befolgt werden, um sie zu installieren:
- Gehen Sie zur Vorschau-Seite für den frühen Zugriff auf JDK 8 http://jdk8.java.net
- Laden Sie JDK 8u20 herunter und installieren Sie es. Die Installation von JRE 8 ist nicht erforderlich und kann übersprungen werden
- Gehen Sie zur neuesten stabilen Release-Seite von JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- Laden Sie JDK 7u65 herunter und installieren Sie es. Die Installation von JRE 7 ist erneut nicht erforderlich und kann übersprungen werden
- Fügen Sie
bin
Ihrer %PATH%
Variablen den JDK 8-Basisordner und den JDK 8- Ordner hinzu
- Erstellen Sie eine neue Umgebungsvariable
JAVA_HOME
mit dem Wert des Pfads des JDK 8-Basisordners
- Erstellen Sie erneut eine neue Umgebungsvariable
JAVA8_HOME
mit dem Wert des Pfads des JDK 8-Basisordners
- Erstellen Sie eine neue Umgebungsvariable
JAVA7_HOME
mit dem Wert des Pfads des JDK 7-Basisordners
- Öffnen Sie ein Terminalfenster und führen Sie den
java -version
Befehl aus. Überprüfen Sie, ob Java 8 aktiv ist
- Führen Sie den
javac -version
Befehl im selben Fenster aus und stellen Sie sicher, dass der JDK 8-Java-Compiler ebenfalls aktiv ist
Jetzt muss ADT-22.6.2 über den folgenden Link heruntergeladen werden:
http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip
- Laden Sie ADT herunter und entpacken Sie den Inhalt in einen Ordner, z
D:\adt
- Definieren Sie eine neue Umgebungsvariable
ANDROID_HOME
mit dem Wert des Pfads Ihres ADT-Installationsordners, zD:\adt\sdk
- Fügen Sie Ihre
Andoid SDK Platform Tools
und Andoid SDK Tools
Ordner, z. B. D:\adt\sdk\tools
und D:\adt\sdk\platform-tools
, zu Ihrer %PATH%
Variablen hinzu
- Erstellen Sie eine Verknüpfung zu Eclipse IDE, wenn Sie möchten. Es befindet sich unter Ihrem ADT-Installationsordner, z
D:\adt\eclipse
- Führen Sie Eclipse IDE aus und erstellen Sie einen Arbeitsbereich, z
D:\adt\workspace
- Klicken Sie auf die
Android SDK Manager
Schaltfläche in der Symbolleiste
- Wählen Sie
Android SDK Build tools Rev. 19.1
und Android Support Library
nur. Deaktivieren Sie alles andere und installieren Sie diese beiden Pakete.
Wenn alles gut geht, ist ADT betriebsbereit.
Die Installation der folgenden Tools wird ebenfalls dringend empfohlen:
Java 8-Unterstützung für Eclipse Kepler: Dadurch erkennt Eclipse neue Java 8-Syntaxerweiterungen und macht Ärger red dots
in Ihrem Java-Code-Editor überflüssig. Es kann über Help -> Install New Software
in Eclipse installiert werden . Geben Sie http://download.eclipse.org/eclipse/updates/4.3-P-builds/ in das Work with
Feld ein und fahren Sie mit der Installation fort.
Nodeclipse / Enide Gradle: Wird hauptsächlich zum Hervorheben von Schlüsselwörtern in der Sprache Groovy verwendet. Groovy wird als DSL für Gradle-Build-Skripte verwendet. Dieses Plugin kann über installiert werden Eclipse Marketplace
. Eclipse in ADT-22.6.2 wird jedoch nicht mitgeliefert Eclipse Marketplace Client
. Daher müssen Sie zuerst installieren müssen Eclipse Marketplace Client
mittels Install New Software
Werkzeug in Eclipse. Geben Sie http //: download.eclipse.org/mpc/kepler/ in das Work with
Feld ein und fahren Sie mit der Installation fort. Nach der Installation Eclipse Marketplace Client
können Sie Nodeclipse/Enide Gradle
in der suchen Eclipse Marketplace Client
und es installieren.
Virtuelles Genymotion-Gerät: Es ist ein großartiger Ersatz für die Standardeinstellung, Android Virtual Device
die mit ADT geliefert wird . AVD ist ärgerlich umständlich und stürzt ohne Grund weiter ab. Mit Genymotion können Sie Android-VDs mithilfe von CyanogenMod
Bildern vorbereiten , die von Oracle VirtualBox ausgeführt werden . Die Einzelbenutzerlizenz ist kostenlos und kann von http://www.genymotion.com heruntergeladen werden . Es ist nur ein Login erforderlich und es kann auch in Eclipse integriert werden. Details finden Sie unter:
https://cloud.genymotion.com/page/doc/#collapse8
Unten sehen Sie einen Screenshot eines auf Android 4.3 basierenden virtuellen CyanogenMod-Geräts.
Es kann als vollwertiges Android-Gerät betrachtet werden, das auf einem x86- oder x64-basierten PC ausgeführt wird. Um Google-Dienste wie Google PlayStore
auf diesem virtuellen Gerät nutzen zu können, muss ein gapps
Bild für die verwendete Android-Version auf das Gerät geflasht werden. Ein geeignetes gapps
Image für das Gerät kann von der CyanogenMod-Website heruntergeladen werden:
http://wiki.cyanogenmod.org/w/Google_Apps
Die Gradle-Installation ist optional, da sie auch vom Android SDK selbst bereitgestellt wird. Eine separate Installation wird jedoch dringend empfohlen. Die Installation kann folgendermaßen erfolgen:
Demo App
Es wird eine einfache App erstellt, um die Verwendung der im vorherigen Abschnitt beschriebenen Tools zu demonstrieren. Sie können einfach die folgenden Schritte ausführen, um einen Einblick in die Verwendung von Lambda-Ausdrücken in den Android Developer Tools zu erhalten:
- Führen Sie Eclipse IDE aus und erstellen Sie eine neue Android-App, indem Sie auswählen
File -> New -> Other -> Android -> Android Application Project
- Füllen Sie das folgende Formular aus:
gradle_build.cmd:
gradle_post_build.cmd:
gradle_clean.cmd:
- Deaktivieren Sie die
Project -> Build Automatically
Menüoption
- Klicken Sie mit der rechten Maustaste auf das Projekt und wählen
Properties -> Builders
Sie alle von ADT bereitgestellten Standard-Builder aus und deaktivieren Sie sie
- Klicken Sie auf die
New
Schaltfläche im selben Fenster und wählen Sie Program
und klicken SieOK
- Das neue Builder-Konfigurationsfenster wird angezeigt. Füllen Sie die Registerkarten wie folgt aus:
Main
Registerkarte der neuen Builder-Konfiguration
Refresh
Registerkarte der neuen Builder-Konfiguration
Environment
Registerkarte der neuen Builder-Konfiguration
Build Options
Registerkarte der neuen Builder-Konfiguration
- Erstellen Sie den zweiten Builder mit dem Namen
Gradle_Post_Build
, der gradle_post_build.cmd
als Programm verwendet wird. Alle anderen Einstellungen dieses Builders müssen mit denen des zuvor erstellten Builders identisch sein. Dieser Builder ist dafür verantwortlich, die durch den Build-Prozess erstellten Artefakte in den bin
Ordner zu kopieren .
- Erstellen Sie den dritten Builder mit dem Namen
Gradle_Cleaner
, der gradle_clean.cmd
als Programm verwendet wird. Nur die Run the builder
Einstellung auf der letzten Registerkarte muss als festgelegt werden During a Clean
. Alle anderen Einstellungen dieses Builders müssen mit denen des ersten Builders identisch sein. Dieser Builder ist für die Reinigung der durch den Build-Prozess erstellten Artefakte verantwortlich, wie der Name schon sagt.
Neue Erbauer des HelloLambda
Projekts
- Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie
Export
- Wählen Sie
Android -> Generate Gradle Build Files
und klicken SieNext
- Wählen Sie das Projekt im nächsten Fenster aus und klicken Sie auf
Finish
- Gehen Sie zum Stammordner Ihres Projekts und löschen Sie die Dateien
gradlew
und gradlew.bat
. Löschen Sie auch den gradle
Ordner
- Wechseln Sie zurück zu Eclipse und wählen Sie die
Project -> Clean
Menüoption. Füllen Sie das folgende Formular aus:
Clean Project
Fenster
- Klicken Sie
OK
und warten Sie, bis der Reinigungsvorgang abgeschlossen ist
- Fügen Sie das unten angegebene Java-Code-Snippet direkt nach dem Aufruf hinzu, um
setContentView
in Ihrer MainActivity
Klasse zu funktionieren :
- Ändern Sie den Anfang der
build.gradle
Datei bis sourceCompatibility
zum folgenden Abschnitt:
- Klicken Sie mit der rechten Maustaste auf das Projekt, wählen Sie die
Properties -> Java Compiler
Option aus und setzen Sie alle Konformitätsstufen auf Java 8. Dadurch erkennt Eclipse neue Java 8-Konstrukte wie Lambda-Ausdrücke.
- Klicken Sie
No
in das Benachrichtigungsfenster
- Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie
Build project
. Eclipse beginnt mit der Erstellung des Projekts.
Erstellungsprozess
Eclipse kann nun Dateien erkennen R.java
und buildConfig.java
anzeigen und zeigt keine red dots
Fehler an, die sich auf die Ressourcendateien des Projekts beziehen.
- Erstellen Sie eine neue
Run Configuration
für Ihre Android-Zielplattform, indem Sie mit der rechten Maustaste auf das Projekt klicken und dann auswählen Run As -> Run Configurations
. Diese Demo-Anwendung sieht beispielsweise wie folgt aus: Genymotion VD:
HelloLambda-Anwendung
Sie können im LogCat
Fenster feststellen, dass das Code-Snippet mit einem einfachen Lambda-Ausdruck ordnungsgemäß funktioniert
Quelle: Verwenden von Java 8 Lambda Expressions in Android Developer Tools