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



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



все, что он говорит:




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




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



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





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

  2. они означают одно и то же. "цель компиляции" = = "уровень API, на который нацелено приложение"

  3. что-то еще?


Я вижу, что этот вопрос был задан раньше, но один ответ просто цитирует doc, что мне непонятно.

800   9  

9 ответов:

compileSdkVersion

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

targetSdkVersion

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

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

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

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

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

как руководство oneliner:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

В идеале:

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

читать дальше из этого Великого поста Ян Лейк

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

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

я хотел бы дополнить эти ответы с пометкой:

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

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

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

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

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

enter image description here

вы увидите это в ваш build.gradle file:

enter image description here

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

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

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

А-что говорит Андроид

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

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

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

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B-то, что другие также говорят

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

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

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

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

что делать?

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

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

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

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

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

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

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

enter image description here

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

enter image description here

Comments

    Ничего не найдено.