Можно ли использовать Java 8 для разработки под Android?

500

Поиск в Интернете неясно, поддерживается ли Java 8 для разработки Android или нет.

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

  • 21
    Я не знаю об официальном заявлении, но у меня есть Java 8 (редактор: JDK 8), работающий хорошо с Android SDK для меня. Windows 8.1 64 битная здесь.
  • 2
    В этом посте шла дискуссия. Как версия Java для Android связана с версией Java SE?
Показать ещё 9 комментариев
Теги:
java-8
android-gradle

20 ответов

153
Лучший ответ

java 8

Android поддерживает все языковые функции Java 7 и набор функций языка Java 8, которые различаются по версии платформы.

Чтобы проверить, какие функции java 8 поддерживаются

Использовать языковые функции Java 8

Мы решили добавить поддержку языковых функций Java 8 непосредственно в текущий набор инструментов javac и dx, а также отказаться от инструментальной привязки Jack. В этом новом направлении существующие инструменты и плагины, зависящие от формата файла классов Java, должны продолжать работать. Двигаясь вперед, функции языка Java 8 будут поддерживаться системой Android. Мы собираемся запустить это как часть Android Studio в ближайшие недели, и мы хотели бы поделиться этим решением с вами на ранней стадии.

Будущая поддержка функций Java 8 Language на Android

Пользователи Eclipse:

Для старых разработчиков, которые предпочитают Eclipse, google останавливает поддержку инструментов разработчика Android Eclipse

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

Изображение 1455

Java 7 или выше требуется, если вы настроите Android 5.0 и выше.

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

  • 0
    Это изменилось сейчас. Вы также можете использовать Java 7. Пока вы не используете попробовать с ресурсами.
  • 2
    Изменила ли Java 8 способ работы байт-кода? Если нет, то теоретически можно использовать любую версию Java, если она компилируется.
Показать ещё 9 комментариев
308

UPDATE 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, а только новый синтаксический сахар.

Если вы хотите использовать lambdas, одну из основных функций Java 8 в Android, вы можете использовать gradle -retrolamba. Это зависимость сборки gradle, которая объединяет retrolambda, инструмент, который преобразует байт-код Java 8 обратно в Java 6/7. В принципе, если вы установите компилятор в Android Studio для компиляции байт-кода Java 8, таким образом, позволяя lambdas, он преобразует его обратно в Java 6/7 bytecode, который затем, в свою очередь, преобразуется в байт-код dalvik. Это взломать, если вы хотите попробовать некоторые функции JDK 8 в Android вместо официальной поддержки.

  • 1
    Спасибо ekcr1, это отличная информация (и я проголосовал за нее). Я пометил предыдущий ответ как принятый, так как он отвечает именно на то, что я искал (спросил), но я обязательно посмотрю на это - еще раз спасибо!
  • 13
    Было немного трудно заставить его работать, но как только я действительно следовал правильным инструкциям, это сработало хорошо. Примечание для пользователей Eclipse: Eclipse не очень хорошо с этим работает, я предлагаю перейти на Android Studio (я буду скучать по Eclipse, но сейчас так и должно быть!)
Показать ещё 13 комментариев
94

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

Ниже приводится полное руководство, которое я недавно выполнил для запуска лямбда-выражений для разработки Android. Исходный источник этого руководства упоминается в конце.

В этом руководстве показан способ привлечения некоторых Java 8 функций в Средства разработки Android будут продемонстрированы, в частности, Eclipse IDE. Однако шаги, которые будут описаны в этом руководстве, также могут быть адаптированы к новой разработке восстания в Гугле среда, Android Studio. Он основан на популярной IntelliJ Idea IDE от JetBrains, и недавно она была обновлен до своей "бета-версии" Google в начале июля 2014 года, слегка прежде чем было написано это руководство. Eclipse останется как видный среды разработки, по крайней мере на некоторое время, и учитывая факт, что большинство проектов Android были разработаны с использованием Eclipse, метод привлечения новых функций Java 8, таких как лямбда-выражения, в ADT представляется весьма полезным для разработчиков.

