Чи можливо використовувати Java 8 для розробки Android?


609

Шукаючи в Інтернеті, не зрозуміло, підтримується Java 8 для розробки Android чи ні.

Перед тим, як завантажувати / налаштовувати Java 8, може хтось вказати мені на будь-яку "офіційну" документацію, в якій сказано, що Java 8 є або не підтримується для розробки Android.


21
Я не знаю про офіційну заяву, але в мене Java 8 (редагувати: JDK 8) добре працює з Android SDK. Тут Windows 8.1 64 біт.
Hoang Huynh

2
У цій публікації відбулася дискусія. Як версія Java для Android стосується версії Java SE?
Абоального

2
@HoangHuynh ви можете використовувати JDK 6 або вище для розробки Android. Однак компіляція підтримує версію Java 6 (і 7 у випадку KitKat). Я думаю, що означає ОП також для версії java (не JDK)
waqaslam

13
Java 8 офіційно підтримується в Android N. android-developers.blogspot.com/2016/03/…
Jay

2
можливо, незабаром: developer.android.com/preview/j8-jack.html
Ray Tayek

Відповіді:


189

java 8

Android підтримує всі мовні функції Java 7 та підмножину мов Java 8, які залежать від версії платформи.

Щоб перевірити, які функції Java 8 підтримуються

Використовуйте мовні функції Java 8

Ми вирішили додати підтримку мовних функцій Java 8 безпосередньо в поточний набір інструментів javac і dx, а також знехтуємо ланцюжок інструментів Jack. У цьому новому напрямку існуючі інструменти та плагіни, залежні від формату файлів класу Java, повинні продовжувати працювати. Просуваючись вперед, функції мов Java 8 будуть підтримуватися наново вбудованою системою Android. Ми прагнемо запустити це як частина Android Studio в найближчі тижні, і ми хотіли поділитися цим рішенням з вами на початку.

Майбутнє підтримка мовної функції Java 8 на Android

Користувачі затемнення:

Для старих розробників, які віддають перевагу Eclipse, Google перестає підтримувати інструменти для розробників Eclipse Android

якщо ви встановили Java 8 JDK, спробуйте спробувати, якщо виникають проблеми, спробуйте встановити компілятор як 1.6 у Eclipse з меню вікна → НалаштуванняJavaКомпілятор . Java 7 також буде працювати:

Параметри затемнення -> Java -> Компілятор

Java 7 або новішої версії потрібна, якщо ви орієнтовані на Android 5.0 та новіші версії.

встановіть кілька JDK та спробуйте.


2
Чи змінила Java 8 спосіб роботи байт-коду? Якщо ні, теоретично слід використовувати будь-яку версію Java, доки вона компілюється.
Бен Леджієро

6
правильне питання: що, якщо ви використовуєте нові функції в java 8, не існує в java 7, щоб створити додаток для Android, це нормально? щоб бути в безпеці, дотримуйтесь офіційних інструкцій.
англ. Самер Т

12
@ BenC.R.Leggiero немає нового байткод в Java 8, але значення і структури виконання команд були змінені stackoverflow.com/questions/28228450 / ... stackoverflow.com/questions/16143684 / ...
phuclv

17
Будь ласка, не публікуйте "Оновити N" у своїй відповіді. Перепишіть його, щоб мати актуальну інформацію. В іншому випадку, через декілька років SO буде настільки складно отримати інформацію з форумів, які вона замінила.
Олександр Дубінський

1
Відповідь потрібно оновити. Воля Java 8 підтримується як для Android Studio 3.0, так і для Gradle Plugin 3.0.
Юрій Мазуревич

350

ОНОВЛЕННЯ 2017/11/04 - Android Studio 3.0 тепер має вбудовану підтримку Java 8. gradle-retrolambda тепер більше не потрібна. Дивіться https://developer.android.com/studio/write/java8-support.html

Наведене вище посилання також містить інструкції з міграції, якщо ви використовуєте gradle-retrolambda. Оригінальна відповідь нижче:


Android не підтримує Java 8. Він підтримує лише до Java 7 (якщо у вас є kitkat), і досі він не викликає динаміки, лише новий синтаксичний цукор.

Якщо ви хочете використовувати лямбда, одну з головних особливостей Java 8 в Android, ви можете використовувати gradle-retrolamba . Це залежність від gradile, яка інтегрує retrolambda, інструмент, який перетворює байт-код Java 8 назад в Java 6/7. В основному, якщо ви встановите компілятор в Android Studio для компіляції Java-байт-коду, таким чином дозволяючи лямбда, він перетворить його назад в байт-код Java 6/7, який згодом перетворюється на байткод дальвіка. Це хак для, якщо ви хочете спробувати деякі функції JDK 8 в Android замість офіційної підтримки.


13
Це було трохи боротьби, щоб він працював, але одного разу я насправді дотримувався правильних вказівок, він працював чудово. Примітка користувачам Eclipse: Eclipse не дуже добре справляється з цим, я пропоную перейти на Android Studio (я пропущу Eclipse, але це саме так має бути зараз!)
Simon Forsberg

2
Nitpick: Android-додатки не підтримують додаткові пропозиції з уловлюванням Java 7
csvan

11
Підтримується мульти-лов, лише функція JDK7, що не підтримується Android, є
пробною

12
Java 7 працює з усіма версіями Android. Один виняток: try-with-resourcesпрацює лише з Kitkat.
Дмитро Зайцев

2
@Simon André Forsberg (обережно: безсоромний штекер!) - що стосується непідтримки API потоку Java 8, ви можете скористатися моєю бібліотекою за адресою sourceforge.net/projects/streamsupport - вона явно стосується підтримки для Android.
Стефан Зобель

99

Ви можете дійсно використовувати gradle-retrolambaзалежність побудови gradle, щоб використовувати Java 8 для розробки Android.

Нижче наведено повне керівництво, яке я нещодавно дотримувався для запуску лямбда-виразів для розробки Android. Оригінальне джерело цього посібника згадується в кінці.

У цьому посібнику буде продемонстровано спосіб залучення деяких функцій Java 8 до Інструментів Android для розробки, зокрема, спрямованих на IDE Eclipse. Однак кроки, які будуть описані в цьому посібнику, також можуть бути адаптовані до нового середовища розробки повстання Google, Android Studio. Він заснований на спільному виданні популярного IntelliJ Idea IDE від JetBrains, і останнім часом оновлено до своєї «бета» версії Google на початку липня 2014 року, трохи до того, як цей посібник був написаний. Eclipse залишатиметься видатним середовищем розробки хоча б на деякий час, а враховуючи той факт, що більшість проектів Android розробляються за допомогою Eclipse, метод для введення нових функцій Java 8, таких як лямбда-вирази, в ADT здається досить корисним для розробників.

Android Development заснована на користувацькій реалізації Java під назвою Apache Harmony Project, яка була припинена ще в 2011 році. Найчастіше синтаксис Java в Android Development - це Java 6 (v1.6), а Java 7 (v1.7) також частково підтримується на видання KitKat (Android 4.4. +). Тому такі можливості Java 8, як лямбда-вирази, не можна використовувати безпосередньо в розробці додатків для Android, не застосовуючи певних змін у інструментах розробки. На щастя, ці конструкції - це в основному деякі «синтаксичні цукрові» удосконалення, які дають розробникам недоліки таких речей, як «анонімні класи», і вони можуть бути переведені на Java 6 або Java 7 класи.

Нещодавній підхід до перекладу вихідного коду Java 8 у нижчі версії Java називається RetroLambda . Ця бібліотека дозволяє розробникам запускати код Java 8 з лямбда-виразами на Java 7 або навіть нижче. На жаль, особливості Java 8, окрім лямбда-виразів, поки що не підтримуються RetroLambda, але концепція лямбда-виразів є найбільшим стрибком на платформі Java 8 і в будь-якому разі є чудовим інструментом для розробників Android.

Детальну інформацію про цю бібліотеку можна знайти на її сторінці GitHub:

https://github.com/orfjackal/retrolambda#getting-started

Також плагін Gradle для RetroLambda, створений іншим розробником, дозволяє реалізовувати побудови на основі Gradle в проектах Java або Android. Однак розробник згадує лише про інтеграцію цього плагіна в середовище Android Studio. Деталі можна знайти на його сторінці GitHub:

https://github.com/evant/gradle-retrolambda

До використання цих інфраструктур в середовищі розробки Eclipse не можна звернутися безпосередньо, але це можливо і буде показано в цьому посібнику.

Підготовка

У цьому посібнику передбачається, що читач має основне розуміння розробки Android, і він заснований на ADT версії 22.6.2, оскільки у недавньої версії ADT 23.0.2, схоже, є такі проблеми, як створення папки верстки. Детальну інформацію про цю проблему можна знайти за наступним посиланням:

http://code.google.com/p/android/isissue/detail?id=72591

Кроки в цьому посібнику будуть описані для Windows 8.1, 64-розрядної машини для розробки, але їх можна легко адаптувати до інших платформ. Нова система збірки Gradleбуде використовуватися для процесів збирання / очищення, а також буде встановлена ​​процедура її установки. Також обидва JDK 8і JDK 7повинні співіснувати на розробці машини. Щоб встановити їх, дотримуйтесь наведених нижче кроків:

  • Перейдіть на сторінку попереднього перегляду JDK 8 http://jdk8.java.net
  • Завантажте JDK 8u20 та встановіть його. Установка JRE 8 не потрібна, і її можна пропустити
  • Перейдіть на сторінку останнього стабільного випуску JDK 7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  • Завантажте JDK 7u65 та встановіть його. Установка JRE 7 знову не потрібна, і її можна пропустити
  • Додайте домашню папку JDK 8 та папку JDK 8 binдо %PATH%змінної
  • Створіть нову змінну середовища JAVA_HOMEзі значенням шляху до домашньої папки JDK 8
  • JAVA8_HOMEЗнову створіть нову змінну середовища зі значенням шляху до домашньої папки JDK 8
  • Створіть нову змінну середовища JAVA7_HOMEзі значенням шляху до домашньої папки JDK 7
  • Відкрийте вікно терміналу та запустіть java -versionкоманду та переконайтеся, що Java 8 працює та працює
  • Запустіть javac -versionкоманду в тому ж вікні та переконайтеся, що компілятор JDK 8 Java також працює та працює

