В чем разница между минимальной версией SDK / целевой версией SDK и версией компиляции SDK?
В чем различия между "min sdk version/target sdk version" и "compile sdk version"?
Я знаю, что означает min и target sdk, но что означает версия sdk для компиляции? В затмении у меня есть мин / макс и целевой SDK, но в Android Studio есть эти три настройки.
8 ответов
Чтобы уточнить ответ @anuraagy:
min sdk version Это самая ранняя версия Android SDK, на которой может работать ваше приложение. Обычно это происходит из-за проблемы с более ранними API, отсутствия функциональности или из-за других поведенческих проблем.
target sdk version Версия, на которую было ориентировано ваше приложение. В идеале это из-за каких-то оптимальных условий работы. Если бы вы должны были "сделать ваше приложение для версии 19", это то, где это будет указано. Он может работать на более ранних или более поздних выпусках, но это то, к чему вы стремились. Это в основном указывает на то, насколько актуально ваше приложение для использования на рынке и т. Д.
версия compile sdk Версия android, которую ваша IDE (или другие способы компиляции, я полагаю) использует для создания своего приложения при публикации файла.apk. Это полезно для тестирования вашего приложения, так как это общая необходимость для компиляции вашего приложения по мере его разработки. Так как это будет версия для компиляции в APK, это, естественно, будет версия вашего релиза. Также желательно, чтобы в этом матче была указана версия SDK.
Я не хотел срывать чужой ответ, но я действительно надеюсь, что это проливает некоторый свет на различие этих трех терминов.
Формула
minSdkVersion <= targetSdkVersion <= compileSdkVersion
minSdkVersion - это маркер, который определяет минимальную версию Android, на которую приложение сможет установить. Также он используется Lint для предотвращения вызова API, который не существует. Также это влияет на время сборки. Таким образом, вы можете использовать варианты сборки, чтобы переопределить minSdkVersion до максимума во время разработки. Это поможет сделать сборку быстрее, используя все улучшения, которые предоставляет нам команда Android. Например, некоторые функции Java 8 доступны только из определенной версии minSdkVersion.
targetSdkVersion - говорит системе Android, чтобы включить определенные изменения поведения.
Хороший пример - опасные разрешения (из 23 API). Если вы установите для targetSdkVersion значение 22, ваше приложение не будет запрашивать у пользователя разрешения во время выполнения.
Начиная с Android 8.0 (уровень API 26), все уведомления должны быть назначены каналу, иначе он не появится. На устройствах под управлением Android 7.1 (уровень API 25) и ниже пользователи могут управлять уведомлениями только для каждого приложения (фактически каждое приложение имеет только один канал на Android 7.1 и ниже).
compileSdkVersion - фактически это версия платформы SDK и сообщает Gradle, какой Android SDK использует для компиляции. Если вы хотите использовать новые функции или отлаживать файлы.java из Android SDK, вам следует позаботиться о compileSdkVersion. Еще один факт - это compileSdkVersion >= версия библиотеки поддержки
Вы можете прочитать больше об этом здесь. Также я бы порекомендовал вам взглянуть на пример перехода на Android 8.0
Хороший вопрос!
min sdk version - это минимальная версия операционной системы Android, необходимая для запуска вашего приложения.
target sdk version - версия Android, на которой было создано ваше приложение.
Версия SDK compile - это версия Android, которую инструменты сборки используют для компиляции и сборки приложения с целью его выпуска, запуска или отладки.
Обычно версия SDK для компиляции и целевая версия SDK совпадают.
compileSdkVersion: compileSdkVersion - это версия API, с которой скомпилировано приложение. Это означает, что вы можете использовать функции Android API, включенные в эту версию API (как и все предыдущие версии, очевидно). Если вы попытаетесь использовать функции API 16, но установите для compileSdkVersion значение 15, вы получите ошибку компиляции. Если вы установите compileSdkVersion на 16, вы все равно сможете запускать приложение на устройстве с API 15.
minSdkVersion: минимальная версия sdk - это минимальная версия операционной системы Android, необходимая для запуска вашего приложения.
targetSdkVersion: целевая версия sdk - это версия, на которую ориентировано ваше приложение.
Ссылка - Средняя статья Паулины Садовской
- compileSdkVersion определяет, какая версия Android SDK будет использоваться Gradle для компиляции вашего приложения.
Например:
В Android 12, поэтому в SDK версии 31 был представлен новый API, который позволяет нам легко реализовать экран-заставку. В этом новом API заставку можно настроить с помощью следующих свойств:
Если вы хотите использовать этот API в своем приложении, вам сначала необходимо:
i) download SDK version 31 in Android Studio,
ii) and then: update compileSdkVersion to 31 in your app.
Только тогда вы сможете увидеть эти новые свойства. И только после этого вы можете использовать этот новый API экрана-заставки в своем коде.
2.targetSdkVersion - это свойство, которое сообщает системе, для какой версии Android приложение было разработано и протестировано.
Если пользователь запускает ваше приложение на устройстве с версией Android, которая выше, чем targetSdkVersion, определенная в вашем приложении, для новых функций Android система может ввести некоторую обратную совместимость, чтобы ваше приложение по-прежнему выглядело и работало таким образом, чтобы вы его спроектировали.
Например:
В Android 12 изменен внешний вид пользовательских уведомлений. Раньше они могли использовать всю область уведомлений, но в системе Android 12 стандартный шаблон применяется ко всем настраиваемым уведомлениям, чтобы они выглядели более единообразно. Если ваша targetSdkVersion меньше 31, система будет считать, что вы не тестировали эту функцию, и будет отображать уведомления старым способом, чтобы минимизировать риск того, что уведомление не будет отображаться должным образом. Только после обновления целевой версии SDK до 31 будет использоваться новый вид уведомления.
Много хороших объяснений в более ранних ответах, но ни одна ссылка на официальные документы. Если интересно, см. https://developer.android.com/guide/topics/manifest/uses-sdk-element для:
- minSdkВерсия:
Система Android не позволит пользователю установить приложение, если уровень API системы ниже значения, указанного в этом атрибуте.
Кроме того: если вы используете NDK для запуска собственного кода, это также влияет на доступность API NDK. (https://developer.android.com/ndk/guides/sdk-версии )
- targetSdkVersion:
Этот атрибут информирует систему о том, что вы протестировали целевую версию, и система не должна включать никаких режимов совместимости, чтобы поддерживать прямую совместимость вашего приложения с целевой версией. Приложение по-прежнему может работать в более старых версиях (вплоть до minSdkVersion).
Поскольку Android развивается с каждой новой версией, некоторые функции и даже внешний вид могут измениться. Однако, если уровень API платформы выше, чем версия, объявленная targetSdkVersion вашего приложения, система может включить поведение совместимости, чтобы ваше приложение продолжало работать так, как вы ожидаете. Вы можете отключить такое поведение совместимости, указав targetSdkVersion в соответствии с уровнем API платформы, на которой он работает. Например, установка этого значения на «11» или выше позволяет системе применять новую тему по умолчанию (Holo) к вашему приложению при работе на Android 3.0 или выше, а также отключает режим совместимости экрана при работе на больших экранах (поскольку поддержка API уровень 11 неявно поддерживает большие экраны).
Таким образом, предполагается, что вы разработали приложение с учетом целевого API и проверили, что все выглядит/ведет себя так, как вы ожидали, особенно если вы пытаетесь использовать функции, представленные в этом API. Кроме того, ваш код должен быть в состоянии работать с платформами, на которых нет этой новой функции (вплоть до вашего
minSdkVersion
, например, проверка того, что ваш код обрабатывает отсутствующие API, которые вы правильно используете, и т. д.). Но даже более новые версии Android могут что-то делать, чтобы поддерживать работу вашего приложения, которое в противном случае могло бы сломаться или выглядеть еще хуже, если бы ОС не включала «поведение совместимости».
См. https://developer.android.com/studio/build для:
- скомпилироватьSdkVersion:
compileSdkVersion указывает уровень Android API, который Gradle должен использовать для компиляции вашего приложения. Это означает, что ваше приложение может использовать функции API, включенные в этот уровень API и ниже.
В идеале вы должны установить целевые и скомпилированные версии одинаковыми для самого высокого выпуска, и, конечно, вам не нужно использовать какие-либо новые функции. Но вы можете сохранить свою цель в более старой версии, которую вы уже выпустили, используя более новую версию компиляции для улучшения предупреждений/ошибок, пока вы не будете готовы обновить целевую версию. В прошлом это также позволяло использовать новые функции языка Java в своем коде с обновлением плагина Android Gradle, независимо от целевых API Android.
Наконец, не забывайте о более поздних требованиях Google к целевому уровню API , которые в основном требуют, чтобы вы выпустили сборку с актуальными уровнями API к определенной дате, если вы хотите по-прежнему быть доступной для пользователей в магазине Play, которые используют ОС новее, чем ваш целевой API. Это сделано для того, чтобы побудить сообщество разработчиков приложений сделать доступными новые улучшения производительности/безопасности (например, предоставить пользователю дополнительные параметры конфиденциальности при запросе информации о местоположении) .
В каждой версии Android, выпущенной после 9, перечислены изменения в поведении , которые повлияют на все приложения, независимо от вашего устройства.
targetSdkVersion
(например , вот Android 12 ), и что меняется, когда вы специально на него ориентируетесь (например, изменения в поведении: приложения, ориентированные на Android 12. Когда следующая версия находится в предварительной версии, самое время начать проверять совместимость вашего приложения с предстоящим выпуском, даже если просто любые режимы совместимости подходят без изменения вашего
compileSdkVersion
, если вы еще не готовитесь к его таргетингу. Инструменты платформы совместимости могут помочь в этом и при переходе на использование новых API.
Смотрите здесь, лучше указывать в целевой версии SDK последнюю выпущенную версию API: В чем разница между compileSdkVersion и targetSdkVersion?
Вот небольшой ясный и простой способ понять -
Минимальное значение minSdkVersion должно быть ниже, чтобы обеспечить максимальный охват устройств Android, на которых будет установлено приложение.
compileSdkVersion требуется при разработке приложения для использования новейших и оптимизированных API-интерфейсов Android.
tarketSkdVersion — это последняя версия ОС Android, на которой вы хотите запустить свое приложение, чтобы добиться полной оптимизации ресурсов Android.
Примечание - пожалуйста, поправьте меня, если есть ошибка. Благодарность