Я посмотрел документацию для сборки с Gradle, но я все еще не уверен, в чем разница между compileSdkVersion
и targetSdkVersion
.
Все это говорит:
compileSdkVersion
Свойство определяет цель компиляции.
Ну, что такое "цель компиляции"?
Я вижу два возможных способа интерпретировать это:
compileSdkVersion
это версия компилятора , используемого в создании приложения, в то время какtargetSdkVersion
это «уровень API , который целевых приложений» . (Если бы это было так, я бы предположил,compileSdkVersion
должно быть больше или равноtargetSdkVersion
?- Они имеют в виду одно и то же. "цель компиляции" == "уровень API, на который нацелено приложение"
- Что-то другое?
Я вижу, что этот вопрос задавался ранее, но один ответ просто цитирует документ, что мне непонятно.
android
sdk
android-gradle-plugin
android-build
coder123
источник
источник
Ответы:
compileSdkVersion
Это
compileSdkVersion
версия API, с которой приложение скомпилировано. Это означает, что вы можете использовать функции Android API, включенные в эту версию API (очевидно, как и все предыдущие версии). Если вы попробуете использовать функции API 16, но установитеcompileSdkVersion
15, вы получите ошибку компиляции. Если вы установилиcompileSdkVersion
значение 16, вы все равно сможете запускать приложение на устройстве API 15, если пути выполнения вашего приложения не пытаются вызывать какие-либо API, специфичные для API 16.targetSdkVersion
Это не
targetSdkVersion
имеет никакого отношения к тому, как ваше приложение компилируется или какие API вы можете использовать.targetSdkVersion
Предполагается указать , что вы протестировали приложение на (предположительно до и включая) версию , которую вы укажете. Это больше похоже на сертификацию или подпись, которую вы даете ОС Android в качестве подсказки о том, как она должна обращаться с вашим приложением с точки зрения функций ОС.Например, в документации говорится:
ОС Android во время выполнения может изменить стилизацию или иное исполнение вашего приложения в контексте ОС в зависимости от этого значения. Есть несколько других известных примеров, на которые влияет это значение, и этот список, вероятно, будет только увеличиваться со временем.
Для практических целей большинство приложений захотят установить
targetSdkVersion
последнюю версию API. Это гарантирует, что ваше приложение будет выглядеть как можно лучше на самых последних устройствах Android. Если вы не укажетеtargetSdkVersion
, то по умолчанию используетсяminSdkVersion
.источник
targetSdkVersion
скорее всего, будет выше, чемcompileSdkVersion
и по праву. Это означает, что, хотя вы разработали приложение, например, для API 16, оно по-прежнему нормально работает на API 21 (Lollipop), и вам следует увеличить значениеtargetSdkVersion
до 21, чтобы указать, что для ОС Android нормально применять любые стили Lollipop, которые могут существовать в вашем приложении.compileSdkVersion
на более высокую версию будет означать, что вы хотите использовать некоторые новые API, которые включены только в этот конкретный выпуск. Если вы не планируете использовать какие-либо функции, специфичные для Lollipop, в своем приложении, то на самом деле (как правило) нет причин устанавливатьcompileSdkVersion
значение 21. Однако ваше приложение, скорее всего, будет нормально работать на API 21 как есть, поэтому вы меняетеtargetSdkVersion
чтобы указать, что ваше приложение работает в API 21 так, как вы ожидаете (цель), но вы не используете API-интерфейсы, специфичные для 21 (компиляция), и поэтомуcompileSdkVersion
в этом примере вы можете остаться на уровне 15.В качестве путеводителя:
Идеально:
Читайте больше из этого великого поста Яна Лейка
источник
minSdkVersion
что приложение самого низкого уровня API-устройстваcan
работает? Предположительно, потому что он использует определенные API, доступныеminSdkVersion
начиная с?minSdkVersion
15 (то есть ICS 4.0.3), устройства с API 14 (то есть ICS 4.0) не должны иметь возможность устанавливать приложение. И, по крайней мере, на данный момент, приложение будет работать на 15, 16, 17, 18, 19 (20, но это для старой версии OS), 21, 22, 23, 24, 25, 26, 27, 28 и т. Д. в будущем (вероятно)compileSdkVersion
Должна быть самая новая стабильная версия. ЭтоtargetSdkVersion
должно быть полностью проверено и меньше или равноcompileSdkVersion
.источник
targetSdkVersion
более низкую версию . Таким образом, этоtargetSdkVersion
должен быть тот, который вы проверили и знаете точное поведение, и он может быть <= последней стабильной версией.compileSdkVersion
должна быть новейшая стабильная версия» следует добавить суффикс «которого вы используете функции API». Нет смысла компилировать по API 27 (последний стабильный API на сегодняшний день), если вы используете только функции более низких версий API. Однако последняя стабильная версия может включать некоторые функции, которые автоматически становятся лучше, например повышенная безопасность или эффективная компиляция с обратной совместимостью. Поэтому желательно использовать самую последнюю или хотя бы последнюю стабильную версию, но это «не должно быть» самой последней версией как таковой .Позднее к игре ... и есть несколько хороших ответов выше - по сути, это
compileSdkVersion
версия API, с которой приложение скомпилировано, аtargetSdkVersion
указывает на версию, с которой тестировалось приложение.Я хотел бы дополнить эти ответы следующими примечаниями:
Это
targetSdkVersion
влияет на то, как запрашиваются разрешения :targetSdkVersion
- 23 или выше, приложение запрашивает разрешения у пользователя во время выполнения.targetSdkVersion
имеет значение 22 или ниже, система просит пользователя предоставить разрешения при установке приложения пользователем.Если
compileSdkVersion
она выше, чем версия, заявленная вашим приложениемtargetSdkVersion
, система может включить режимы совместимости, чтобы приложение продолжало работать так, как вы ожидаете. ( ссылка )С каждым новым выпуском Android ...
targetSdkVersion
следует увеличить до уровня API, а затем тщательно протестировать приложение на соответствующей версии платформыcompileSdkVersion
с другой стороны, не нужно менять, если вы не добавляете функции исключительно в новую версию платформыtargetSdkVersion
часто (изначально) меньше, чемcompileSdkVersion
, нередко можно увидеть хорошо поддерживаемое / устоявшееся приложение сtargetSdkVersion > compileSdkVersion
источник
targetSdkVersion
вы можете увидеть поведение совместимости. Я не верю, что это имеет какое-либо отношение кcompileSdkVersion
.The CompileSdkVersion
версия платформы SDK, с которой ваше приложение работает для компиляции и т. д. В процессе разработки (вы всегда должны использовать самую последнюю версию) Поставляется с версией API, которую вы используетеВы увидите это в своем
build.gradle
файле:targetSdkVersion:
содержит информацию, которую ваше приложение отправляет ПОСЛЕ процесса разработки в магазин приложений, что позволяетTARGET the SPECIFIED version of the Android platform
. В зависимости от функциональности вашего приложения оно может ориентироваться на версии API ниже текущей. Например, вы можете настроить таргетинг на API 18, даже если текущая версия равна 23.Внимательно посмотрите на эту официальную страницу Google .
источник
В
compiledSdkVersion
предыдущих ответах я вижу много различий , поэтому постараюсь немного уточнить здесь, следуя веб-странице Android.A - Что говорит Android
Согласно https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :
Итак, это будет правильный порядок в соответствии с Android:
compiledSdkVersion = minSdkVersion <= targetSdkVersion
Б - Что говорят другие
Некоторые люди предпочитают всегда использовать самый высокий скомпилированный SkdVersion. Это потому, что они будут полагаться на подсказки кода, чтобы проверить, используют ли они более новые функции API, чем minSdkVersion, таким образом либо изменяя код, чтобы не использовать их, либо проверяя версию пользовательского API во время выполнения, чтобы условно использовать их с откатами для более старых версий API.
Подсказки об устаревших видах использования также появляются в коде, давая вам знать, что что-то устарело на более новых уровнях API, так что вы можете реагировать соответствующим образом, если хотите.
Таким образом, это будет правильный порядок в соответствии с другими:
minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)
Что делать?
Это зависит от вас и вашего приложения.
Если вы планируете предлагать различные функции API в соответствии с уровнем API пользователя во время выполнения, используйте опцию B. Вы получите подсказки о функциях, которые вы используете при кодировании. Просто убедитесь, что вы никогда не используете более новые функции API, чем minSdkVersion, без проверки уровня пользовательского API во время выполнения, в противном случае ваше приложение вылетит. Этот подход также имеет преимущество в изучении того, что нового и старого в процессе кодирования.
Если вы уже знаете, что нового или старого, и вы разрабатываете одноразовое приложение, которое наверняка никогда не будет обновлено, или вы уверены, что не собираетесь предлагать новые функции API в зависимости от условий, тогда используйте опцию A. Вы не будете беспокоиться с устаревшими подсказками, и вы никогда не сможете использовать новые функции API, даже если у вас есть соблазн сделать это.
источник
<uses-sdk>
Документация крайне расплывчаты и неоднозначны.Мои 2 цента: скомпилируйте с любой версией SDK, но будьте осторожны, чтобы не вызывать API, которые не поддерживает ваша «минимальная версия SDK». Это означает, что вы можете «скомпилировать» последнюю версию SDK.
Что касается «целевой версии», то это просто относится к тому, на что вы планировали нацелиться в первую очередь и, возможно, проверили. Если вы не провели должной осмотрительности, то это способ сообщить Android, что он должен выполнить некоторые дополнительные проверки, прежде чем развертывать ваше приложение, скажем, «Lollipop» на «Oreo».
Таким образом, «целевая версия» явно не ниже вашей «минимальной версии SDK», но она не может быть выше, чем ваша «скомпилированная версия».
источник
Не отвечая на ваши прямые вопросы, поскольку уже есть много подробных ответов, но стоит упомянуть, что в отличие от документации Android, Android Studio предлагает использовать одну
compileSDKVersion
и ту же версию для иtargetSDKVersion
.источник
compiledSdkVersion ==> какая версия SDK должна компилировать ваш код в байт-код (он используется в среде разработки): лучше использовать последнюю версию SDK.
minSdkVersion ==> этот элемент используется для установки APK (он используется в производственной среде). Например:
источник
Краткое резюме:
Для minSDKversion, смотрите последнюю запись в дескрипторе Twitter: https://twitter.com/minSdkVersion
TargetSDKversion: смотрите последнюю запись в дескрипторе твиттера: https://twitter.com/targtSdkVersion или используйте последний уровень API, как указано на devel https://developer.android.com/guide/topics/manifest/uses-sdk-element. HTML
Скомпилированная версия: сделать так же, как TargetSDKversion
maxSdkVersion: совет от Android - не устанавливать это, поскольку вы не хотите ограничивать свое приложение, чтобы оно не выполнялось в будущих выпусках Android
источник
Параметры приложения свойств проекта Android в Visual Studio 2017 (15.8.5) объединяют их:
источник