Тепер ADT-22.6.2 потрібно завантажити з наступного посилання:

http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip

  • Завантажте ADT і розпакуйте його вміст у папку, наприклад D:\adt
  • Визначте нову змінну середовища, яка називається ANDROID_HOMEзі значенням шляху вашої інсталяційної папки ADT, наприкладD:\adt\sdk
  • Додати Andoid SDK Platform Toolsі Andoid SDK Toolsпапки, наприклад , D:\adt\sdk\toolsі D:\adt\sdk\platform-tools, до вашої %PATH%змінної
  • Створіть ярлик для ID Eclipse, якщо вам подобається. Він знаходиться під папкою установки ADT, наприкладD:\adt\eclipse
  • Запустіть Eclipse IDE і створіть робочу область, наприклад D:\adt\workspace
  • Натисніть на Android SDK Managerкнопку, яка знаходиться на панелі інструментів
  • Виберіть Android SDK Build tools Rev. 19.1і Android Support Libraryтільки. Скасуйте вибір всього іншого та встановіть ці два пакети.

Якщо все піде добре, ADT буде працювати.

Настійно рекомендується встановлення наступних інструментів:

  • Підтримка Eclipse Kepler Java 8: Це робить Eclipse розпізнавати нові розширення синтаксису Java 8 і змушує вас позбутися роздратування red dotsв редакторі коду Java. Це може бути встановлено через Help -> Install New SoftwareEclipse. Введіть http://download.eclipse.org/eclipse/updates/4.3-P-builds/ у Work withполе та продовжуйте його встановлювати.

  • Nodeclipse / Enide Gradle: в основному використовується для виділення ключових ключових слів Groovy. Groovy використовується як DSL для сценаріїв побудови Gradle. Цей плагін можна встановити наскрізь Eclipse Marketplace. Однак Eclipse в межах ADT-22.6.2 не поєднується з Eclipse Marketplace Client. Тому спочатку потрібно буде встановитиEclipse Marketplace Client за допомогою Install New Softwareінструменту Eclipse. Введіть http //: download.eclipse.org/mpc/kepler/ у Work withполе та продовжуйте його встановлювати. Після установки Eclipse Marketplace Clientви можете шукати Nodeclipse/Enide Gradleв Eclipse Marketplace Clientі встановити його.

  • Віртуальний пристрій Genymotion: це чудова заміна за замовчуванням, Android Virtual Deviceякий поставляється разом з ADT. AVD дратує громіздкий, і він продовжує працювати без збоїв. Genymotion змушує вас готувати Android VD, використовуючи CyanogenModзображення, які виконуються Oracle VirtualBox . Його єдину ліцензію користувача безкоштовно, і її можна завантажити з http://www.genymotion.com . Потрібно лише логін, який також може бути інтегрований у Eclipse. Деталі можна знайти в:

https://cloud.genymotion.com/page/doc/#collapse8

Нижче - скріншот віртуального пристрою CyanogenMod на базі Android 4.3,

введіть тут опис зображення

Це може вважатися повноцінним пристроєм Android, який працює на персональному комп'ютері на базі x86 або x64. Для використання служб Google, таких як Google PlayStoreна цьому віртуальному пристрої, agapps повинно прошиватися зображення для версії Android, яку він використовує. Належне gappsзображення для пристрою може бути завантажено з веб-сайту CyanogenMod:

http://wiki.cyanogenmod.org/w/Google_Apps

Встановлення Gradle необов’язкове, оскільки воно також передбачене самим Android SDK, але настійно рекомендується його окрема установка. Установка його може бути проведена, виконавши наступні кроки:

  • Перейдіть на веб-сайт Gradle: http://www.gradle.org/

  • Клацніть Downloads

  • За Previous Releasesвибором версії 1.10 та завантажуйте або gradle-1.10-all.zip або gradle-1.10-bin.zip
  • Розпакуйте його вміст у папку, наприклад D:\adt\gradle
  • Визначте нову змінну середовища, яка називається GRADLE_HOMEзі значенням шляху вашої інсталяційної папки Gradle, наприкладD:\adt\gradle
  • Додайте папку бінарних файлів Gradle, наприклад D:\adt\gradle\bin, у свою %PATH%змінну
  • Відкрийте вікно терміналу та запустіть gradle -vкоманду та переконайтеся, що воно працює та працює. Якщо ви до цього часу досягли успіху, то це означає, що ви готові створити свій перший Android-додаток за допомогою функцій Java 8.

