6

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

4

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

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

5 ответ(ов)

0

Вопрос: Как я могу использовать нативные функции языка Java 8 в своем Android проекте?

Ответ:

С удовольствием сообщаю, что начиная с Android Studio 3.0, поддержки функций языка Java 8 на Android достигли нового уровня! Чтобы начать использовать эти функции, выполните следующие шаги:

  1. Удалите плагин Retrolambda и блок retrolambda из каждого модуля вашего файла build.gradle.

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

  3. Обновите плагин 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 в вашем проекте! Удачи!

0

Чтобы использовать Java 8 в вашем проекте на Gradle, выполните следующие шаги:

  1. В файле build.gradle вашего проекта (Project: myProject) добавьте следующую строку в секцию buildscript.dependencies:

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' // замените x.x.x на последнюю версию
    
  2. В файле build.gradle вашего модуля (Module: myModule) добавьте следующие строки:

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

После этого вы сможете использовать возможности Java 8 в вашем Android проекте. Не забудьте проверить, что версии всех зависимостей совместимы друг с другом.

0

ОБНОВЛЕНИЕ 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

0

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

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

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

https://kotlinlang.org

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

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

0

Недавние новости:

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

В итоге мы можем использовать лямбда-выражения. Больше не нужно фильтровать списки в циклах for. Ура!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь