Rzeczywiście możesz użyć gradle-retrolamba
zależności kompilacji stopniowej do korzystania z Java 8 dla rozwoju Androida.
Poniżej znajduje się kompletny przewodnik, który ostatnio śledziłem, aby uruchomić wyrażenia lambda dla rozwoju Androida. Oryginalne źródło tego przewodnika jest wymienione na końcu.
W tym przewodniku zostanie zaprezentowana metoda wprowadzenia niektórych funkcji Java 8 do Narzędzi programistycznych dla systemu Android, szczególnie ukierunkowana na
środowisko Eclipse IDE. Jednak kroki opisane w tym przewodniku można również dostosować do nowego środowiska programistycznego powstania Google, Android Studio. Opiera się na wydaniu społecznościowym popularnego IntelliJ Idea IDE autorstwa JetBrains, a ostatnio został zaktualizowany do wersji beta przez Google na początku lipca 2014 r., Nieco przed napisaniem tego przewodnika. Eclipse pozostanie ważnym środowiskiem programistycznym, przynajmniej przez jakiś czas, a biorąc pod uwagę fakt, że większość projektów na Androida zostało opracowanych przy użyciu Eclipse, metoda wprowadzania nowych funkcji Java 8, takich jak wyrażenia lambda do ADT, wydaje się bardzo przydatna dla programistów.
Android Development opiera się na niestandardowej implementacji Java o nazwie Apache Harmony Project, która została zakończona w 2011 roku. Najczęściej stosowaną składnią Java w Android Development jest Java 6 (wersja 1.6), a Java 7 (wersja 1.7) jest również częściowo obsługiwana na edycja KitKat (Android 4.4. +). Dlatego funkcje Java 8, takie jak wyrażenia lambda, nie mogą być używane bezpośrednio w tworzeniu aplikacji na Androida bez zastosowania drobnych poprawek w narzędziach programistycznych. Na szczęście te konstrukcje są w zasadzie niektórymi ulepszeniami „cukru syntaktycznego”, które dają programistom wady takich rzeczy jak „anonimowe klasy” i mogą być przetłumaczone na klasy Java 6 lub Java 7.
Najnowsze podejście do tłumaczenia kodu źródłowego Java 8 na niższe wersje Java nazywa się RetroLambda . Ta biblioteka sprawia, że programiści uruchamiają kod Java 8 z wyrażeniami lambda na Javie 7 lub nawet niższej. Niestety funkcje Java 8 inne niż wyrażenia lambda nie są na razie obsługiwane przez RetroLambda, ale koncepcja wyrażeń lambda jest największym skokiem na platformie Java 8 i jest świetnym narzędziem dla programistów Androida.
Szczegóły dotyczące tej biblioteki można znaleźć na stronie GitHub:
https://github.com/orfjackal/retrolambda#getting-started
Ponadto wtyczka Gradle dla RetroLambda utworzona przez innego programistę umożliwia implementację kompilacji opartych na Gradle w projektach Java lub Android. Jednak deweloper wspomina tylko o integracji tej wtyczki ze środowiskiem Android Studio. Szczegóły można znaleźć na stronie GitHub:
https://github.com/evant/gradle-retrolambda
Korzystanie z tych infrastruktur w środowisku programistycznym opartym na środowisku Eclipse nie jest możliwe bezpośrednio, ale jest wykonalne i zostanie przedstawione w tym przewodniku.
Przygotowanie
W tym przewodniku założono, że czytelnik ma podstawową wiedzę na temat programowania w Androidzie i jest oparty na wersji 22.6.2 programu ADT, ponieważ wydaje się, że w najnowszej wersji 23.0.2 programu ADT występują problemy z tworzeniem folderów układu. Szczegółowe informacje na temat tego problemu można znaleźć pod następującym linkiem:
http://code.google.com/p/android/issues/detail?id=72591
Kroki w tym przewodniku zostaną podane dla 64-bitowej maszyny programistycznej Windows 8.1, ale można je łatwo dostosować do innych platform. Nowy system kompilacji Gradle
będzie wykorzystywany do procesów kompilacji / czyszczenia, a także zapewniona zostanie procedura instalacji. Ponadto, zarówno JDK 8
i JDK 7
muszą współistnieć na maszynie rozwoju. Aby je zainstalować, należy wykonać kroki podane poniżej:
- Przejdź do strony podglądu wczesnego dostępu JDK 8 http://jdk8.java.net
- Pobierz JDK 8u20 i zainstaluj go. Instalacja środowiska JRE 8 nie jest konieczna i można go pominąć
- Przejdź do strony najnowszej stabilnej wersji JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- Pobierz JDK 7u65 i zainstaluj go. Instalacja JRE 7 ponownie nie jest konieczna i można ją pominąć
- Dodaj folder domowy JDK 8 i folder JDK 8
bin
do swojej %PATH%
zmiennej
- Utwórz nową zmienną środowiskową
JAVA_HOME
o wartości ścieżki do folderu domowego JDK 8
- Utwórz
JAVA8_HOME
ponownie nową zmienną środowiskową z wartością ścieżki do folderu domowego JDK 8
- Utwórz nową zmienną środowiskową
JAVA7_HOME
o wartości ścieżki do folderu domowego JDK 7
- Otwórz okno terminala, uruchom
java -version
polecenie i sprawdź, czy Java 8 jest uruchomiona
- Uruchom
javac -version
komendę w tym samym oknie i sprawdź, czy kompilator Java JDK 8 jest również uruchomiony
Teraz ADT-22.6.2 należy pobrać z następującego linku:
http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip
- Pobierz ADT i rozpakuj jego zawartość do folderu, np
D:\adt
- Zdefiniuj nową zmienną środowiskową wywoływaną
ANDROID_HOME
z wartością ścieżki do folderu instalacyjnego ADT, npD:\adt\sdk
- Dodaj swoje
Andoid SDK Platform Tools
i Andoid SDK Tools
foldery, np. D:\adt\sdk\tools
I D:\adt\sdk\platform-tools
, do swojej %PATH%
zmiennej
- Jeśli chcesz, utwórz skrót do Eclipse IDE. Znajduje się w folderze instalacyjnym narzędzia ADT, np
D:\adt\eclipse
- Uruchom Eclipse IDE i utwórz przestrzeń roboczą, np
D:\adt\workspace
- Kliknij
Android SDK Manager
przycisk znajdujący się na pasku narzędzi
- Wybierz
Android SDK Build tools Rev. 19.1
i Android Support Library
tylko. Odznacz wszystko inne i zainstaluj te dwa pakiety.
Jeśli wszystko pójdzie dobrze, ADT uruchomi się.
Zdecydowanie zaleca się również instalację następujących narzędzi:
Obsługa Eclipse Kepler Java 8: Sprawia, że Eclipse rozpoznaje nowe rozszerzenia składni Java 8 i pozwala pozbyć się irytującego red dots
edytora kodu Java. Może być zainstalowany Help -> Install New Software
w Eclipse. Wpisz http://download.eclipse.org/eclipse/updates/4.3-P-builds/ w Work with
polu i kontynuuj instalację.
Nodeclipse / Enide Gradle: Służy głównie do wyróżnienia słów kluczowych w języku Groovy. Groovy jest używany jako DSL dla skryptów kompilacji Gradle. Wtyczkę można zainstalować za pośrednictwem Eclipse Marketplace
. Jednak Eclipse w ADT-22.6.2 nie występuje Eclipse Marketplace Client
. Dlatego najpierw musisz zainstalować Eclipse Marketplace Client
za pomocą Install New Software
narzędzia w Eclipse. Wpisz http //: download.eclipse.org/mpc/kepler/ w Work with
polu i kontynuuj instalację. Po zainstalowaniu Eclipse Marketplace Client
, można szukać Nodeclipse/Enide Gradle
w Eclipse Marketplace Client
i zainstalować go.
Genymotion Virtual Device: Jest to świetny zamiennik domyślnego oprogramowania Android Virtual Device
ADT. AVD jest denerwująco kłopotliwy i ciągle zawiesza się bez powodu. Genymotion pozwala przygotować Android VD za pomocą CyanogenMod
obrazów, które są wykonywane przez Oracle VirtualBox . Licencja dla jednego użytkownika jest bezpłatna i można ją pobrać ze strony http://www.genymotion.com . Wymagany jest tylko login i można go również zintegrować z Eclipse. Szczegóły można znaleźć pod:
https://cloud.genymotion.com/page/doc/#collapse8
Poniżej znajduje się zrzut ekranu urządzenia wirtualnego CyanogenMod z systemem Android 4.3,
Można to uznać za pełnoprawne urządzenie z Androidem działające na komputerze osobistym z procesorem x86 lub x64. Aby korzystać z usług Google, takich jak Google PlayStore
na tym urządzeniu wirtualnym, gapps
obraz używanej wersji Androida musi zostać flashowany na urządzeniu. Właściwy gapps
obraz urządzenia można pobrać ze strony CyanogenMod:
http://wiki.cyanogenmod.org/w/Google_Apps
Instalacja stopniowa jest opcjonalna, ponieważ zapewnia ją także sam zestaw SDK systemu Android, ale zdecydowanie zaleca się jej oddzielną instalację. Instalację można przeprowadzić, wykonując następujące kroki:
Aplikacja demonstracyjna
Zostanie utworzona prosta aplikacja, aby zademonstrować użycie narzędzi opisanych w poprzedniej sekcji. Możesz po prostu wykonać poniższe kroki, aby uzyskać wgląd w używanie wyrażeń lambda w Narzędziach dla programistów Androida:
- Uruchom Eclipse IDE i utwórz nową aplikację na Androida, wybierając
File -> New -> Other -> Android -> Android Application Project
- Wypełnij poniższy formularz, jak pokazano poniżej:
gradle_build.cmd:
gradle_post_build.cmd:
gradle_clean.cmd:
- Odznacz opcję
Project -> Build Automatically
menu
- Kliknij projekt prawym przyciskiem myszy, a następnie zaznacz
Properties -> Builders
i odznacz wszystkie domyślne programy budujące dostarczone przez ADT
- Kliknij
New
przycisk w tym samym oknie, wybierz Program
i kliknijOK
- Pojawi się okno konfiguracji nowego konstruktora. Wypełnij zakładki w następujący sposób:
Main
Karta nowej konfiguracji Konstruktora
Refresh
Karta nowej konfiguracji Konstruktora
Environment
Karta nowej konfiguracji Konstruktora
Build Options
Karta nowej konfiguracji Konstruktora
- Utwórz drugi konstruktor o nazwie,
Gradle_Post_Build
który używa gradle_post_build.cmd
jako swojego programu. Wszystkie pozostałe ustawienia tego konstruktora muszą być dokładnie takie same z poprzednio utworzonym konstruktorem. Ten konstruktor będzie odpowiedzialny za kopiowanie artefaktów utworzonych przez proces kompilacji do bin
folderu.
- Utwórz trzeci konstruktor o nazwie,
Gradle_Cleaner
który używa gradle_clean.cmd
jako programu. Tylko Run the builder
ustawienie na ostatniej karcie musi być ustawione jako During a Clean
. Wszystkie pozostałe ustawienia tego konstruktora muszą być identyczne z pierwszym konstruktorem. Ten konstruktor będzie odpowiedzialny za czyszczenie artefaktów utworzonych przez proces kompilacji, jak sugeruje nazwa.
Nowi budowniczowie HelloLambda
projektu
- Kliknij projekt prawym przyciskiem myszy i wybierz
Export
- Wybierz
Android -> Generate Gradle Build Files
i kliknijNext
- Wybierz projekt w następnym oknie i kliknij
Finish
- Przejdź do folderu głównego swojego projektu i usuń pliki
gradlew
oraz gradlew.bat
. Usuń także gradle
folder
- Wróć do Eclipse i wybierz
Project -> Clean
opcję menu. Wypełnij formularz, który pokazuje się w następujący sposób:
Clean Project
Okno
- Kliknij
OK
i poczekaj, aż proces czyszczenia się zakończy
- Dodaj fragment kodu Java podany poniżej zaraz po wywołaniu
setContentView
funkcji w swojej MainActivity
klasie:
- Zmień początek
build.gradle
pliku do sourceCompatibility
sekcji w następujący sposób:
- Kliknij projekt prawym przyciskiem myszy i wybierz
Properties -> Java Compiler
opcję i ustaw wszystkie poziomy zgodności na Java 8. Dzięki temu Eclipse rozpozna nowe konstrukcje Java 8, takie jak wyrażenia lambda.
- Kliknij
No
w oknie powiadomienia
- Kliknij projekt prawym przyciskiem myszy i wybierz
Build project
. Eclipse rozpocznie budowę projektu.
Proces kompilacji
Eclipse będzie teraz mógł rozpoznawać R.java
i buildConfig.java
pliki i nie będzie wyświetlał żadnych, red dots
które oznaczałyby błędy związane z plikami zasobów projektu.
- Utwórz nowy
Run Configuration
dla docelowej platformy Android, klikając projekt prawym przyciskiem myszy, a następnie wybierając Run As -> Run Configurations
. Na przykład ta aplikacja demonstracyjna wygląda tak, jak pokazano poniżej na Genymotion VD:
Aplikacja HelloLambda
W LogCat
oknie można zauważyć, że fragment kodu z prostym wyrażeniem lambda działa poprawnie
Źródło: Korzystanie z wyrażeń lambda Java 8 w narzędziach dla programistów Androida