Какие версии Android SDK поддерживают программирование в каких версиях Java?

Я писал Android-приложение для Android SDK 2.3.3, но потом меня попросили протестировать его на устройстве под управлением Android 2.2.1. Поэтому я установил цель 8 вместо 10. Но тогда java.util.concurrent.TimeUnit имел только набор функций Java 1.5 вместо набора функций Java 1.6/1.7 java.util.concurrent.TimeUnit. Поэтому я поместил реализацию TimeUnit из openjdk 6 в свой пакет для своего приложения для Android, и все работает нормально.

Кто-нибудь знает, где я могу получить документацию, которая дает мне диаграмму, которая говорит мне, например, что при использовании официального SDK Android 2.2 должен быть закодирован с использованием ключевых слов/синтаксиса/API Java 1.5, Android 2.3.3 может быть закодирован используя ключевые слова/синтаксис/API Java 1.6 и т. д.?


person Robert Louis Murphy    schedule 17.05.2012    source источник
comment
Мне кажется странным, что Android когда-либо заставит вас использовать 1.5, поскольку Java 1.6 старше Android. Может быть, здесь что-то еще происходит.   -  person jpaugh    schedule 17.05.2012
comment
Бьюсь об заклад, в то время openjdk был только до 1,5, и это как-то связано с этим. openjdk 7 не был выпущен до 28 июля 2011 г.   -  person Robert Louis Murphy    schedule 17.05.2012
comment
дубликаты: stackoverflow.com/q/7535385/324625 и stackoverflow.com/q/390482/324625   -  person Steve Blackwell    schedule 17.05.2012


Ответы (1)


Вы пытаетесь рассматривать Android как подмножество Java, которым он не является. Они полностью разделены. Несмотря на то, что Android происходит от Java, он немного отошел от нее, и между ними больше нет корреляции «по версии».

То, что вы можете посмотреть, это документация Android. Для каждой инструкции/команды/метода/свойства в правом верхнем углу вы найдете уровень API, на котором вы можете получить доступ к указанному свойству.

Нажав на уровень API, вы попадете на страницу, содержащую таблицу, переводящую уровень API в версии Android.

Простой способ узнать, разрешено ли вам использовать свойство, — это использовать eclipse и сделать то, что вы только что сделали: изменить целевой уровень API. Тогда любой вызов методов или свойств, которые вам недоступны, приведет к фатальным ошибкам.

person Yahel    schedule 17.05.2012
comment
и между ними больше нет корреляции. ну не правда ли? - person keyser; 17.05.2012
comment
@Keyser Yahel считает, что вам не следует пытаться сопоставлять версии Android с конкретными версиями Java, чтобы узнать, что поддерживается, - вместо этого вам следует напрямую проверять документацию Android. - person Chris Stratton; 17.05.2012
comment
@Keyser: Если хочешь уточнить :) - person Yahel; 17.05.2012
comment
Хорошо, я понял, что байт-код скомпилирован с использованием Apache Harmony en.wikipedia.org/wiki/Apache_Harmony, а затем этот байт-код преобразуется в байт-код Dalvik. Я всегда думал, что Oracle JDK или любой другой JDK, который вы использовали, создал байт-код Java, который позже был преобразован в байт-код Dalvik. Таким образом, Android 2.2 и более ранние версии использовали Apache Harmony JDK 5.0, завершенный на 99%. Android 2.3.3 и более поздние версии используют Apache Harmony Java SE 6, завершенный на 97%. Таким образом, функции, характерные для JDK 7 и более поздних версий, нельзя использовать при компиляции приложений Android с использованием официальных инструментов. - person Robert Louis Murphy; 17.05.2012
comment
@ChrisStratton Это имеет больше смысла, и Яхель, у меня нет энергии: p - person keyser; 17.05.2012
comment
И нет, я никогда не думал, что Android — это подмножество Java. Я просто думал, что байт-код, который был преобразован в байт-код Dalvik, исходил из того, что я когда-либо использовал javac.exe в то время, но это не так. - person Robert Louis Murphy; 17.05.2012
comment
В общем, ваш ответ не отвечает на мой вопрос. Но если вы внимательно прочитаете en.wikipedia.org/wiki/Android_(операционная_система) это приведет вас к en.wikipedia.org/wiki/Dalvik_(software) который приведет вас к en.wikipedia.org/wiki/Apache_Harmony, что позволит вам сделать вывод о том, что наиболее но поддерживаются не все ключевые слова/синтаксис/API Java SE 6. - person Robert Louis Murphy; 17.05.2012
comment
@Keyser: отредактировал мой ответ, указав, что между ними больше нет корреляции «по версии». Надеюсь, так станет понятнее. - person Yahel; 17.05.2012
comment
Корреляция есть: при тестировании я обнаружил, что некоторые функции Java SE 6 поддерживаются в версии 2.3.3, но не поддерживаются в версии 2.2. Где-то кто-то, кто работал над проектом, знает, какая версия Apache Harmony используется в 2.2 и какая версия Apache Harmony используется в каждой последующей версии, и затем я могу использовать документацию Apache Harmony, чтобы увидеть, какие функции кодирования поддерживаются каждым из них. Android SDK, пока я не нашел эту документацию. - person Robert Louis Murphy; 17.05.2012
comment
Так что путаницы нет: Apache Harmony не используется в Android, но используется в инструментах сборки Android SDK, когда вы пишете код на Java (возможно, когда вы пишете код на C, но я об этом не знаю). - person Robert Louis Murphy; 17.05.2012
comment
@RobertLouisMurphy компилятор - это компилятор JDK, но компилятор относительно мало связан с тем, какие API доступны. Библиотеки API, найденные на устройстве и на основе которых вы создаете программы, состоят из выбора из Harmony, других источников и вещей, разработанных специально для Android, а не Sun/Oracle. - person Chris Stratton; 17.05.2012
comment
@Robert: Извините, но прямой зависимости между версиями Android и Java нет. Java была основой, на которой развивался Android, оставляя некоторые вещи позади, добавляя новые по мере необходимости. Вы только усложните себе жизнь, пытаясь работать с документацией, отличной от документации Android :) - person Yahel; 17.05.2012
comment
Яхель - мы все понимаем вашу точку зрения, но она имеет мало общего с первоначальным вопросом. Ваше заявление о том, что между версиями Android и Java вообще нет прямой связи, равносильно заявлению об отсутствии прямой связи между исходным кодом Java и файлами .class. Тот факт, что между ними есть пара шагов перевода, не означает, что нет никакой корреляции. - person Robert Louis Murphy; 17.05.2012
comment
@Robert: Хорошо, может быть, мой английский предал меня :) Я был уверен, что вы просили диаграмму, которая показала бы вам, какой набор инструкций Java доступен при кодировании в определенной версии Android. Неважно :) - person Yahel; 18.05.2012