Формула
minSdkVersion <= targetSdkVersion <= compileSdkVersion
minSdkVersion - это маркер, который определяет минимальную версию Android, на которую приложение сможет установить. Также он используется Lint для предотвращения вызова API, который не существует. Также это влияет на время сборки. Таким образом, вы можете использовать варианты сборки, чтобы переопределить minSdkVersion до максимума во время разработки. Это поможет сделать сборку быстрее, используя все улучшения, которые предоставляет нам команда Android. Например, некоторые функции Java 8 доступны только из определенной версии minSdkVersion.
targetSdkVersion - говорит системе Android, чтобы включить определенные изменения поведения.
Например:
Начиная с Android 6.0 (уровень API 23) Runtime Permissions
были введены. Если вы установили 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. Еще один пример - использование AndroidX, которое вынуждает использовать compileSdkVersion
- уровень 28. compileSdkVersion
не включен в ваш APK : он используется исключительно на compile time
. Изменение вашего compileSdkVersion не меняет поведение во время выполнения. Он может генерировать, например, новые предупреждения / ошибки компилятора. Поэтому настоятельно рекомендуется всегда компилировать с последним SDK. Вы получите все преимущества новых проверок компиляции в существующем коде, избежите новых устаревших API и будете готовы использовать новые API. Еще один фактcompileSdkVersion >= Support Library version
Вы можете прочитать больше об этом здесь . Также я бы порекомендовал вам взглянуть на пример перехода на Android 8.0.