Формула така
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. Зміна компілятораSdkVersion не змінює поведінку часу виконання. Він може створити, наприклад, нові попередження / помилки компілятора. Тому настійно рекомендується завжди компілювати з найновішими SDK. Ви отримаєте всі переваги нових перевірок компіляції наявного коду, уникнете нещодавно застарілих API та будете готові використовувати нові API. Ще один фактcompileSdkVersion >= Support Library version
Більше про це можна прочитати тут . Також рекомендую поглянути на приклад переходу на Android 8.0.