Можно ли использовать Java 8 для разработки под Android?
Я искал информацию в интернете, и неясно, поддерживается ли Java 8 для разработки приложений под Android или нет.
Перед тем как скачать и настроить Java 8, не мог бы кто-нибудь указать на какую-либо "официальную" документацию, где сказано, поддерживается ли Java 8 в разработке для Android?
5 ответ(ов)
Вопрос: Как я могу использовать нативные функции языка Java 8 в своем Android проекте?
Ответ:
С удовольствием сообщаю, что начиная с Android Studio 3.0, поддержки функций языка Java 8 на Android достигли нового уровня! Чтобы начать использовать эти функции, выполните следующие шаги:
Удалите плагин Retrolambda и блок
retrolambda
из каждого модуля вашего файлаbuild.gradle
.Чтобы отключить Jack и вернуться к использованию стандартного инструментария, просто удалите блок
jackOptions
из вашего модуляbuild.gradle
.Обновите плагин Android до версии 3.0.0 (или выше).
Теперь вы можете использовать следующие функции языка Java 8:
- Лямбда-выражения
- Ссылки на методы
- Аннотации типов (на данный момент информация о аннотациях типов недоступна во время выполнения, только на этапе компиляции);
- Повторяющиеся аннотации
- Методы по умолчанию и статические методы интерфейса (при уровне API 24 или выше, однако поддержка Instant Run отсутствует).
Также начиная с минимального уровня 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()
Для того чтобы информировать проект о уровне языка, добавьте следующие строки в файл build.gradle
вашего модуля приложения:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Если вы хотите отключить поддержку функций языка Java 8, добавьте следующее в ваш файл gradle.properties:
android.enableDesugar=false
После выполнения всех этих шагов, вы сможете использовать нативные функции Java 8 в вашем проекте! Удачи!
Чтобы использовать Java 8 в вашем проекте на Gradle, выполните следующие шаги:
В файле
build.gradle
вашего проекта (Project: myProject) добавьте следующую строку в секциюbuildscript.dependencies
:classpath 'me.tatarka:gradle-retrolambda:x.x.x' // замените x.x.x на последнюю версию
В файле
build.gradle
вашего модуля (Module: myModule) добавьте следующие строки:apply plugin: 'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
После этого вы сможете использовать возможности Java 8 в вашем Android проекте. Не забудьте проверить, что версии всех зависимостей совместимы друг с другом.
ОБНОВЛЕНИЕ 2020/01/17
Android Studio 4.0 добавляет поддержку использования нескольких языковых API Java 8 с помощью техники, называемой десугаринг, без необходимости устанавливать минимальный уровень API для вашего приложения:
https://developer.android.com/studio/preview/features#j8-desugar
В этом релизе поддерживаются следующие API:
- Последовательные потоки (
java.util.stream
)- Подмножество
java.time
java.util.function
- Новые дополнения к
java.util.{Map,Collection,Comparator}
- Опциональные типы (
java.util.Optional
,java.util.OptionalInt
иjava.util.OptionalDouble
) и некоторые другие новые классы, полезные с вышеуказанными API- Некоторые дополнения к
java.util.concurrent.atomic
(новые методы дляAtomicInteger
,AtomicLong
иAtomicReference
)ConcurrentHashMap
(с исправлениями для Android 5.0)Чтобы поддержать эти языковые API, D8 компилирует отдельный файл библиотеки DEX, который содержит реализацию отсутствующих API и включает его в ваше приложение. Процесс десугаринга переписывает код вашего приложения, чтобы использовать эту библиотеку во время выполнения.
Чтобы включить поддержку этих языковых API, добавьте следующее в файл
build.gradle
вашего модуля:android { defaultConfig { // Обязательно при установке minSdkVersion на 20 или ниже multiDexEnabled true } compileOptions { // Флаг для включения поддержки новых языковых API coreLibraryDesugaringEnabled true // Устанавливает совместимость с Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4' }
ОРИГИНАЛЬНЫЙ ПОСТ С 2017 ГОДА
Android Studio 3.0 начала предоставлять встроенную поддержку некоторых языковых возможностей 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
была расширена до всех уровней 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
Когда я задавал этот вопрос почти 2 года назад, официальным ответом было "нет". Однако, как указано в ответе ekcr1, вы можете получить одну из самых ожидаемых функций (лямбды), если используете Retrolambda. В то время я все еще пользовался Eclipse, так как Android Studio была в состоянии "предварительного просмотра", поэтому я не стал искать этот путь.
На сегодня я думаю, что "официальный" ответ все еще "нет", и хотя Retrolambda по-прежнему выглядит как разумное решение, есть еще один вариант для тех, кто готов пойти по несколько "неофициальному" пути, а именно Kotlin.
На данный момент Kotlin выпустил версию 1.0.0. Для тех, кто не знаком с Kotlin, дополнительную информацию можно найти на их сайте:
или посмотрите это видео на YouTube с выступлением Джека Уортона:
Недавние новости:
Google объявил, что с выходом Android N и Android Studio 2.1+ платформа начнет поддерживать Java 8. Также была выпущена стабильная версия Studio 2.1.
В итоге мы можем использовать лямбда-выражения. Больше не нужно фильтровать списки в циклах for
. Ура!
Как установить Java 8 на Mac
Почему в RecyclerView отсутствует onItemClickListener()?
Не удается запустить Eclipse - Java был запущен, но вернул код завершения = 13
Как преобразовать список списков в список в Java 8?
Отправка электронной почты в Android с использованием JavaMail API без стандартного приложения