minSdkVersion — минимални API ниво Андроида при којем апликација може бити инсталирана и покренута. Параметар се наводи у build.gradle у блоку defaultConfig и одређује доњу границу компатибилности: ако је API ниво уређаја испод вредности minSdk, систем блокира инсталацију, а Google Play не приказује апликацију таквом уређају. Према Android Developers, правилан избор minSdk је критичан за равнотежу између покривености публике и доступности савремених API-ја.
Главно
minSdkVersion — целобројни параметар у build.gradle који поставља минимални API ниво Андроида за инсталацију апликације. Ако је API ниво уређаја испод наведене вредности, PackageManager блокира инсталацију, а Google Play Store скрива апликацију из резултата претраге за такав уређај. minSdkVersion се уписује у AndroidManifest.xml у фази изградње кроз таг <uses-sdk android:minSdkVersion> и проверава се при свакој инсталацији.
Вредност minSdkVersion је компромис између покривености публике и приступа новим API-јима. Што је minSdk нижи, више уређаја може да инсталира апликацију, посебно у регионима у развоју где су стари Андроид паметни телефони популарни. Што је minSdk виши, мање кода уназадне компатибилности је потребно и више савремених API-ја је доступно без провера у време извршавања. Android Jetpack и библиотеке AndroidX пружају бекпортове многих нових API-ја на старе верзије Андроида, што омогућава избор нижег minSdk без губитка функционалности.
minSdkVersion утиче на све фазе развоја: статичку анализу (lint користи minSdk за упозорења), компатибилност зависности (библиотеке могу захтевати свој minSdk), тестирање (потребно је тестирати на уређајима са minSdk) и Google Play Console (покривеност публике се израчунава на основу minSdk). Промена minSdkVersion је једна од најодговорнијих одлука у подешавању пројекта, јер утиче на код, тестове и корисничку базу.
Build.gradle.kts (Kotlin DSL) — савремени стандард у Андроид пројектима. Параметар minSdk се поставља у блоку defaultConfig на нивоу модула. Вредност се може преиначити за различите типове изградње и производне укусе, што омогућава тестирање на нижим API-јима без промене главне вредности.
// build.gradle.kts — основно подешавање minSdk
android {
namespace = "com.example.myapp"
compileSdk = 36
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26 // Android 8.0 Oreo
targetSdk = 36
versionCode = 1
versionName = "1.0.0"
}
// Преиначење minSdk за различите flavor-е
flavorDimensions += "tier"
productFlavors {
create("free") {
minSdk = 26
}
create("premium") {
minSdk = 26
}
}
}У примеру minSdk = 26 одговара Андроид 8.0 Oreo. Ово је популарна вредност у 2026. години: према Android Studio Distribution Dashboard одсеца само ~15% уређаја. compileSdk = 36 даје приступ свим API-јима Андроида 16, а targetSdk = 36 укључује бихејвиоралне промене последње верзије. За debug изградње minSdk се може спустити за тестирање на старим емулаторима.
Избор minSdkVersion — стратешка одлука заснована на анализи циљне публике, захтева API-ја и екосистема библиотека. Не постоји јединствена исправна вредност за све пројекте. У 2026. години Android Studio препоручује minSdk = 26 (Андроид 8.0) као основни ниво за нове пројекте, али за B2B апликације или корпоративна решења прихватљиве су ниже или више вредности.
Први фактор — Distribution Dashboard. Android Studio пружа статистику активних уређаја по API нивоу на основу података Google Play-а, ажурирану месечно. minSdkVersion треба да покрива најмање 90-95% активних уређаја циљног тржишта. За међународне апликације са публиком у Африци и Југоисточној Азији minSdk треба спустити на 21 (Андроид 5.0) због високог удела старих уређаја.
Други фактор — захтеви зависности. Свака библиотека има сопствени minSdkVersion наведен у свом манифесту. Ако библиотека захтева minSdk 29, а апликација — minSdk 26, изградња ће се завршити грешком manifest merger. Савремене библиотеке Google Play Services имају minSdk 21, Firebase — minSdk 21, већина Jetpack библиотека — minSdk 21 или 26, Compose BOM — minSdk 21. За Compose минимални праг — API 21.
Трећи фактор — потребни API-ји. Ако кључна функционалност апликације захтева API доступан само од одређеног нивоа (нпр. PhotoPicker — API 34, Predicted Navigation — API 35), то може оправдати повећање minSdk. Међутим, чешће се користи комбинација AndroidX бекпортова (Activity Result API, NotificationCompat) и провера у време извршавања да би се задржао низак minSdk.
| minSdk | Андроид верзија | Покривеност (~2026) | Препорука |
|---|---|---|---|
| 21 | 5.0 Lollipop | 97% | Максимална покривеност, много fallback кода |
| 23 | 6.0 Marshmallow | 95% | Runtime Permissions доступни изворно |
| 26 | 8.0 Oreo | 85% | Препоручени основни ниво |
| 29 | 10 Q | 72% | Scoped Storage изворно, мање тестова |
| 31 | 12 Snow Cone | 55% | Нишне апликације, савремени API-ји |
Корак 1: отворите Android Studio, File → New Project и погледајте препоручени minSdk у чаробњаку. Корак 2: проверите Distribution Dashboard у Android Studio (View → Tool Windows → App Inspection → Distribution Dashboard). Корак 3: анализирајте зависности пројекта — извршите изградњу и поправите конфликте manifest merger. Корак 4: процените који API-ји нивоа X се стварно користе без бекпортова. Корак 5: поставите minSdk као минималну вредност која покрива 90%+ циљне публике и компатибилна је са свим зависностима.
Расподела уређаја по API нивоу — динамички показатељ који се мења сваког квартала. Према Android Studio Distribution Dashboard за јун 2026. године, око 85% активних Андроид уређаја ради на API 26 (Андроид 8.0) и више, 72% — на API 29 (Андроид 10) и више, 55% — на API 31 (Андроид 12) и више. Кинеско тржиште има сопствену статистику због недостатка Google Play Services на многим Huawei уређајима.
GMS уређаји (Google Mobile Services) ажурирају се брже: удео API 31+ на њима достиже 68% захваљујући обавезним захтевима Google Play-а према произвођачима. Non-GMS уређаји (Huawei, Honor, неки кинески брендови) имају старију расподелу: удео API 31+ на њима је око 35%. Ако је апликација оријентисана на међународно тржиште, ослањајте се на глобалну статистику. Ако на кинеско — узмите у обзир non-GMS сегмент.
| API ниво | Андроид верзија | Глобална покривеност | Non-GMS покривеност |
|---|---|---|---|
| 21-25 | 5.0-6.0 | ~2% | ~5% |
| 26-28 | 8.0-9.0 | ~13% | ~20% |
| 29-30 | 10-11 | ~15% | ~25% |
| 31-33 | 12-13 | ~20% | ~25% |
| 34-35 | 14-15 | ~30% | ~15% |
| 36 | 16 | ~20% | ~10% |
Закључак: за међународну апликацију minSdk 26 покрива 85% уређаја уз минималне трошкове уназадне компатибилности. За апликације са публиком у регионима у развоју minSdk 21 (97% покривености) је оправдан, али ће захтевати више кода за рад са застарелим API-јима. За Enterprise апликације са контролисаним парком уређаја можете поставити minSdk 31 и потпуно се ослободити fallback кода.
Уназадна компатибилност — главна тешкоћа при ниском minSdkVersion. AndroidX (раније Support Library) пружа бекпортове савремених API-ја на старе верзије Андроида: AppCompatActivity за Material Design, FragmentManager, Loader, NotificationCompat, PreferenceFragmentCompat и десетине других компоненти. Коришћење AndroidX еквивалената уместо изворних API-ја — први корак ка компатибилности.
lint (статички анализатор Android Studio-а) скенира код на позиве API-ја изнад minSdkVersion. Ако је метод означен са @RequiresApi са API нивоом вишим од minSdk и позван без провере, lint истиче грешку. За потискивање упозорења користите анотацију @SuppressLint("NewApi") на методу или @RequiresApi(Build.VERSION_CODES.TIRAMISU) на целу функцију. Провере у време извршавања кроз Build.VERSION.SDK_INT — основни механизам безбедног позивања нових API-ја на старим уређајима.
// Пример уназадне компатибилности: PhotoPicker (API 34+) и fallback
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
class ImagePickerActivity : AppCompatActivity() {
// Activity Result API (AndroidX) — ради на било ком API нивоу
private val pickImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
uri?.let { displayImage(it) }
}
fun pickImage() {
// PhotoPicker доступан само од API 34
if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
// Користимо PhotoPicker (API 34+)
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
} else {
// Fallback: GetContent (ради на свим верзијама)
pickImageLauncher.launch("image/*")
}
}
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
fun usePhotoPickerOnly() {
// Овај метод се не може позвати на API < 34
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
}
}Класа ImagePickerActivity демонстрира три нивоа уназадне компатибилности. Activity Result API из AndroidX-а ради на свим API нивоима, па за основни избор слике minSdk није битан. PhotoPicker (ACTION_PICK_IMAGES) је доступан само од API 34 и позива се под провером SDK_INT са fallback-ом на GetContent. Метод usePhotoPickerOnly је означен са @RequiresApi — lint неће дозволити његово позивање без провере. AppCompat из AndroidX-а аутоматски прилагођава тему, фрагменте и анимације верзији оперативног система.
Библиотеке (AAR, JAR) такође имају minSdkVersion наведен у свом манифесту. При повезивању библиотеке Gradle проверава компатибилност: ако је minSdk библиотеке већи од minSdk апликације, изградња пада са грешком. За јавне библиотеке препоручује се навођење минималног могућег minSdk (21 у већини случајева) да се не ограничавају потрошачи. Ако библиотека захтева API 29+, губи ~28% потенцијалних корисника.
Вишемодулни пројекти могу имати различите minSdkVersion за различите модуле. На пример, модул :core:network може имати minSdk 26, а модул :feature:camera — minSdk 29 (због CameraX-а са одређеним захтевима). Google Play захтева да minSdk главног модула :app буде нижи или једнак minSdk-у свих зависних модула. У пракси сви модули једне апликације обично имају исти minSdk ради поједностављења одржавања.
// build.gradle.kts — библиотечки модул са ниским minSdk
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.mylibrary"
compileSdk = 36
defaultConfig {
minSdk = 21 // Минималан за максималну покривеност
targetSdk = 36
}
}
dependencies {
// AndroidX Core — minSdk 21, додаје бекпортове
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
}Библиотечки модул са minSdk = 21 компатибилан је са 97% уређаја и не ограничава потрошаче. Ако библиотека користи API изнад 21, програмер мора додати провере у време извршавања или навести @RequiresApi на одговарајућим методима. AndroidX Core KTX (minSdk 21) пружа бекпортове за Context, Bundle, Locale и друге системске класе, омогућавајући библиотеци да задржи низак minSdk.
Грешке при избору minSdk могу коштати хиљаде инсталација или недеље додатног развоја. Прва типична грешка — копирање minSdk из шаблона пројекта без анализе Distribution Dashboard-а. Многи програмери остављају minSdk = 21 из Android Studio Template-а, иако би за њихову публику minSdk 26 био довољан и смањио број провера SDK_INT у коду.
Друга грешка — превисок minSdk без узимања у обзир тржишта. Ако поставите minSdk = 31 (Андроид 12) за међународну апликацију, губите ~45% уређаја. За стартап или апликацију са мас Publikom ovo je katastrofa. Увек проверавајте Distribution Dashboard пре подизања minSdk и користите A/B тестирање у Google Play Console ако нисте сигурни.
Трећа грешка — игнорисање minSdk зависности. При додавању нове библиотеке проверавајте њен minSdk у документацији или POM фајлу. Firebase ML Kit захтева minSdk 21, неке прилагођене библиотеке за камеру захтевају minSdk 29. Ако manifest merger падне у продукцији због нове библиотеке, поправка може потрајати данима.
// Пример: провера компатибилности API-ја у време извршавања
fun checkFeatureAvailability(): Boolean {
// Типична грешка — позив API-ја без провере SDK_INT
return when {
VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
// API 34+ — користимо PhotoPicker
true
}
VERSION.SDK_INT >= VERSION_CODES.Q -> {
// API 29-33 — користимо MediaStore
true
}
else -> {
// API < 29 — используем ACTION_GET_CONTENT
true
}
}
}Исправна архитектура провера API нивоа — when са опсезима који покривају све могуће вредности од minSdk до compileSdk. Кључно правило: сваки позив API-ја нивоа X мора бити заштићен провером VERSION.SDK_INT за све уређаје са API нивоом од minSdk до X. lint помаже у откривању непроверених позива, али не може гарантовати потпуну покривеност за динамички код.
Често постављана питања
minSdkVersion — минимални API ниво Андроида при којем апликација може бити инсталирана. Наводи се у build.gradle у блоку defaultConfig. Ако је API ниво уређаја испод minSdk, инсталацију блокира систем, а Google Play не приказује апликацију таквом уређају. minSdk утиче на покривеност публике: minSdk = 26 покрива ~85% уређаја, minSdk = 21 — ~97%.
minSdkVersion се бира на основу статистике Distribution Dashboard у Android Studio и циљне публике. За масовне апликације препоручује се minSdk 26 (Андроид 8.0) — покрива ~85% уређаја. За B2B апликације можете поставити minSdk 31 (Андроид 12). Важно је проверити да све коришћене библиотеке подржавају изабрани minSdk. За апликације на Compose минимални праг — API 21.
Нове API-је можете користити при ниском minSdkVersion путем AndroidX-а са бекпортовима (AppCompat, Core KTX, Activity Result API) или путем провера у време извршавања Build.VERSION.SDK_INT са fallback кодом. Анотација @RequiresApi указује lint-у да метод захтева одређени API ниво. AndroidX Material Components такође пружају уназадну компатибилност за UI компоненте. Без провера апликација ће пасти са NoSuchMethodError.
Ако библиотека има minSdkVersion виши од апликације, Android Studio приказује грешку изградње: Manifest merger failed. Решење — подићи minSdk апликације на ниво библиотеке, пронаћи алтернативу са нижим minSdk или користити омотач. Већина Jetpack библиотека има minSdk 21 или 26. Firebase ML Kit захтева minSdk 21, CameraX — minSdk 21.
Повећање minSdkVersion након објављивања је могуће, али може довести до губитка корисника на старим уређајима. Препоручује се повећање minSdk не више од 1-2 API нивоа одједном, уз анализу статистике активних уређаја у Google Play Console. Смањење minSdkVersion је технички могуће, али захтева проверу кода на позиве API-ја изнад новог minSdk и може захтевати преписивање делова кода.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође