Можно ли использовать Java 8 для разработки под Android?
При поиске в Интернете неясно, поддерживается ли Java 8 для разработки под Android или нет.
Прежде чем я скачаю / настрою Java 8, может кто-нибудь указать мне на "официальную" документацию, в которой говорится, что Java 8 поддерживается или не поддерживается для разработки под Android.
28 ответов
Ява 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 Users:
Для старых разработчиков, которые предпочитают Eclipse, Google перестает поддерживать инструменты разработчика Eclipse Android
если вы установили Java 8 JDK, то попробуйте, если возникнут какие-либо проблемы, попробуйте установить компилятор как 1.6 в Eclipse из меню окна → Настройки → Java → Компилятор. Java 7 тоже будет работать:
Java -> Компилятор">
Java 7 или выше требуется, если вы ориентируетесь на Android 5.0 и выше.
установите несколько JDK и попробуйте.
ОБНОВЛЕНИЕ 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), и при этом у него нет invokedynamic, только новый синтаксический сахар.
Если вы хотите использовать лямбды, одну из основных функций Java 8 в Android, вы можете использовать gradle-retrolamba. Это зависимая сборка, которая объединяет retrolambda, инструмент, который преобразует байт-код Java 8 обратно в Java 6/7. По сути, если вы настроите компилятор в Android Studio на компиляцию байт-кода Java 8, тем самым разрешив лямбду, он преобразует его обратно в байт-код Java 6/7, который затем, в свою очередь, преобразуется в байт-код dalvik. Это хак, если вы хотите попробовать некоторые функции JDK 8 в Android вместо официальной поддержки.
Вы действительно можете использовать gradle-retrolamba
Зависимость сборки Gradle для использования Java 8 для разработки Android.
Ниже приведено полное руководство, которому я недавно следовал при запуске лямбда-выражений для разработки под Android. Первоначальный источник этого руководства упоминается в конце.
В этом руководстве будет продемонстрирован метод добавления некоторых функций Java 8 в Инструменты разработки Android, специально предназначенные для Eclipse IDE. Однако шаги, которые будут описаны в этом руководстве, также могут быть адаптированы к новой среде разработки восстания Google, Android Studio. Он основан на общедоступной версии популярной среды разработки IntelliJ Idea от JetBrains, и недавно он был обновлен до своей "бета-версии" компанией Google в начале июля 2014 года, незадолго до написания этого руководства. Eclipse останется выдающейся средой разработки, по крайней мере, на некоторое время, и с учетом того факта, что большинство проектов Android были разработаны с использованием Eclipse, метод добавления новых функций Java 8, таких как лямбда-выражения, в ADT представляется весьма полезным для разработчиков.
Разработка Android основана на пользовательской реализации Java под названием Apache Harmony Project, которая была прекращена еще в 2011 году. Наиболее часто используемый синтаксис Java в разработке Android - это 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
Кроме того, плагин 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/issues/detail?id=72591
Шаги в этом руководстве будут даны для 64-битной машины для разработки под Windows 8.1, но их можно легко адаптировать к другим платформам. Новая система сборки 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%
переменная - Создайте ярлык для Eclipse IDE, если хотите. Он находится в папке установки 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 Software
в затмении. Введите 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 Virtual Device: это отличная замена по умолчанию
Android Virtual Device
который идет вместе с ADT. AVD раздражающе громоздок и продолжает падать без всякой причины. Genymotion заставляет вас готовить Android VD с помощьюCyanogenMod
образы, которые выполняются Oracle VirtualBox. Его однопользовательская лицензия бесплатна, и ее можно скачать с http://www.genymotion.com/. Требуется только логин, и он также может быть интегрирован в Eclipse. Подробности можно найти под:
https://cloud.genymotion.com/page/doc/
Ниже приведен скриншот виртуального устройства CyanogenMod на базе Android 4.3,
Его можно рассматривать как полноценное устройство Android, работающее на персональном компьютере на базе x86 или x64. Для того, чтобы использовать сервисы Google, такие как Google PlayStore
на этом виртуальном устройстве gapps
изображение для используемой версии 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`, созданная по умолчанию Ant Builder, больше не нужна, и артефакты в этой папке будут устаревшими Создайте следующие командные файлы под
builders
папка:- gradle_build.cmd
- gradle_post_build.cmd
- gradle_clean.cmd
Заполните эти командные файлы следующим образом:
gradle_build.cmd:
gradle_post_build.cmd:
gradle_clean.cmd:
- Un-выберите
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
, Затмение начнет строить проект.
Процесс сборки
Щелкните правой кнопкой мыши на проекте и перейдите к
Properties -> Java Build Path
, Добавьте следующие папки в путь сборки (также показано на рисунке ниже):build\source\buildConfig\debug
build\source\r\debug
Затмение теперь сможет распознавать R.java
а также buildConfig.java
файлы, и он не будет отображать какие-либо red dots
которые обозначают ошибки, связанные с файлами ресурсов проекта.
- Создать новый
Run Configuration
для целевой платформы Android, щелкнув правой кнопкой мыши по проекту и выбравRun As -> Run Configurations
, Например, это демонстрационное приложение выглядит, как показано ниже на Genymotion VD:
Приложение HelloLambda
Вы можете наблюдать в LogCat
окно, что фрагмент кода с простым лямбда-выражением работает правильно
Источник: Использование лямбда-выражений Java 8 в инструментах разработчика Android
Перейдите по этой ссылке для новых обновлений. Используйте возможности языка Java 8
Старый ответ
Начиная с версии предварительного просмотра Android N Android поддерживает ограниченные функции Java 8, см. Java 8 Language Features
Чтобы начать использовать эти функции, вам необходимо загрузить и настроить Android Studio 2.1 и Android N Preview SDK, который включает в себя необходимый набор инструментов Jack и обновленный плагин Android для Gradle. Если вы еще не установили Android N Preview SDK, см. Раздел "Настройка для разработки для Android N".
Поддерживаемые языковые функции и API Java 8
Android в настоящее время не поддерживает все функции языка Java 8. Однако при разработке приложений для Android N Preview теперь доступны следующие функции:
Стандартные и статические методы интерфейса
Лямбда-выражения (также доступны на уровне API 23 и ниже)
Ссылки на метод (также доступны на уровне API 23 и ниже)
Есть некоторые дополнительные функции Java 8, которые поддерживают Android, вы можете увидеть полную информацию о Java 8 Language Features
Обновить
Примечание: Android N основывает свою реализацию лямбда-выражений на анонимных классах. Такой подход позволяет им быть обратно совместимыми и исполняемыми на более ранних версиях Android. Чтобы проверить лямбда-выражения в более ранних версиях, не забудьте перейти к файлу build.gradle и установить для compileSdkVersion и targetSdkVersion значение 23 или ниже.
Обновление 2
Теперь стабильная версия Android Studio 3.0 поддерживает библиотеки Java 8 и функции языка Java 8 (без компилятора Jack).
Да, Android теперь поддерживает Java 8 (24.1.17)
Теперь это возможно
Но вам нужно, чтобы ваше устройство работало на 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 Studio 2.0, но он все еще не принимает синтаксис java 8 после того, как я проверил, и вы не можете сейчас выбрать компилятор из android studio. Однако вы можете использовать плагин Scala, если вам нужен механизм функционального программирования в вашем Android-клиенте.
Android использует Java, который разветвляется от Java 6.
Начиная с версии Android SDK 19 вы можете использовать функции Java 7. Нет полной поддержки Java 8 (пока).
Родная Java 8 прибывает на Android! В заключение!
удалите плагин Retrolambda и блок retrolambda из файла build.gradle каждого модуля:
Чтобы отключить Jack и переключиться на набор инструментов по умолчанию, просто удалите блок jackOptions из файла build.gradle вашего модуля.
Чтобы начать использовать поддерживаемые функции языка Java 8, обновите плагин Android до версии 3.0.0 (или выше).
Начиная с Android Studio 3.0, функции языка Java 8 теперь поддерживаются Android:
- Лямбда-выражения
- Ссылки на метод
- Тип аннотации (в настоящее время информация аннотации типа не доступна во время выполнения, но только во время компиляции);
- Повторяющиеся аннотации
- Стандартные и статические методы интерфейса (на уровне API 24 или выше, без поддержки мгновенного запуска);
Также с минимального уровня API 24 доступны следующие API Java 8:
- java.util.stream
- java.util.function
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.AnnotatedElement.getAnnotationsByType (класс)
- 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!
Android ОФИЦИАЛЬНО поддерживает Java 8 начиная с Android N.
Объявления о возможностях здесь, объявление о языке Java 8:
Улучшенная поддержка языка Java 8 - Мы рады представить функции языка Java 8 для Android. С помощью компилятора Android для Android теперь вы можете использовать многие популярные функции языка Java 8, включая лямбды и т. Д., В версиях Android, начиная с Gingerbread. Новые функции помогают уменьшить стандартный код. Например, лямбды могут заменять анонимные внутренние классы при предоставлении прослушивателей событий. Некоторые функции языка Java 8 - такие как стандартные и статические методы, потоки и функциональные интерфейсы - теперь также доступны для версий N и выше. С Джеком мы с нетерпением ждем возможности более внимательно отслеживать язык Java, сохраняя обратную совместимость.
Мы можем использовать Java 8, используя:
В build.gradle (Project: myProject) добавьте следующее
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
В build.gradle (Module: myModule) добавьте следующее
apply plugin: 'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
В Android Studio 3.0 появилась встроенная поддержка некоторых функций языка Java 8, а именно:
- Лямбда-выражения
- Ссылки на метод
- Тип аннотации (информация доступна во время компиляции, но не во время выполнения)
- Повторяющиеся аннотации
- Стандартные и статические методы интерфейса
Также начиная с уровня API 24 доступны следующие API Java 8:
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
Самый простой способ
Вы можете включить поддержку java 1.8 для проекта Android.
Открытая структура проекта
Либо нажав Ctrl + Shift + Alt + S
Или же
File > Project Structure
Обновите Совместимость источника и Целевую совместимость до 1.8 в диалоговом окне "Структура проекта", как показано (выберите "Файл"> "Структура проекта").
Примечание: поддержка Java 1.8 может быть включена для Android Studio 3.0.0 или выше. Смотрите документацию для дальнейшего чтения.
Когда я задавал этот вопрос почти 2 года назад, ответ был "официально" "нет", но, как указано в ответе ekcr1, вы можете заставить работать одну из наиболее ожидаемых функций (лямбда-выражения), если вы используете retrolamba. В то время я все еще использовал Eclipse, так как Android Studio находился в режиме "предварительного просмотра", поэтому я никогда не шел по этому пути.
Сегодня я думаю, что "официального" ответа все еще нет, и хотя ретроламба все еще кажется хорошим путем, есть еще один вариант для тех, кто хочет пойти по несколько "неофициальному" маршруту, а именно Котлин.
Сегодня Котлин достиг 1.0.0. Для тех, кто не знаком с Kotlin, более подробную информацию можно найти на их веб-сайте здесь:
или посмотрите это видео с выступлением Джейка Уортона
Последние новости:
Google объявляет, что с Android N и Android Studio 2.1+ платформа будет поддерживать Java 8. Также была выпущена стабильная версия студии 2.1.
Наконец мы можем использовать лямбда-выражения. Больше нет фильтра по списку для цикла. Horeeey.
Добавьте этот конфиг 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
}
}
ОБНОВЛЕНИЕ 2019/10/28
Android Studio 4.0 решает эту проблему.
Компилятор D8 вставляет бэкпорт собственных API Java 8 в ваш APK во время компиляции, и ваше приложение будет использовать этот код вместо собственных API во время выполнения. Этот процесс называется обессахариванием.
Google только что объявил, что Java 8 будет изначально поддерживаться Android и что набор инструментов Jack будет устаревшим:
Мы решили добавить поддержку функций языка 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
Да. Мы скоро будем использовать 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
Добавить эту строку в модуль lvl build gradel
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Я задавал этот вопрос более 3 лет назад, и, очевидно, ответы менялись с годами. Как многие из выше уже ответили, на некоторое время назад ответ стал Да. Я никогда не обновлял принятый ответ, потому что это был правильный ответ в то время. (Я не уверен, что такое политика переполнения стека)
Я просто хотел добавить еще один ответ для тех, кто все еще ищет эту тему. По состоянию на 17.05.2017 Google также объявил, что Kotlin также является официальным языком для разработки под Android.
Я не нашел официального пресс-релиза, но я смотрел некоторые из видео Google I/O, где он был анонсирован. Вот ссылка на сообщение в блоге команды Kotlin об объявлении.
Подмножество Java 8 теперь поддерживается в Android Studio. Просто сделайте настройки Source и Target Compatibility из окна ниже:
Файл -> Структура проекта
Более подробная информация приведена в ссылке ниже.
https://developer.android.com/studio/write/java8-support.html
Самый простой способ добавить поддержку Java 8
compileOptions {
targetCompatibility = '1.8'
sourceCompatibility = '1.8'
}
Просто добавьте его в свой файл build.gradle.
Плагин Android Gradle 3.0.0 и более поздних версий поддерживает все языковые функции Java 7 и подмножество языковых функций Java 8, которые зависят от версии платформы. При создании приложения с использованием подключаемого модуля Android Gradle 4.0.0 и более поздних версий вы можете использовать несколько языковых API Java 8, не требуя минимального уровня API для вашего приложения.
На этой странице описаны функции языка Java 8, которые вы можете использовать, как правильно настроить свой проект для их использования, а также любые известные проблемы, с которыми вы можете столкнуться.
В этом вам поможет статья. Я помещу ссылку здесь ниже https://developer.android.com/studio/write/java8-support
Я решил опубликовать обновленный ответ для тех, кто ищет что-то более актуальное.
В настоящее время 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 здесь.
Поддерживаемые языковые функции и API Java 8
Android не поддерживает все функции языка Java 8. Однако при разработке приложений для Android 7.0 доступны следующие функции (уровень API 24):
- Стандартные и статические методы интерфейса. Лямбда-выражения (также доступны на уровне API 23 и ниже)
- Повторяемые аннотации
- Ссылки на метод (также доступны на уровне API 23 и ниже)
- Тип аннотации (также доступны на уровне API 23 и ниже)
Кроме того, доступны следующие API языка Java 8:
Reflection и языковые API:
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- API java.lang.reflect.Method.isDefault () и Reflection, связанные с повторяемыми аннотациями, такими как AnnotatedElement.getAnnotationsByType(Class)
Сервисные API:
- java.util.function
- java.util.stream
Чтобы использовать новые возможности языка Java 8, вам также необходимо использовать набор инструментов Jack. Этот новый набор инструментов Android компилирует источники языка Java в читаемый Android байт-код DEX, имеет собственный формат библиотеки.jack и предоставляет большинство функций набора инструментов как часть одного инструмента: переупаковка, сжатие, запутывание и мультидекс.
Вот сравнение двух наборов инструментов, используемых для создания файлов Android DEX:
Legacy javac toolchain: javac (.java → .class) → dx (.class → .dex) New Jack toolchain: Jack (.java → .jack → .dex)
Я написал аналогичный ответ на похожий вопрос о переполнении стека, но вот часть этого ответа.
Android Studio 2.1:
Новая версия Android Studio (2.1) имеет поддержку функций Java 8. Вот выдержка из поста на блоге разработчиков Android:
... Релиз Android Studio 2.1 включает в себя поддержку нового компилятора Jack и поддержку Java 8.
...
Чтобы использовать возможности языка Java 8 при разработке с N Developer Preview, вам необходимо использовать компилятор Jack. Мастер создания проекта [Файл → Создать → Проект] создает правильные конфигурации для проектов, ориентированных на N.
До Android Studio 2.1:
Android пока не поддерживает Java 1.8 (он поддерживает только до 1.7), поэтому вы не можете использовать функции Java 8, такие как лямбды.
Этот ответ дает более подробную информацию о совместимости Android Studio; Говорится:
Если вы хотите использовать лямбды, одну из основных функций Java 8 в Android, вы можете использовать gradle-retrolamba
Если вы хотите узнать больше об использовании gradle-retrolambda
, этот ответ дает много подробностей о том, как это сделать.
Добавление следующего исправило проблему для меня (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
...
}
Да, вы можете использовать функции языка Java 8 в Android Studio, но версия должна быть 3.0 или выше. Прочтите эту статью, чтобы узнать, как использовать функции Java 8 в студии Android.
https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html
ЛЕГКО ЗАПОМНИТЬ ОТВЕТ
В студии Android щелкните значок структуры проекта, затем войдите в модули / приложение, затем измените «Исходная совместимость» и «Целевая совместимость» на 1.8 и нажмите «ОК».
Все вышеперечисленные решения, похоже, не работают в 2019 году с последней версией Android Studio 3.4+.
Я придумал идеальное и современное решение для миграции или обновления вашего Android-проекта до Java 8.
Решение:
щелкните Файл -> Структура проекта -> Модули -> вкладка Свойства.
Измените исходную и целевую совместимость на 1.8 (Java 8)