Разработка Android основана на пользовательской реализации Java, называемой Проект Apache Harmony, который был прекращен еще в 2011 году. обычно используемым синтаксисом Java в Android Development является Java 6 (v1.6) и Java 7 (v1.7) также частично поддерживается в выпуске KitKat (Android 4.4. +). Таким образом, функции Java 8, такие как лямбда-выражения не могут быть использованы непосредственно в Android App Development без применяя некоторые настройки в средствах разработки. К счастью, эти конструкции - это в основном некоторые "синтаксические улучшения сахара", которые дать разработчикам недостатки таких вещей, как "анонимные классы" и они могут быть переведены на классы 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 Development и оно основано на версии 22.6.2 ADT, потому что недавняя версия ADT 23.0.2, похоже, имеет проблемы с созданием папки макета. Подробности по этой проблеме можно найти по следующей ссылке:

http://code.google.com/p/android/issues/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%
  • Создайте ярлык для 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 в Eclipse. Введите 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,

Изображение 1456

Он может рассматриваться как полнофункциональное 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
  • Заполните форму, которая появляется, как показано ниже:

Изображение 1457

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

    • gradle_build.cmd
    • gradle_post_build.cmd
    • gradle_clean.cmd
  • Заполните эти пакетные файлы следующим образом:

gradle_build.cmd:

Изображение 1458

gradle_post_build.cmd:

Изображение 1459

gradle_clean.cmd:

Изображение 1460

  • Отменить выбор пункта Project -> Build Automatically
  • Щелкните правой кнопкой мыши проект и выберите Properties -> Builders и отмените выбор всех сборщиков по умолчанию, предоставляемых ADT
  • Нажмите кнопку New в том же окне и выберите Program и нажмите OK
  • Появится окно конфигурации нового строителя. Заполните его вкладки следующим образом:

Main Вкладка новой конфигурации Builder

Изображение 1461

Refresh Вкладка новой конфигурации Builder

Изображение 1462

Environment Вкладка новой конфигурации Builder

Изображение 1463

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

Изображение 1464

  • Создайте второй создатель с именем Gradle_Post_Build, который использует gradle_post_build.cmd в качестве своей программы. Все остальные настройки этого построителя должны точно совпадать с ранее созданным построителем. Этот конструктор будет отвечать за копирование артефактов, созданных процессом сборки, в папку bin.
  • Создайте третий создатель с именем Gradle_Cleaner, который использует gradle_clean.cmd в качестве своей программы. Только установка Run the builder на последней вкладке должна быть установлена ​​как During a Clean. Все остальные настройки этого построителя должны точно совпадать с первым конструктором. Этот строитель будет отвечать за очистку артефактов, созданных процессом сборки, как следует из названия.

Новые строители проекта HelloLambda

Изображение 1465

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

Clean Project Окно

Изображение 1466

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

<Т411 >

  • Измените начало файла build.gradle до раздела sourceCompatibility следующим образом:

Изображение 1467

  • Щелкните правой кнопкой мыши проект и выберите опцию Properties -> Java Compiler и установите все уровни соответствия на Java 8. Это заставит Eclipse распознать новые конструкции Java 8, такие как лямбда-выражения.
  • Нажмите No в окне уведомлений
  • Щелкните правой кнопкой мыши проект и выберите Build project. Eclipse начнет строить проект.

Процесс сборки Изображение 1468

  • Щелкните правой кнопкой мыши проект и перейдите к Properties -> Java Build Path. Добавьте следующие пути в путь сборки (также показано ниже):

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

Изображение 1469

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

  • Создайте новый Run Configuration для целевой платформы Android, щелкнув правой кнопкой мыши на проекте, а затем выбрав Run As -> Run Configurations. Например, это демо-приложение выглядит, как показано ниже в Genymotion VD:

Приложение HelloLambda

Изображение 1470

Вы можете наблюдать в окне LogCat, что фрагмент кода с простым выражением лямбда работает правильно

Изображение 1471

Источник: Использование Java Lambda Expressions в инструментах разработчика Android

  • 0
    Но сможете ли вы отладить этот код с помощью отладчика Android? Я думаю, что стеки / номера строк несовместимы. Похоже, главный недостаток разработки с Java 8 на Android.
  • 2
    @ Зомби Да, вы все еще можете отладить его. Все работает просто отлично.
Показать ещё 1 комментарий
40

Следуйте этой ссылке для новых обновлений. Использовать языковые функции Java 8

Старый ответ

По состоянию на Android N превью освободить поддержку Android ограниченных функций Java 8 см. Java 8 Особенности языка

Чтобы начать использовать эти функции, вам необходимо загрузить и настроить Android Studio 2.1 и Android N Preview SDK, который включает в себя требуется Jack toolchain и обновленный Android-модуль для Gradle. если ты еще не установлены Android N Preview SDK, см. Настройка для разработки для Android N.

