it-swarm.com.ru

В чем разница между compileSdkVersion и targetSdkVersion?

Я посмотрел на документация для сборки с Gradle, но я все еще не уверен, в чем разница между compileSdkVersion и targetSdkVersion.

Все это говорит:

Свойство compileSdkVersion указывает цель компиляции.

Ну, что такое "цель компиляции"?

Я вижу два возможных способа интерпретировать это:

  1. compileSdkVersion - это версия компилятора, используемого при сборке приложения, а targetSdkVersion - это "уровень API, на который ориентировано приложение" . (Если бы это было так, я бы предположил, что compileSdkVersion должно быть больше или равно targetSdkVersion?
  2. Они имеют в виду одно и то же. "цель компиляции" == "уровень API, на который нацелено приложение"
  3. Что-то другое?

Я вижу, что этот вопрос задавался ранее, но один ответ просто цитирует документ, что мне непонятно.

466
coder123

compileSdkVersion

compileSdkVersion - это версия API, для которой компилируется приложение. Это означает, что вы можете использовать Android функции API, включенные в эту версию API (очевидно, как и все предыдущие версии). Если вы попробуете использовать функции API 16, но установите для compileSdkVersion значение 15, вы получите ошибку компиляции. Если вы установите для compileSdkVersion значение 16, вы по-прежнему сможете запускать приложение на устройстве API 15, если пути выполнения вашего приложения не пытаются вызывать какие-либо API, специфичные для API 16.

targetSdkVersion

targetSdkVersion не имеет никакого отношения к тому, как ваше приложение компилируется или какие API вы можете использовать. Предполагается, что targetSdkVersion указывает на то, что вы тестировали свое приложение (предположительно вплоть до включительно) в указанной вами версии. Это больше похоже на сертификацию или подпись, которую вы предоставляете операционной системе Android в качестве подсказки о том, как она должна обрабатывать ваше приложение с точки зрения функций операционной системы.

Например, как документация гласит:

Например, установка этого значения на "11" или выше позволяет системе применять новую тему по умолчанию (Holo) к вашему приложению при работе на Android 3.0 или выше ...

Android ОС, во время выполнения , может изменить стилизацию или иное исполнение вашего приложения в контексте ОС на основании этого. значение. Есть несколько других известных примеров, на которые влияет это значение, и этот список, вероятно, будет только увеличиваться со временем.

Для всех практических целей большинство приложений захотят установить targetSdkVersion в последнюю выпущенную версию API. Это гарантирует, что ваше приложение будет выглядеть как можно лучше на самых последних Android устройствах. Если вы не укажете targetSdkVersion, по умолчанию используется minSdkVersion.

495
Jeff Mixon

Как путеводитель:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

В идеале:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

Читать дальше от этого великого поста Иана Лейка

135
Jimmy Kane

compileSdkVersion должна быть самой новой стабильной версией. targetSdkVersion должен быть полностью протестирован и меньше или равен compileSdkVersion.

31
androidwifi

Позднее к игре ... и выше есть несколько хороших ответов - по сути, compileSdkVersion- это версия API, с которой приложение скомпилировано, а targetSdkVersionуказывает версию, с которой тестировалось приложение.

Я хотел бы дополнить эти ответы следующими примечаниями:

  1. Это _targetSdkVersionвлияет на способ запроса разрешений :

    • Если на устройстве запущено Android 6.0 (уровень API 23) или выше, и targetSdkVersionприложения равно 23 или выше, приложение запрашивает разрешения у пользователя во время выполнения.
    • Если устройство работает на Android 5.1 (уровень API 22) или ниже или targetSdkVersionприложения равно 22 или ниже, система просит пользователя предоставить разрешения, когда пользователь устанавливает приложение.
  2. Если compileSdkVersionвыше версии, объявленной targetSdkVersionвашего приложения, система может включить режимы совместимости, чтобы приложение продолжало работать так, как вы ожидаете. ( ссылка )

  3. С каждым новым Android выпуском ...

    • Необходимо увеличить значение targetSdkVersionname__, чтобы оно соответствовало последнему уровню API, а затем тщательно протестируйте приложение на соответствующей версии платформы.
    • compileSdkVersionname__, с другой стороны, изменять не нужно, если вы не добавляете функции, эксклюзивные для новой версии платформы
    • В результате, хотя targetSdkVersionчасто (изначально) меньше, чем compileSdkVersionname__, нередко можно увидеть хорошо поддерживаемое/устоявшееся приложение с targetSdkVersion > compileSdkVersion
24
Austin D

The CompileSdkVersion - это версия платформы SDK, с которой ваше приложение работает для компиляции и т. д. В процессе разработки (вы всегда должны использовать самую последнюю версию). Она поставляется с используемой версией API.

enter image description here

Вы увидите это в своем файле build.gradle:

enter image description here

targetSdkVersion: содержит информацию, которую ваше приложение отправляет ПОСЛЕ процесса разработки в магазин приложений, что позволяет ему TARGET the SPECIFIED version of the Android platform. В зависимости от функциональности вашего приложения оно может ориентироваться на версии API ниже текущей. Например, вы можете настроить таргетинг на API 18, даже если текущая версия равна 23.

Внимательно посмотрите на этот официальный Google страница .

18
ojonugwa ochalifu

Я вижу много различий относительно compiledSdkVersion в предыдущих ответах, поэтому я попытаюсь немного уточнить здесь, следуя веб-странице Android.

A - Что Android говорит

Согласно https://developer.Android.com/guide/topics/manifest/uses-sdk-element.html :

Выбор версии платформы и уровня API. При разработке приложения вам нужно будет выбрать версию платформы, для которой вы будете компилировать приложение. Как правило, вы должны скомпилировать свое приложение для самой низкой версии платформы, которую ваше приложение может поддерживать.

Итак, это будет правильный порядок в соответствии с Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - Что и другие говорят

Некоторые люди предпочитают всегда использовать самый высокий скомпилированный SkdVersion. Это связано с тем, что они будут полагаться на подсказки кода, чтобы проверить, используют ли они более новые функции API, чем minSdkVersion, тем самым либо изменяя код, чтобы не использовать их, либо проверяя версию пользовательского API во время выполнения, чтобы условно использовать их с откатами для более старых версий API.

Подсказки об устаревших видах использования также появляются в коде, давая вам знать, что что-то устарело на более новых уровнях API, так что вы можете реагировать соответствующим образом, если хотите.

Таким образом, это будет правильный порядок в соответствии с другими:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

Что делать?

Это зависит от вас и вашего приложения.

Если вы планируете предлагать различные функции API в соответствии с уровнем API пользователя во время выполнения, используйте опцию B. Вы получите подсказки о функциях, которые вы используете при кодировании. Просто убедитесь, что вы никогда не используете более новые функции API, чем minSdkVersion, без проверки уровня пользовательского API во время выполнения, в противном случае ваше приложение вылетит. Этот подход также имеет преимущество в изучении того, что нового и старого в процессе кодирования.

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

7
CGodo

Мои 2 цента: скомпилируйте для любой версии SDK, но будьте осторожны, чтобы не вызывать API, которые не поддерживает ваша "минимальная версия SDK". Это означает, что вы можете "скомпилировать" последнюю версию SDK.

Что касается "целевой версии", то это просто относится к тому, на что вы планировали нацелиться в первую очередь и, возможно, проверили. Если вы не провели должной осмотрительности, то это способ сообщить Android, что ему необходимо выполнить некоторые дополнительные проверки, прежде чем развертывать ваше приложение, скажем, "Lollipop", в "Oreo".

Таким образом, "целевая версия" явно не ниже вашей "минимальной версии SDK", но она не может быть выше, чем ваша "скомпилированная версия".

2
Prabhu M

Не отвечая на ваши прямые вопросы, поскольку уже есть много подробных ответов, но стоит упомянуть, что, вопреки Android документации, Android Studio предлагает использовать то же самое версия для compileSDKVersion и targetSDKVersion.

enter image description here

1
sshturma

Параметры приложения свойств проекта Android в Visual Studio 2017 (15.8.5), кажется, объединяют их или что-то в этом роде:

enter image description here

0
samis

compiledSdkVersion ==> какая версия SDK должна компилировать ваш код в байт-код (используется в среде разработки): лучше использовать последнюю версию SDK.

minSdkVersion ==> этот элемент используется для установки APK (он используется в производственной среде). Например:

if(client-sdk-version   <   min-sdk-versoin )
    client-can-not-install-apk;
else
    client-can-install-apk;
0
M.Namjo