Демо-додаток

Буде створено просте додаток для демонстрації використання інструментів, описаних у попередньому розділі. Ви можете просто виконати наведені нижче кроки, щоб отримати детальну інформацію про використання лямбда-виразів в Інструментах для розробників Android:

  • Запустіть Eclipse IDE та створіть нову програму для Android, вибравши File -> New -> Other -> Android -> Android Application Project
  • Заповніть форму, що з’являється, як показано нижче:

введіть тут опис зображення

  • Просто натисніть на Next кнопку на наступних бланках і натисніть Finishкнопку на останній. Зачекайте, поки ADT закінчить завантаження проекту
  • Клацніть правою кнопкою миші на проект і виберіть його New -> Folderта назви йогоbuilders
  • Клацніть правою кнопкою миші gen (Generated Java Files)папку та видаліть її. Gradle скоро генерує ті самі файли для нас, і ми додамо їх у s build path. Theпапку gen gen` проекту, створену за замовчуванням будівельника мурашок, більше не потрібні, і артефакти в цій папці будуть застарілими
  • Створіть у buildersпапці такі пакетні файли :

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Заповніть ці пакетні файли наступним чином:

gradle_build.cmd:

введіть тут опис зображення

gradle_post_build.cmd:

введіть тут опис зображення

gradle_clean.cmd:

введіть тут опис зображення

  • Скасувати вибір Project -> Build Automatically меню
  • Клацніть правою кнопкою миші на проект і виберіть Properties -> Builders та зніміть вибір усіх будівельників за замовчуванням, наданих ADT
  • Клацніть Newкнопку в тому ж вікні і виберіть Programі натисніть кнопкуOK
  • З'явиться нове вікно конфігурації розробника. Заповніть її вкладки наступним чином:

Main Вкладка нової конфігурації Builder

введіть тут опис зображення

Refresh Вкладка нової конфігурації Builder

введіть тут опис зображення

Environment Вкладка нової конфігурації Builder

введіть тут опис зображення

Build Options Вкладка нової конфігурації Builder

введіть тут опис зображення

  • Створіть другий називний конструктор, Gradle_Post_Buildякий використовує gradle_post_build.cmdяк свою програму. Усі інші налаштування цього конструктора повинні точно збігатися з створеним раніше конструктором. Цей розробник несе відповідальність за копіювання артефактів, створених процесом збирання, уbin папку.
  • Створіть третій конструктор, який називається, Gradle_Cleanerякий використовує gradle_clean.cmdяк свою програму. Тільки Run the builderналаштування на кінцевій вкладці повинно бути встановлено як During a Clean. Усі інші налаштування цього конструктора повинні точно збігатися з першим конструктором. Цей будівельник несе відповідальність за очищення артефактів, створених процесом збирання, як випливає з назви.

Нові будівельники HelloLambdaпроекту

введіть тут опис зображення

  • Клацніть правою кнопкою миші на проект і виберіть Export
  • Виберіть Android -> Generate Gradle Build Filesі натиснітьNext
  • Виберіть проект у наступному вікні та натисніть Finish
  • Перейдіть до кореневої папки вашого проекту та видаліть файли gradlewта gradlew.bat. Також видаліть gradleпапку
  • Поверніться назад до Eclipse та виберіть Project -> Cleanваріант меню. Заповніть форму, яка відображається наступним чином:

Clean Project Вікно

введіть тут опис зображення

  • Клацніть OKі зачекайте, поки процес очищення завершиться
  • Додайте фрагмент коду Java, наведений нижче, відразу після дзвінка, щоб setContentViewфункціонувати у вашому MainActivityкласі:

введіть тут опис зображення

  • Змініть початок build.gradleфайлу до sourceCompatibilityрозділу так:

введіть тут опис зображення

  • Клацніть правою кнопкою миші на проект і виберіть Properties -> Java Compilerпараметр і встановіть всі рівні відповідності Java 8. Це дозволить Eclipse розпізнавати нові конструкції Java 8, як лямбда-вирази.
  • Клацніть Noу вікні сповіщень
  • Клацніть правою кнопкою миші на проект і виберіть Build project. Eclipse почне будувати проект.

Процес побудови введіть тут опис зображення

  • Клацніть правою кнопкою миші на проект та перейдіть до Properties -> Java Build Path. Додайте наступні папки до шляху збирання (також показано на зображенні нижче):

    • build\source\buildConfig\debug
    • build\source\r\debug

введіть тут опис зображення

Eclipse тепер зможе розпізнавати R.javaта buildConfig.javaфайли, і він не відображатиме жодних, red dotsщо позначають помилки, пов’язані з файлами ресурсів проекту.

  • Створіть нову Run Configurationдля своєї цільової платформи Android, клацнувши правою кнопкою миші на проект, а потім виберіть Run As -> Run Configurations. Наприклад, цей демонстраційний додаток виглядає так, як показано нижче на VD Genymotion:

Приклад HelloLambda

введіть тут опис зображення

Ви можете помітити у LogCatвікні, що фрагмент коду з простим лямбда-виразом працює належним чином

введіть тут опис зображення

Джерело: Використання Java 8 Lambda Expressions в інструментах для розробників Android


Але чи зможете ви налагодити цей код за допомогою налагоджувача Android? Номери стеків / рядків не були б сумісні. Здається, головним недоліком є ​​розвиток Java 8 на Android.
Зомбі

2
@Zombies Так, ви все ще можете це налагодити. Все працює просто чудово.
Корнільцев Анатолій

42

Перейдіть за цим посиланням, щоб отримати нові оновлення. Використовуйте мовні функції Java 8

Стара відповідь

На момент випуску попереднього випуску Android N Android підтримує обмежені можливості Java 8, див. Мовні функції Java 8

Щоб почати користуватися цими функціями, потрібно завантажити та налаштувати Android Studio 2.1 та Android N Preview SDK, що включає необхідну інструментальну ланцюг Jack та оновлений плагін Android для Gradle. Якщо ви ще не встановили Android N Preview SDK см Набір для розробки для Android N .

Підтримувані функції Java 8 Language та API

Наразі Android не підтримує всі можливості Java 8. Однак при розробці програм, орієнтованих на Android N Preview, тепер доступні такі функції:

Методи інтерфейсу за замовчуванням та статичні

Лямбда-вирази (також доступні на рівні API 23 і нижче)

Повторні примітки

Посилання на метод (також доступні на рівні API 23 і нижче)

Є кілька додаткових функцій Java 8, які підтримує Android, ви можете ознайомитись із усіма деталями з мовних функцій Java 8

Оновлення

Примітка: Android N спирається на реалізацію лямбда-виразів на анонімних класах. Такий підхід дозволяє їм бути сумісними назад і виконуватись у попередніх версіях Android. Щоб перевірити лямбда-вирази на більш ранніх версіях, не забудьте перейти до файлу build.gradle та встановіть compileSdkVersion та targetSdkVersion на 23 або нижчі.

Оновлення 2

Тепер Android Studio 3.0 стабільного випуску підтримує бібліотеки Java 8 та мовні можливості Java 8 (без компілятора Jack).


Я чогось не зрозумів. Чи є якась вимога щодо minSdkVersion?
WindRider

Я думаю, що лише лямбда-вирази зворотно сумісні, інші функції Java 8 працюватимуть лише на N (або в майбутній версії). Я цього не тестував, але це я розумію в документах Android. Так, для Java 8 функціями minSdkVersion є N, крім лямбда-виразу

Отже ... ще кілька років, поки N стане лідером на панелі приладів. :(
WindRider

На жаль, так. або поки Android якось не забезпечить зворотну сумісність, як лямбда

1
@WindRider, ви можете використовувати minSdkVersion 15 і вище. Наразі я використовую minSdkVersion 17 у своєму Android-проекті з Lambdas, і все працює.
YYamil

22

Так, Android підтримує Java 8 зараз (24.1.17)

Тепер це можливо

Але вам потрібно, щоб ваш пристрій rom запустився на java 1.8 та включив "jackOptions" для його запуску. Джек - назва нового компілятора Android, який працює з Java 8

https://developer.android.com/guide/platform/j8-jack.html

додайте ці рядки до build_gradle

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8, здається, працює двигуном java Android студії 2.0, але він все ще не приймає синтаксис java 8 після того, як я перевірив, і ви не можете обрати компілятор з андроїд-студії зараз. Однак ви можете використовувати плагін Scala, якщо вам потрібен функціональний механізм програмування у вашому клієнті Android.

введіть тут опис зображення


1
Scala буде дуже важким для упаковки з apk
TechSpellBound

Зверніться до цього рішення для оновленої андроїд-студії 2.0, оскільки вони оновлювали обмежені параметри конфігурації.
Gaurav Sharma

19

Android використовує Java, яка відгалужується від Java 6.

Що стосується Android SDK версії 19, ви можете використовувати функції Java 7 , роблячи це . Немає повної підтримки Java 8 (поки що).


1
ти рятівник. Чи знаєте ви, чи є щось таке, що подібним чином реалізовувало б тест-ресурси?
Галети

@galets поки немає можливості, але я б став би на Google, додавши його в якийсь момент в майбутньому. Додаткова інформація, см: stackoverflow.com/questions/16921337 / ...
chaqke

16

Рідна Java 8 прибуває на андроїд! Нарешті!

видаліть плагін Retrolambda та блок retrolambda з файлу build.gradle кожного модуля:

Щоб вимкнути Джек і перейти на ланцюжок інструментів за замовчуванням, просто видаліть блок jackOptions з файлу build.gradle модуля

Щоб почати використовувати підтримувані функції Java 8, оновіть плагін Android до 3.0.0 (або новішої)

Починаючи з Android Studio 3.0, функції Android 8 мови тепер підтримуються Android:

  • Лямбда-вирази
  • Посилання на метод
  • Введіть анотації (на даний момент інформація про анотації недоступна під час виконання, а лише під час компіляції);
  • Повторення приміток
  • Методи інтерфейсу за замовчуванням та статичний інтерфейс (на рівні API 24 або вище, без підтримки миттєвого запуску через);

Також з рівня min min API доступні наступні Java 8 API:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType (Class)
  • java.lang.reflect.Method.isDefault ()

Додайте ці рядки до build.gradle модуля програми, щоб повідомити про проект мовного рівня:

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

Вимкніть підтримку мовних функцій Java 8, додавши до файлу gradle.properties наступне :

android.enableDesugar=false

Ви закінчили! Тепер ви можете використовувати рідну java8!


14

Android ОФІЦІЙНО підтримує Java 8 від Android N.

Оголошення про функції тут , мова Java 8:

Покращена підтримка мови Java 8 - Ми раді принести функції мови 8 для Android на Android. За допомогою компілятора Android Jack Jack тепер ви можете використовувати безліч популярних мов Java 8, включаючи лямбдати та багато іншого, для версій Android аж до Пряників. Нові функції допомагають зменшити код котла. Наприклад, лямбда можуть замінити анонімні внутрішні класи при наданні слухачам подій. Деякі функції мови Java 8 - як стандартні, так і статичні методи, потоки та функціональні інтерфейси - тепер також доступні для версій N та вище. З Джеком ми з нетерпінням чекаємо більш уважного відстеження мови Java, зберігаючи зворотну сумісність.


На сьогоднішній день він все ще досить баггі, наприклад, Instant Run не працює з лямбдами: якщо ви зміните якийсь код всередині своєї лямбда-функції, він не зміниться.
adriendenat

12

Ми можемо використовувати Java 8, використовуючи:

  1. У build.gradle (Project: myProject) додайте наступне

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
  2. У build.gradle (Модуль: myModule) додайте наступне

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

1
Що відрізняється від першої відповіді, яку рекомендував ретро лямбда?
Maarten Bodewes

2
@MaartenBodewes Здається, це вказувало, що це стало набагато простіше, ніж прийнята відповідь. Перегляньте medium.com/android-news/…
TechSpellBound

Не використовуйте його. Плагін баггі
Akshay Mukadam

11

ОНОВЛЕННЯ 2020/01/17

Android Studio 4.0 включає підтримку використання декількох API Java 8 мови, використовуючи техніку, яку називають знеструмленням, не вимагаючи мінімального рівня API для вашого додатка:
https://developer.android.com/studio/preview/features#j8-desugar

У цьому випуску підтримується такий набір API:

  • Послідовні потоки ( java.util.stream)
  • Підмножина java.time
  • java.util.function
  • Останні доповнення до java.util.{Map,Collection,Comparator}
  • Optionals ( java.util.Optional, java.util.OptionalIntі java.util.OptionalDouble) і деякі інші нові класи корисного із зазначеним вище API ,
  • Деякі доповнення до java.util.concurrent.atomic(нові методи на AtomicInteger, AtomicLongі AtomicReference)
  • ConcurrentHashMap (із виправленнями помилок для Android 5.0)

Для підтримки цих мовних API, D8 збирає окремий файл DEX бібліотеки, який містить реалізацію відсутніх API та включає його у вашу програму. Процес знежирення переписує код програми, щоб замість цього використовувати цю бібліотеку під час виконання.

Щоб увімкнути підтримку цих мовних API, включіть у build.gradleфайл вашого модуля наступне :

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}

ОРИГІНАЛЬНА ПОСТА З 2017 року

Android Studio 3.0 почав надавати вбудовану підтримку деяких функцій мови 8, а саме:

  • Лямбда-вирази
  • Посилання на метод
  • Анотації типу (інформація доступна під час компіляції, але не під час виконання)
  • Повторення приміток
  • Методи інтерфейсу за замовчуванням та статичні

Також, починаючи з рівня 24 API, доступні наступні Java 8 API:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

Крім того, try-with-resourcesпідтримка була розширена на всі рівні Android API.

Більше Java 8 функцій обіцяють додати в майбутньому.

Щоб почати використовувати підтримувані функції Java 8, оновіть плагін Android на 3.0.0-alpha1 (або вище) та додайте у файл build.gradle вашого модуля наступне:

android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Для отримання більш детальної інформації відвідайте:
https://developer.android.com/studio/write/java8-support.html


Що я не отримую - це те, що стосується андроїд-студії до підтримки java8 (не мав її раніше)? Чи означає це, що якщо я використовую gradle на терміналі, щоб скомпілювати проект, він не збирається збирати ?!
cesarferreira

1
@cesarferreira Потрібно оновити плагін Android до останньої версії (яка є на даний момент 2.4.0-alpha6). Перевірте блок відповідей у ​​відповіді.
Ідолон

Додавання його до модуля (не додатка), над яким я працюю, було впійманням. Додавання до модуля додатків не допомогло.
Суреха

6

Легкий шлях

Ви можете включити підтримку java 1.8 для проекту Android.

  • Відкрита структура проекту

    • Або натисканням Ctrl + Shift + Alt + S

    • Або File > Project Structure

  • Оновіть сумісність джерела та цільову сумісність до 1,8 у діалоговому вікні Структура проекту, як показано (натисніть Файл> Структура проекту).

зображення

Або ви можете використовувати градел

 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }

Синхронізувати проект. І це все!

Примітка: Підтримка Java 1.8 може бути включена для Android Studio 3.0.0 або новішої версії . Див. Документацію для подальшого читання.


Це рішення працює для мене: stackoverflow.com/a/55467237/4698320
Датська Шарма

5

Коли я поставив це питання майже 2 роки тому, відповідь справді була "офіційно" ні, але, як вказується у відповіді ekcr1, ви можете отримати одну з найбільш очікуваних особливостей (лямбда) для роботи, якщо використовувати ретроламбу. У той час я ще використовував затемнення, оскільки Android Studio знаходився в режимі "попереднього перегляду", тому я ніколи не йшов за цим шляхом.

Сьогодні я вважаю, що «офіційна» відповідь все ще ні, і хоча ретроламба все ще здається хорошим шляхом, для бажаючих спуститися трохи «неофіційним» маршрутом може бути інший варіант, а саме Котлін.

Сьогодні Котлін досяг 1,0,0. Для тих, хто не знайомий з Котліном, більше інформації можна знайти на їхньому веб-сайті, знайденому тут:

https://kotlinlang.org

або дивіться це відео з утуби із розмови Джейка Уортона

https://www.youtube.com/watch?v=A2LukgT2mKc


4

Останні новини:

Google оголошує, що за допомогою Android N та Android Studio 2.1+ платформа підтримуватиме Java 8. Також була випущена стабільна версія студії 2.1.

Нарешті ми можемо використовувати лямбда-вирази. Більше не фільтр списку для циклу. Хорі.


4

Додайте цей конфігурацію build.gradle та синхронізуйте gradle:

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

1
Це правильний спосіб додати підтримку Java 8 для проектів Android. Мінус полягає в тому, що миттєвий запуск в даний час не запускається при включенні гнізда.
Іонут Негру

Не повну підтримку.
Ахмад Агазаде

2

Google щойно оголосив, що Java 8 буде підтримуватися Android на самому всьому світі, і що інструмент Джека застаріє:

Ми вирішили додати підтримку мовних функцій Java 8 безпосередньо в поточний набір інструментів javac і dx, а також знехтуємо ланцюжок інструментів Jack. У цьому новому напрямку існуючі інструменти та плагіни, залежні від формату файлів класу Java, повинні продовжувати працювати. Просуваючись вперед, функції мов Java 8 будуть підтримуватися наново вбудованою системою Android. Ми прагнемо запустити це як частина Android Studio в найближчі тижні, і ми хотіли поділитися цим рішенням з вами на початку.

Детальніше тут: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

Так. Ми скоро скористаємося Java 8!

Ми вирішили додати підтримку мовних функцій Java 8 безпосередньо в поточний набір інструментів javac і dx, а також знехтуємо ланцюжок інструментів Jack. У цьому новому напрямку існуючі інструменти та плагіни, залежні від формату файлів класу Java, повинні продовжувати працювати. Просуваючись вперед, функції мов Java 8 будуть підтримуватися наново вбудованою системою Android. Ми прагнемо запустити це як частина Android Studio в найближчі тижні, і ми хотіли поділитися цим рішенням з вами на початку.

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html


2

додайте цей рядок у модуль lvl build gradel

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }


1

Я написав подібну відповідь на аналогічне запитання про Stack Overflow, але ось частина цієї відповіді.

Android Studio 2.1:

Нова версія Android Studio (2.1) має підтримку функцій Java 8. Ось витяг із публікації на блозі розробників Android :

... Реліз Android Studio 2.1 включає підтримку нового компілятора Jack та підтримку Java 8 .

...

Щоб використовувати можливості мови Java 8 при розробці за допомогою попереднього перегляду N Developer, потрібно використовувати компілятор Jack. Новий майстер проекту [Файл → Новий → Проект] створює правильні конфігурації для проектів, орієнтованих на N.


До Android Studio 2.1:

Android поки не підтримує Java 1.8 (підтримує лише до 1.7), тому ви не можете використовувати функції Java 8, такі як лямбда.

Ця відповідь дає більш детальну інформацію про сумісність Android Studio ; в ньому зазначено:

Якщо ви хочете використовувати лямбда, одну з головних особливостей Java 8 в Android, ви можете використовувати gradle-retrolamba

Якщо ви хочете дізнатися більше про використання gradle-retrolambda, ця відповідь дає багато деталей щодо цього .


Привіт Farbod! Я використовую AndroidStudio 2.2.2 Мій "SDK Location"(це на Mac FWIW) просто говорить "/Users/me/Library/Android/sdk" Чи я використовую Java8 - як користуватися Java8 ?? Дякую!
Fattie

1

Я подумав, що опублікую оновлену відповідь для тих, хто шукає щось трохи більш актуальне.

Наразі Android та Android Studio підтримують підмножину функцій Java 8. Відповідно до документації на Android, розміщеної на їхньому веб-сайті , Google говорить:

Підтримка мов Java 8 вимагає нового компілятора під назвою Jack. Джек підтримується лише в Android Studio 2.1 і новіших версій. Тож якщо ви хочете використовувати мовні функції Java 8, вам потрібно скористатися Android Studio 2.1 для створення програми.

Якщо у вас вже встановлена ​​Android Studio, переконайтеся, що ви оновите до останньої версії, натиснувши Довідка> Перевірити наявність оновлень (на Mac, Android Studio> Перевірити наявність оновлень). Якщо у вас ще не встановлено IDE на робочій станції, завантажте тут Android Studio.

Підтримувані функції Java 8 Language та API

Android не підтримує всі мови Java 8. Однак при розробці програм, орієнтованих на Android 7.0 (рівень API 24), доступні такі функції:

  • Методи інтерфейсу за замовчуванням та статичні вирази лямбда (також доступні на рівні API 23 та нижче)
  • Повторні примітки
  • Посилання на метод (також доступні на рівні API 23 і нижче)
  • Введіть анотації (також доступні на рівні API 23 і нижче)

Крім того, доступні також такі API Java 8 мови:

API-відображення та пов'язані з мовою:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault () та рефлексійні API, пов'язані з повторюваними анотаціями, такими як AnnotatedElement.getAnnotationsByType (Class)

API утиліти:

  • java.util.function
  • java.util.stream

Для використання нових можливостей мови Java 8 вам також потрібно використовувати інструментальну ланцюг Jack . Цей новий інструментальний ланцюг Android збирає джерела мови Java у байт-коді DEX, який читається на Android, має власний формат бібліотеки .jack та надає більшість функцій ланцюга інструментів як частину одного інструменту: перепакування, скорочення, затухання та мультидекс.

Ось порівняння двох ланцюжків інструментів, які використовуються для створення файлів Android DEX:

Legacy javac toolchain:
    javac (.java  .class)  dx (.class  .dex)
    New Jack toolchain:
    Jack (.java  .jack  .dex)

1

Я задавав це питання більше 3 років тому, і явно відповіді змінилися за ці роки. Як уже було сказано вище, станом на колись тому відповідь стала Так . Я ніколи не оновлював прийняту відповідь, тому що це була правильна відповідь на той час. (Я не впевнений, що стосується політики переповнення стека)

Я просто хотів додати ще одну відповідь для тих, хто ще шукає цю тему. Станом на 17.05.2017 Google також оголосив, що Kotlin також є офіційною мовою для розробки Android.

Я не знайшов офіційного прес-релізу, але я переглянув деякі відео з вводу / виводу Google, де це було оголошено. Ось посилання на блог пост командою Котлин на оголошення.


1

Додавання наступного вирішило проблему для мене (Android studio 2.3.2):

build.gradle (проект)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle (Модуль: додаток)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}

1

Підмножина Java 8 зараз підтримується в Android Studio. Просто внесіть коригування сумісності джерел і цілей у вікно нижче:

Файл -> Структура проекту

Вікно коригування

Більше інформації наведено за посиланням нижче.

https://developer.android.com/studio/write/java8-support.html


1

ОНОВЛЕННЯ 2019/10/28

Android Studio 4.0 вирішує цю проблему .

Компілятор D8 виправляє під час компіляції резервний порт API рідних Java 8 у ваш APK, і ваша програма використовуватиме цей код замість натільних API під час виконання. Процес називається знежиренням .


0

Усі вищезазначені рішення, схоже, не працюють у 2019 році з останньою Android Studio 3.4+ .

Я зрозумів ідеальне і сучасне рішення для міграції або оновлення вашого Android Project до Java 8 .

Рішення: Клацніть на Файл -> Структура проекту -> Модулі -> Вкладка Властивості .

Змініть сумісність джерела та цільову сумісність на 1,8 (Java 8)

введіть тут опис зображення



-1

Найпростіший спосіб додати підтримку Java 8

 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }

Просто додайте його у свій файл build.gradle.


Дубльований відповідь, низька якість
JanPl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.