Можно ли использовать 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 тоже будет работать:

Настройки Eclipse -> Java -> Компилятор 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, используя:

  1. В build.gradle (Project: myProject) добавьте следующее

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
    
  2. В 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, более подробную информацию можно найти на их веб-сайте здесь:

https://kotlinlang.org/

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

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

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

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)

Другие вопросы по тегам