В чем разница между минимальной версией SDK версии/целевой версии SDK и компиляцией версии SDK?

В чем разница между "min sdk version/target sdk version" и "compile sdk version"? Я знаю, что означает min и target sdk, но что означает компиляция версии sdk?

В Eclipse у меня есть min/max и target sdk, но в студии Android есть три этих параметра.

Ответ 1

Версия min sdk - это самый ранний выпуск Android SDK, который может запускаться в вашем приложении. Обычно это из-за проблемы с более ранними API-интерфейсами, отсутствием функциональности или некоторыми другими поведенческими проблемами.

Целевая версия sdk - это версия, на которую было нацелено ваше приложение. В идеале это связано с определенными условиями оптимального запуска. Если вы должны "сделать свое приложение для версии 19", это то, где это будет указано. Он может работать на ранних или последующих выпусках, но это то, к чему вы стремились. Это в основном указывает, насколько актуально ваше приложение для использования на рынке и т.д.

Скомпилированная версия sdk представляет собой версию android, которую IDE (или другие средства компиляции, я полагаю) использует для создания вашего приложения при публикации файла .apk. Это полезно для тестирования вашего приложения, так как распространять потребность в компиляции приложения при его разработке. Поскольку это будет версия для компиляции в APK, это, естественно, будет версия вашего выпуска. Аналогичным образом, желательно, чтобы этот матч соответствовал версии sdk.

Ответ 2

Версия min sdk - это минимальная версия операционной системы Android, необходимая для запуска вашего приложения.

Целевая версия SDK - это версия Android, на которой было создано ваше приложение.

SDK-версия compile - это версия Android, которую инструменты сборки используют для компиляции и сборки приложения с целью его выпуска, запуска или отладки.

Обычно версия SDK для компиляции и целевая версия SDK совпадают.

Ответ 3

Формула

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - это маркер, который определяет минимальную версию Android, на которую приложение сможет установить. Также он используется Lint для предотвращения вызова API, который не существует. Также это влияет на время сборки. Таким образом, вы можете использовать варианты сборки, чтобы переопределить minSdkVersion до максимума во время разработки. Это поможет сделать сборку быстрее, используя все улучшения, которые предоставляет нам команда Android. Например, некоторые функции Java 8 доступны только из определенной версии minSdkVersion.

targetSdkVersion - говорит системе Android, чтобы включить определенные изменения поведения.

Например:

  • Начиная с Android 6.0 (уровень API 23). Runtime Permissions. Если для targetSdkVersion установлено targetSdkVersion 22 или ниже, приложение не запрашивает у пользователя разрешения во время выполнения.

  • Начиная с Android 8.0 (уровень API 26), все notifications должны быть назначены каналу, иначе он не появится. На устройствах под управлением Android 7.1 (уровень API 25) и ниже пользователи могут управлять уведомлениями только для каждого приложения (фактически каждое приложение имеет только один канал на Android 7.1 и ниже).

  • Начиная с Android 9 (уровень API 28), Web-based data directories separated by process. Если targetSdkVersion равен 28+ и вы создаете несколько WebView в разных процессах, вы получите java.lang.RuntimeException

compileSdkVersion - на самом деле это версия платформы SDK и сообщает Gradle, какой Android SDK использует для компиляции. Если вы хотите использовать новые функции или отлаживать файлы .java из Android SDK, вам следует позаботиться о compileSdkVersion. compileSdkVersion не входит в ваш APK: он используется исключительно во compile time. Изменение вашего compileSdkVersion не меняет поведение во время выполнения. Он может генерировать, например, новые предупреждения/ошибки компилятора. Поэтому настоятельно рекомендуется всегда компилировать с последним SDK. Вы получите все преимущества новых проверок компиляции в существующем коде, избежите новых устаревших API и будете готовы использовать новые API. Еще один факт - это compileSdkVersion >= Support Library version

Вы можете прочитать больше об этом здесь. Также я бы порекомендовал вам взглянуть на пример перехода на Android 8.0.

Ответ 5

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

minSdkVersion: версия min sdk - это минимальная версия операционной системы Android, необходимая для запуска вашего приложения.

targetSdkVersion: целевая версия sdk - это версия, на которую ориентировано ваше приложение.