Подтвердить что ты не робот

Разница между targetSdkVersion и целью построения проекта

В чем разница между установкой targetSdkVersion в файле манифеста и целевой целью сборки проекта, заданной в среде здания (например, Eclipse)?

Я попытался найти дополнительную информацию об этих двух функциях, но я не мог найти никаких ясных и конкретных объяснений.

Кажется, что цель сборки проекта определяет уровень совместимости API, который будет использоваться во время компиляции. Когда targetSdkVersion влияет только на видимость элементов манифеста данного уровня API.

Может ли кто-нибудь подтвердить/изложить это?

EDIT: Спасибо, ребята, за быстрые ответы. Я забыл упомянуть в своем вопросе, что я прочитал все темы на Android Dev относительно этих функций, а также выполнил поиск в Google и просмотрел его в Stack Overflow. Поэтому я понимаю основную цель min/target/maxSdkVersion, которая будет использоваться в Android Market и в самой Android-системе. Однако, согласно другим сообщениям людей, имеющих проблемы с этим вариантом манифеста, кажется, что использование -sdk действительно влияет на интерпретацию уровня API. По крайней мере, это то, что я подозреваю.

A действительно хорошее объясняется здесь: http://developer.android.com/guide/appendix/api-levels.html

Однако для меня все еще неясно, влияет ли targetSdkVersion на компиляцию/время выполнения APK в Android-системе? Или это только для проверки, как предполагает использование документации -sdk?

4b9b3361

Ответ 1

Атрибут targetSdkVersion действительно влияет на поведение среды выполнения приложения.

В зависимости от того, что вы установите для него, будет определено, включены ли функции совместимости в инфраструктуру Android.

Например, как только вы установите targetSdkVersion = 11, ваша тема по умолчанию для вашего приложения будет установлена ​​на @android:style/Theme.Holo - это означает, что ваше приложение будет иметь виджеты пользовательского интерфейса Honeycomb, получит панель действий и не будет иметь параметры Кнопка меню в нижней части экрана.

Если вы установите значение targetSdkVersion на меньшее значение, ваша тема по умолчанию будет @android:style/Theme - независимо от того, на каком уровне API вы фактически строите.

TargetSdkLevel также влияет на значения по умолчанию для элемента <supports-screens>, который, в свою очередь, определит, будет ли ваше приложение работать в режиме совместимости плотности.

Интересное примечание: Android Market на самом деле не использует атрибут targetSdkLevel для чего-либо в данный момент. Он используется исключительно во время выполнения в целях совместимости и, возможно, во время компиляции, хотя я не изучал поведение там. Если люди интересуются компилятором, я мог бы проверить с командой SDK, чтобы получить дополнительную информацию.

Конечно, вполне возможно, что Market может решить что-то сделать с этим в будущем.

Ответ 2

Цель сборки используется для определения того, какой SDK должен скомпилировать ваш APK. Это означает, что если есть какие-либо Классы или методы, которые недоступны в вашей версии SDK min, но находятся в версиях после этого, эти Классы или методы будут по-прежнему доступны для использования. Вам просто нужно убедиться, что вы используете их и выполняете альтернативные подходы, если версия SDK пользователя несовместима с этими классами/методами.

android:targetSdkVersion

Целое число, обозначающее уровень API, на который нацелено приложение.

С этим набором атрибутов приложение говорит, что оно может работать в более старых версиях (вплоть до minSdkVersion), но было явно протестировано для работы с указанной здесь версией. Указание этой целевой версии позволяет платформе отключать параметры совместимости, которые не требуются для целевой версии (которые в противном случае могут быть включены для поддержания передовой совместимости) или включить новые функции, недоступные старым приложениям. Это не означает, что вы можете программировать разные функции для разных версий платформы - она ​​просто информирует платформу, которую вы протестировали против целевой версии, и платформа не должна выполнять какую-либо дополнительную работу для поддержания совместимости с целевой версией.

Дополнительную информацию вы можете найти, обратившись к этому URL-адресу:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Там также хорошая статья, написанная google по проверке, чтобы убедиться, что вы являетесь текущими пользователями. Версия ОС Android будет использовать соответствующие классы/методы

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

Ответ 3

В диалоговом окне "Создать проект" в Eclipse вы указываете minSdkVersion. Это API-уровень, необходимый для запуска вашего приложения.

targetSdkVersion -attribute сообщает Android Market, что ваше приложение было разработано (и, возможно, оптимизировано) для запуска под указанным API- Уровень.

Ответ 4

Цель сборки - та, на которой вы будете тестировать приложение. targetSdkVersion - это приложение, специально разработанное для вашего приложения. Оба они в большинстве случаев.

Ниже вы найдете подробное объяснение здесь.

Ответ 5

Атрибут

targetSdkVersion информирует систему о том, что вы протестировали приложение против данной версии (уровень api), и система не должна допускать каких-либо совместимых действий для поддержания совместимости приложения с целевой версией. Приложение все еще может работать в более старых версиях (вплоть до minSdkVersion).

Для более подробной информации - http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

Ответ 6

Этот вопрос уже получил адекватный ответ, но я хочу отметить, что уже не совсем правильно, что в магазине Google Play вообще не используется targetSdkVersion.

В конкретном случае, когда вы устанавливаете targetSdkVersion на 23 (Marshmallow 6.0) и загружаете APK, даже если вы загружаете бета-версию, вы больше не сможете отправлять APK для этого приложения, у которого есть более низкая targetSdkVersion чем 23.

Это происходит из-за изменений в разрешениях между 22 и 23, которые не могут быть отменены для данного приложения.

Это может быть немного ловушкой, если вы просто пробуете 23 в бета-версии и не уверены, что готовы к ее поддержке.