Кои версии на 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. Така че поставих внедряването на Openjdk 6 на TimeUnit в моя пакет за моето приложение за Android и всичко работи добре.

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


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 не беше пуснат до 2011/07/28   -  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 и преди това използваха 99% завършения Apache Harmony JDK 5.0. Android 2.3.3 и по-нови версии използват 97% завършения Apache Harmony Java SE 6. Така че характеристиките, специфични за 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_(operating_system) което ще ви отведе до en.wikipedia.org/wiki/Dalvik_(software) което ще ви отведе до en.wikipedia.org/wiki/Apache_Harmony, което ви позволява да заключите, че повечето но не всички Java SE 6 ключови думи/синтаксис/API се поддържат. - 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
@Робърт: Съжалявам, но изобщо няма пряка връзка между версиите на Android и Java. Java беше основата, върху която Android израсна, оставяйки някои неща зад гърба си, добавяйки нови неща, ако е необходимо. Само ще направите живота си по-труден, като се опитвате да работите върху документация, различна от тази на Android :) - person Yahel; 17.05.2012
comment
Яхел - всички разбираме мнението ти, но няма много общо с първоначалния въпрос. Вашето твърдение, че изобщо няма пряка връзка между версиите на Android и Java, е като да кажете, че няма пряка връзка между изходния код на Java и .class файловете. Само защото има няколко стъпки за превод между двете не означава, че няма никаква корелация. - person Robert Louis Murphy; 17.05.2012
comment
@Робърт : Добре, може би английският ми ме издаде :) Бях сигурен, че сте поискали диаграма, която ще ви каже какъв набор от инструкции на Java е наличен при кодиране в конкретна версия на Android. Няма значение :) - person Yahel; 18.05.2012