Поддерживаемые Java 8 Language Features и API

Android в настоящее время не поддерживает все функции языка Java 8. Однако при разработке приложений теперь доступны следующие функции для просмотра Android N:

По умолчанию и статические методы интерфейса

Лямбда-выражения (также доступны на уровне 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).

  • 0
    Я чего-то не поняла. Есть ли какие-либо требования к minSdkVersion ?
  • 0
    Я думаю, что только лямбда-выражения обратно совместимы, другие функции Java 8 будут работать только на N (или будущей версии). Я не проверял это, но это то, что я понимаю из документов Android. Итак, для функций Java 8 minSdkVersion равно N, кроме лямбда-выражения
Показать ещё 4 комментария
19

Android использует Java, отделяющий Java 6.

С Android SDK версии 19 вы можете использовать функции Java 7 выполнив это. Нет полной поддержки Java 8 (пока).

  • 1
    Вы спасатель. Знаете ли вы, есть ли что-то, что могло бы реализовать try-with-resources аналогичным образом?
  • 0
    @galets пока нет, но я бы поспорил, что Google добавит его в будущем. Дополнительную информацию см .: stackoverflow.com/questions/16921337/…
15

Да, 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. Однако вы можете использовать плагин scala, если вам нужен механизм функционального программирования в вашем Android-клиенте.

Изображение 1472

  • 1
    Scala будет очень тяжело упаковывать с помощью apk
  • 0
    Пожалуйста, обратитесь к этому решению для обновления Android Studio 2.0, поскольку они сделали обновления для ограниченных параметров конфигурации.
14

Android ОФИЦИАЛЬНО поддерживает Java 8 с Android N.

Объявление функций здесь, объявление на языке Java 8:

Улучшенная поддержка языка Java 8 - были в восторге от того, что вы внесли на Android функции языка Java 8. С помощью компилятора Android Jack вы можете теперь используют многие популярные функции языка Java 8, включая lambdas и больше, в версиях Android еще в Gingerbread. Новые функции помогите уменьшить шаблонный код. Например, lambdas может заменить анонимные внутренние классы при предоставлении прослушивателей событий. Некоторые Java 8 особенности языка - например, стандартные и статические методы, потоки и функциональные интерфейсы - теперь также доступны на N и выше. С Джек, с нетерпением ждал дальнейшего отслеживания языка Java сохраняя обратную совместимость.

  • 0
    На данный момент он все еще довольно глючный, например, Instant Run не работает с лямбдами: если вы измените какой-то код внутри вашей лямбда-функции, это не примет изменения.
11

Мы можем использовать 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
    }
    
  • 1
    Чем отличается первый ответ от рекомендуемой ретро лямбды?
  • 2
    @MaartenBodewes Кажется, это указывало на то, что это стало намного проще, чем принятый ответ. См. Medium.com/android-news/…
Показать ещё 1 комментарий
10

Нативная Java 8 приходит на Android! Наконец-то!

удалите плагин Retrolambda и блок retrolambda из каждого модуля. Файл build.gradle:

Чтобы отключить Jack и переключиться на инструментальную цепочку по умолчанию, просто удалите блок jackOptions из ваших модулей build.gradle file

Чтобы начать использовать поддерживаемые функции языка Java 8, обновите плагин Android до 3.0.0 (или выше)

Начиная с Android Studio 3.0, функции языка Java 8 теперь поддерживаются андроидом:

  • Лямбда-выражения
  • Ссылки на методы
  • Аннотации типа (в настоящее время информация об аннотации типа недоступна во время выполнения, но только во время компиляции);
  • Повторяющиеся аннотации
  • По умолчанию и статические методы интерфейса (на уровне API 24 или выше, без поддержки мгновенного запуска tho);

Также с минимального уровня API 24 доступны следующие Java 8 API:

  • 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 Language Language Features, добавив следующее в файл gradle.properties:

android.enableDesugar=false

Ты сделал! Теперь вы можете использовать собственный java8!

7

Android Studio 3.0 начала предоставлять встроенную поддержку некоторых функций языка Java 8, которые:

  • Лямбда-выражения
  • Ссылки на методы
  • Аннотации типа (информация доступна во время компиляции, но не во время выполнения)
  • Повторяющиеся аннотации
  • Способы по умолчанию и статические интерфейсы

Кроме того, начиная с уровня API 24 доступны следующие 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 была распространена на все уровни API Android.

В будущем будут добавлены дополнительные возможности 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

  • 0
    Чего я не понимаю, так это то, что андроид студия имеет отношение к поддержке java8 (у интеллигента не было раньше) ?! Означает ли это, что если я использую gradle на терминале для компиляции проекта, он не будет компилироваться ?!
  • 1
    @cesarferreira Вам необходимо обновить плагин Android до последней версии (сейчас это 2.4.0-alpha6 ). Пожалуйста, проверьте блок цитаты в ответе.
5

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

Сегодня я думаю, что "официального" ответа по-прежнему нет, и, хотя retrolamba по-прежнему кажется хорошим способом, есть еще один вариант для тех, кто хочет пойти по нескольким "неофициальным" маршрутам, а именно Kotlin.

Сегодня Котлин достиг 1.0.0. Для тех, кто не знаком с Kotlin, дополнительную информацию можно найти на их веб-сайте, найденном здесь:

https://kotlinlang.org

или смотрите это видео с утомлением беседы, сделанной Джейком Уортоном

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

  • 0
    Спасибо за обновление, мне было интересно, изменилось ли что-нибудь с тех пор, как вы задали этот вопрос.
4

Добавьте этот config build.gradle и sync 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. Недостатком является то, что мгновенный запуск в настоящее время не выполняется при включенном разъеме.
  • 0
    Не полная поддержка.
4

Последние новости:

Google объявляет, что с Android N и Android Studio 2.1+ платформа будет поддерживать Java 8. Также была выпущена стабильная версия студии 2.1.

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

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

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

1

Я задал этот вопрос более 3 лет назад, и, очевидно, ответы менялись с годами. Как уже говорилось выше, как и раньше, ответ стал Да. Я никогда не обновлял принятый ответ, потому что это был правильный ответ в то время. (Я не уверен, что такое политика)

Я просто хотел добавить еще один ответ для тех, кто все еще ищет эту тему. По состоянию на 17.05.2010 Google также объявила, что Kotlin также является официальным официальным языком для разработки Android.

Я не нашел официального пресс-релиза, но я смотрел некоторые видеоролики , где он был анонсирован. Вот ссылка на блог сообщение командой Kotlin по объявлению.

1

Я решил, что опубликую обновленный ответ для тех, кто смотрит на что-то немного более актуальное.

В настоящее время Android и Android Studio поддерживают подмножество функций Java 8. Согласно документации Android, расположенной на веб-сайте "Проверить обновление" (на Mac, Android Studio > "Проверить наличие обновлений" ). Если вы еще не установили IDE на свою рабочую станцию, загрузите здесь Android Studio.

Поддерживаемые Java 8 Language Features и API

Android не поддерживает все функции языка Java 8. Однако при разработке приложений, ориентированных на Android 7.0 (API level 24), доступны следующие функции:

  • По умолчанию и статические методы интерфейса Лямбда-выражения (также доступны на уровне API 23 и ниже)
  • Повторяющиеся аннотации
  • Ссылки на методы (также доступны на уровне API 23 и ниже)
  • Типовые аннотации (также доступны на уровне API 23 и ниже)

Кроме того, доступны следующие API-интерфейсы Java 8:

Отражения и связанные с языком API:

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

Утилиты API:

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

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

Вот сравнение двух наборов инструментов, используемых для сборки файлов Android DEX:

Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)
    New Jack toolchain:
    Jack (.java → .jack → .dex)
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 Preview, вам нужно использовать компилятор Jack. Мастер создания проекта [Файл → Новый → Проект] генерирует правильные конфигурации для проектов, ориентированных на N.


До Android Studio 2.1:

Android еще не поддерживает Java 1.8 (он поддерживает только до 1,7), поэтому вы не можете использовать функции Java 8, такие как lambdas.

Этот ответ дает более подробную информацию об совместимости Android Studio; он утверждает:

Если вы хотите использовать lambdas, одну из основных функций Java 8 в Android, вы можете использовать gradle -retrolamba

Если вы хотите больше узнать об использовании gradle-retrolambda, этот ответ дает много подробностей об этом.

  • 0
    Привет, Фарбод! Я использую AndroidStudio 2.2.2 Мой "SDK Location" (это на Mac FWIW) просто говорит "/Users/me/Library/Android/sdk" Я использую Java8 - как использовать Java8 ?? Спасибо!
0

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

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

Изображение 1473

Дополнительная информация приведена в приведенной ниже ссылке.

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

0

Добавление следующей исправленной проблемы для меня (Android studio 2.3.2):

build.gradle(Project)

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
    ...
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню