Старые Android-устройства будут поддерживаться, если я использую Java 8? [Дубликат]

Без какого-либо внешнего инструмента вы можете просто выполнить это на Windows 7 или 8, открыв монитор ресурсов, а также на вкладке CPU или Overview, щелкнув правой кнопкой мыши процесс и выбрав Suspend Process . Монитор ресурсов можно запустить с вкладки «Производительность» диспетчера задач.

546
задан Enzokie 26 August 2017 в 05:02
поделиться

21 ответ

java 8

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

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

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

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

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

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

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

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

Eclipse Preferences -> Java -> Compiler [/g5]

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

< / blockquote>

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

160
ответ дан Eng. Samer T 16 August 2018 в 01:49
поделиться
  • 1
    Изменила ли Java 8 способ работы байт-кода? Если нет, должно быть хорошо использовать любую версию Java, теоретически, до тех пор, пока она компилируется. – Ben Leggiero 12 March 2015 в 15:13
  • 2
    правильный вопрос: что, если вы используете новые функции в java 8, не существует в java 7 для создания приложения для Android, не так ли? чтобы быть в безопасности, следуйте официальным инструкциям. – Eng. Samer T 12 March 2015 в 21:12
  • 3
    @ BenC.R.Leggiero нет нового байт-кода в Java 8, но значения и структуры команд были изменены stackoverflow.com/questions/28228450/… stackoverflow.com/questions/16143684 / & hellip; – phuclv 14 March 2015 в 20:13
  • 4
    Пожалуйста, не публикуйте «Обновить N». в вашем ответе. Перепишите его, чтобы иметь самую свежую информацию. В противном случае SO через несколько лет будет так же сложно получить информацию, как и форумы, которые он заменил. – Aleksandr Dubinsky 7 March 2016 в 22:44
  • 5
    :( Мгновенный запуск НЕ работает с опциями Джека !!! – mythicalcoder 27 February 2017 в 23:47

Добавьте эту конфигурацию build.gradle и gradc:

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}
4
ответ дан Ahmad Aghazadeh 16 August 2018 в 01:49
поделиться
  • 1
    Это правильный способ добавить поддержку Java 8 для проектов Android. Недостатком является то, что мгновенный запуск в настоящий момент не выполняется, когда гнездо включено. – Ionut Negru 13 October 2016 в 16:53
  • 2
    Не полная поддержка. – Ahmad Aghazadeh 13 October 2016 в 16:55

Да. Мы будем использовать 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
ответ дан Ajay S 16 August 2018 в 01:49
поделиться

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

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

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

4
ответ дан asozcan 16 August 2018 в 01:49
поделиться

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

В настоящее время 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 здесь.

Поддерживаемые Java 8 языковые функции и API

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

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

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

Reflection и связанные с языком API:

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

Утилиты API:

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

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

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

Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)
    New Jack toolchain:
    Jack (.java → .jack → .dex)
1
ответ дан BlackHatSamurai 16 August 2018 в 01:49
поделиться

Я написал аналогичный ответ на аналогичный вопрос в Stack Overflow, но вот часть этого ответа.

Android Studio 2.1:

Новая версия Android Studio (2.1) поддерживает функции Java 8. Вот выдержка из сообщений разработчиков Android-разработчиков Android :

... В выпуске Android Studio 2.1 есть поддержка нового компилятора Jack и поддержка Java 8 .

...

Чтобы использовать возможности языка Java 8 при разработке с помощью N Developer Preview, вам нужно использовать компилятор Jack. Мастер создания проекта [fайл → Новый → Проект] генерирует правильные конфигурации для проектов, нацеленных на N.


До Android Studio 2.1:

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

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

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

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

1
ответ дан Community 16 August 2018 в 01:49
поделиться
  • 1
    Привет, Фарбод! Я использую Android Studio 2.2.2. Мой "SDK Location" (это на Mac FWIW) просто говорит "/Users/me/Library/Android/sdk" Я использую Java8 - как использовать Java8 ?? Благодаря! – Fattie 3 December 2016 в 19:17

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

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

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

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

0
ответ дан cricket_007 16 August 2018 в 01:49
поделиться

Собственная Java 8 прибывает на Android! Наконец,

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

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

Чтобы начать использовать поддерживаемые функции языка 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!

11
ответ дан Dhaval Jivani 16 August 2018 в 01:49
поделиться

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

330
ответ дан ekcr1 16 August 2018 в 01:49
поделиться
  • 1
    Было немного сложно заставить его работать, но как только я на самом деле следовал правильным инструкциям, он работал красиво. Примечание для пользователей Eclipse: Eclipse не работает с этим, я предлагаю перейти на Android Studio (я пропущу Eclipse, но так оно и должно быть!) – Simon Forsberg 28 April 2014 в 11:49
  • 2
    Nitpick: предложения с несколькими ловушками от Java 7 НЕ поддерживаются Android. – csvan 5 June 2014 в 10:10
  • 3
    Для меня работает Multi-catch. – Daniel Ryan 25 June 2014 в 00:39
  • 4
    Поддерживается многопользовательский режим, только функция JDK7, не поддерживаемая Android, - это try-with-resources – Matthieu Harlé 23 July 2014 в 11:31
  • 5
    Java 7 работает со всеми версиями Android. Одно исключение: try-with-resources работает только с Китката. – Dmitry Zaytsev 21 August 2014 в 11:20

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 была расширена для всех 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/ студия / запись / java8-support.html

7
ответ дан Idolon 16 August 2018 в 01:49
поделиться
  • 1
    То, чего я не понимаю, - это то, что делает андроид-студия с поддержкой java8 (раньше это не было intellij) ?! Означает ли это, что если я использую gradle на терминале для компиляции проекта, он не скомпилируется ?! – cesarferreira 19 April 2017 в 16:42
  • 2
    @cesarferreira Вам необходимо обновить плагин Android до последней версии (на данный момент 2.4.0-alpha6). Пожалуйста, проверьте блок цитаты в ответе. – Idolon 20 April 2017 в 09:56

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

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

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

14
ответ дан Jay 16 August 2018 в 01:49
поделиться
  • 1
    В этот день все еще довольно сложно, например Instant Run не работает с lambdas: если вы измените код внутри вашей лямбда-функции, это не изменит. – Grsmto 11 May 2017 в 12:55

Android использует Java, который отделяется от Java 6.

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

19
ответ дан Kidburla 16 August 2018 в 01:49
поделиться
  • 1
    вы - спасатель. Вы знаете, есть ли что-то, что бы реализовать try-with-resources аналогичным образом? – galets 25 November 2014 в 21:15
  • 2
    @galets пока еще нет, но я бы поставил на то, что Google добавит его в какой-то момент в будущем. Дополнительная информация: stackoverflow.com/questions/16921337/… – chaqke 3 December 2014 в 00:04

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

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

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

5
ответ дан nPn 16 August 2018 в 01:49
поделиться
  • 1
    Спасибо за обновление, мне было интересно, изменилось ли что-то с тех пор, как вы задали этот вопрос. – Tony D 17 February 2016 в 20:14

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

build.gradle (Project)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle (Module: app)

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
    ...
}
0
ответ дан Richard 16 August 2018 в 01:49
поделиться

Да, 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-клиенте.

17
ответ дан sivi 16 August 2018 в 01:49
поделиться
  • 1
    Scala будет очень тяжелым для упаковки с apk – TechSpellBound 16 January 2016 в 13:02
  • 2
    Пожалуйста, обратитесь к этому решению для обновленной версии Android 2.0, поскольку они сделали обновления для ограниченных конфигураций. – Gaurav Sharma 25 October 2016 в 19:34

Мы можем использовать 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
    }
    
11
ответ дан Sri Harsha Chilakapati 16 August 2018 в 01:49
поделиться
  • 1
    Что отличается от первого ответа, который рекомендовал ретро лямбда? – Maarten Bodewes 4 January 2016 в 02:37
  • 2
    @MaartenBodewes Кажется, это указывало на то, что он стал намного проще, чем принятый ответ. См. medium.com/android-news/… – TechSpellBound 16 January 2016 в 13:09
  • 3
    Не используйте его. Плагин неисправен – Akshay Mukadam 5 February 2016 в 12:06

Google только что объявил, что Java 8 будет изначально поддерживаться Android и что инструментальная цепочка Jack будет обесцениваться:

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

Подробнее здесь: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

2
ответ дан stamanuel 16 August 2018 в 01:49
поделиться
97
ответ дан Sufiyan Ghori 16 August 2018 в 01:49
поделиться

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

Старый ответ

Начиная с версии Android N preview Android поддерживает ограниченные возможности Java 8, см. Функции языка Java 8

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

Поддерживаемые Java 8 языковые функции и API

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

42
ответ дан user 16 August 2018 в 01:49
поделиться
  • 1
    Я ничего не понял. Есть ли какие-либо требования к minSdkVersion? – WindRider 11 March 2016 в 11:57
  • 2
    Я думаю, что только лямбда-выражения обратно совместимы, другие функции Java 8 будут работать только на N (или будущей версии). Я не тестировал это, но это то, что я понимаю из Android-документов. Итак, для Java 8 функций minSdkVersion является N, отличным от лямбда-выражения – user 11 March 2016 в 12:28
  • 3
    Итак ... еще несколько лет, пока N не станет лидером на приборной панели. :( – WindRider 11 March 2016 в 17:55
  • 4
    К сожалению, да. или пока Android каким-то образом не обеспечит обратную совместимость, например, лямбда – user 11 March 2016 в 18:05
  • 5
    @WindRider, вы можете использовать minSdkVersion 15 и выше. В настоящее время я использую minSdkVersion 17 в своем проекте Android с Lambdas, и все работает. – YYamil 7 February 2017 в 18:09
5
ответ дан nPn 6 September 2018 в 01:07
поделиться
0
ответ дан Khemraj 29 October 2018 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: