API Level Android — Android platformasining ma'lum bir reliziga yagona mos keladigan butun sonli identifikator. OTning har bir versiyasi o'zining noyob raqamiga ega: Android 14 = API 34, Android 15 = API 35. Dasturchi build.gradle-da uchta parametrni — minSdkVersion, targetSdkVersion va compileSdkVersion — boshqarib, moslik va yangi funksiyalarga kirishni nazorat qiladi. Android Developers ga ko'ra, to'g'ri API Level tanlash xavfsizlik va auditoriya qamrovi uchun muhimdir.
Asosiy fikrlar
API Level Android — Android Framework API ning har bir ommaviy reliziga tayinlanadigan butun sonli identifikator. Birinchi reliz Android 1.0 API Level 1 ga ega edi, Android 1.5 — API Level 3, Android 2.2 — API Level 8, Android 4.0 — API Level 14, Android 8.0 — API Level 26, Android 12 — API Level 31, Android 14 — API Level 34, Android 15 — API Level 35, Android 16 (2025) — API Level 36. Har bir yangi API Level yangi sinflar, metodlar, konstantalar, ruxsatnomalar qo'shishi va mavjudlarning xatti-harakatini o'zgartirishi mumkin.
API Level har bir reliz bilan qat'iy 1 ga oshmaydi. Masalan, Android 4.4W (Wear) API 20 ga ega, Android 5.0 esa API 21 ga. Bo'shliqlar ichki iteratsiyalar va Wear OS qurilmalari bilan bog'liq. Dasturchi uchun versiya nomini (KitKat, Lollipop, Tiramisu) emas, balki uning API Level ini bilish muhim — kodda moslik tekshiruvlari uchun aynan shu ishlatiladi.
API Level ning asosiy maqsadi — orqaga moslik. API 34 ga qarshi kompilyatsiya qilingan ilova API 34 va undan past qurilmalarda ishlashi mumkin (agar tekshirmasdan yangi API larni ishlatmasa). Android Runtime (ART) tizim darajasida API chaqiruvlarini tekshiradi va ilovaning targetSdkVersion iga qarab xatti-harakat o'zgarishlarini qo'llaydi.
Ilovani o'rnatishda PackageManager qurilmaning API Level i AndroidManifest.xml dagi minSdkVersion >= ekanligini tekshiradi. Agar shart bajarilmasa — o'rnatish "App not installed" xabari bilan bloklanadi. Ish vaqti davomida Android Runtime yuqori API Level talab qiladigan API chaqiruvlarini kuzatadi va agar metod joriy versiyada mavjud bo'lmasa, NoSuchMethodError yoki UnsatisfiedLinkError yaratadi.
| Komponent | API Level ni boshqarishdagi roli |
|---|---|
| PackageManager | O'rnatish vaqtida minSdkVersion ni tekshiradi |
| Android Runtime (ART) | Ish vaqtida API moslik tekshiruvlarini amalga oshiradi |
| Google Play Store | Ilovalarni qurilmaning API Level i bo'yicha filtrlaydi |
| SDK Manager | Kerakli API Level ostida kompilyatsiya uchun platformalarni yuklab oladi |
| lint | Statik analizator, minSdk dan yuqori API ishlatish haqida ogohlantiradi |
build.gradle faylida (Module: app) dasturchi uchta API Level parametrini belgilaydi: minSdkVersion, targetSdkVersion va compileSdkVersion. Ularni aralashtirish boshlang'ich Android dasturchilarining eng keng tarqalgan xatolaridan biridir. Har bir parametr moslikning turli jihati uchun javobgardir va ularning qiymatlari mos bo'lishi kerak.
minSdkVersion — ilovani o'rnatish va ishga tushirish mumkin bo'lgan minimal API Level. minSdk dan past API Level ga ega qurilmalar Google Play da ilovani ko'rmaydi va uni o'rnatolmaydi. Qiymat maqsadli auditoriyaga qarab tanlanadi: minSdk 21 (Android 5.0) qurilmalarning 97% ini qamrab oladi, minSdk 26 (Android 8.0) — taxminan 85%, minSdk 31 (Android 12) — taxminan 55% (Android Studio Distribution Dashboard, 2026 ma'lumotlari). minSdk qancha past bo'lsa, qamrov shuncha keng, lekin orqaga moslik kodi shuncha ko'p kerak.
targetSdkVersion — ilova sinovdan o'tkazilgan API Level. Android xatti-harakat o'zgarishlarini qo'llash uchun targetSdk dan foydalanadi: agar ilova targetSdk 33 ni belgilasa, tizim API 33 da joriy qilingan barcha xatti-harakat o'zgarishlarini yoqadi. Agar targetSdk 31 bo'lsa, tizim API 32-33 o'zgarishlarini qo'llamaydi, eski xatti-harakat bilan moslikni saqlaydi. Bu xavfsizlik uchun eng muhim parametr: Google Play targetSdk joriy API Level dan 1 yildan eski bo'lmasligini talab qiladi.
compileSdkVersion — kod kompilyatsiya qilinadigan Android SDK versiyasi. Kompilyatsiya vaqtida qaysi API lar mavjudligini aniqlaydi. compileSdk targetSdk dan >= bo'lishi va ideal holda eng so'nggi barqaror API Level ga teng bo'lishi kerak. compileSdk ni oshirish ish vaqti xatti-harakatiga ta'sir qilmaydi — faqat kompilyator uchun yangi API larning mavjudligiga ta'sir qiladi. compileSdk oshirilgandan so'ng, kodni eskirgan API lar va yangi ruxsatnoma talablari uchun tekshirish kerak.
// build.gradle.kts — API Level sozlash namunasi
plugins {
id("com.android.application") version "8.7.0"
id("org.jetbrains.kotlin.android") version "2.1.0"
}
android {
namespace = "com.example.myapp"
compileSdk = 36 // Android 16
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26 // Android 8.0
targetSdk = 36 // Android 16
versionCode = 1
versionName = "1.0.0"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.activity:activity-ktx:1.9.3")
}build.gradle.kts misolida compileSdk = 36 (yozish vaqtida eng so'nggi), targetSdk = 36, minSdk = 26 (Android 8.0). compileSdk 36 barcha Android 16 API lariga kirish imkonini beradi. targetSdk 36 barcha Android 16 xatti-harakat o'zgarishlarini yoqadi. minSdk 26 ~85% qurilmalarni qamrab oladi. AndroidX Activity KTX va AppCompat fragmentlar va mavzular uchun orqaga moslikni ta'minlaydi.
minSdk va targetSdk parametrlari AndroidManifest.xml da ham belgilanishi mumkin, ammo zamonaviy loyihalar build.gradle dan foydalanadi — Gradle qiymatlari manifestni bekor qiladi. Manifestda Gradle build config dan foydalanmaydigan kutubxonalar va modullar uchun
Xatti-harakat o'zgarishlari — faqat targetSdk >= ma'lum bir API Level bo'lgan ilovalarga qo'llaniladigan Android tizimi ishlashidagi o'zgartirishlar. Har bir yangi Android reliz yangilanmasa, mavjud ilovalarni buzishi mumkin bo'lgan xatti-harakat o'zgarishlarini keltiradi. Bu Android ning asosiy xavfsizlik mexanizmi: eski ilovalar avvalgidek ishlashda davom etadi, yangilari joriy qoidalarga amal qiladi.
Android 10 (API 29) — Scoped Storage: targetSdk 29+ bo'lgan ilovalar umumiy fayl tizimiga to'g'ridan-to'g'ri kirish imkoniga ega emas, faqat MediaStore, SAF yoki o'z ombori orqali. Android 11 (API 30) — Package Visibility: paket filtri, ilovalar faqat o'zaro aloqada bo'lgan o'rnatilgan paketlarni ko'radi. Android 12 (API 31) — Foreground Service Notification: barcha oldingi fon xizmatlari ishga tushgandan keyin 10 soniya ichida bildirishnoma ko'rsatishi shart. Android 13 (API 33) — POST_NOTIFICATIONS: push bildirishnomalari uchun ish vaqti ruxsatnomasi. Android 14 (API 34) — Foreground Service Types: manifestda oldingi fon xizmati turining majburiy deklaratsiyasi.
// Android 13 (API 33) xatti-harakat o'zgarishlarini boshqarish: POST_NOTIFICATIONS
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
class NotificationHelper {
fun requestNotificationPermission(activity: MainActivity) {
// POST_NOTIFICATIONS ruxsatnomasi faqat API 33+ bilan ishlaydi
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
return // API 33 dan pastda ruxsatnoma talab qilinmaydi
}
when {
ContextCompat.checkSelfPermission(
activity,
Manifest.permission.POST_NOTIFICATIONS
) == PackageManager.PERMISSION_GRANTED -> {
// Ruxsatnoma allaqachon berilgan, bildirishnomalar yuborilishi mumkin
showNotification(activity)
}
activity.shouldShowRequestPermissionRationale(
Manifest.permission.POST_NOTIFICATIONS
) -> {
// Ruxsatnoma nima uchun kerakligini tushuntirishni ko'rsatish
activity.showRationale()
}
else -> {
// Ruxsatnoma so'rash
activity.requestPermissionLauncher.launch(
Manifest.permission.POST_NOTIFICATIONS
)
}
}
}
private fun showNotification(context: Context) {
// Bildirishnoma yaratish va ko'rsatish
val notification = android.app.Notification.Builder(context, "default_channel")
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle("Bildirishnoma")
.setContentText("Yangi xabar")
.build()
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE)
as android.app.NotificationManager
manager.notify(1, notification)
}
}
// Activity da requestPermissionLauncher ni ro'yxatdan o'tkazish
class MainActivity : ComponentActivity() {
val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
// Ruxsatnoma olindi
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}Kotlin da POST_NOTIFICATIONS ni boshqarish misoli: Build.VERSION.SDK_INT >= TIRAMISU ni tekshirish, ActivityResultContracts.RequestPermission orqali ish vaqti ruxsatnomasini so'rash, natijani callback da boshqarish. Ushbu ruxsatnomasiz targetSdk 33+ bo'lgan ilova push bildirishnomalarini ko'rsata olmaydi. API 33 dan pastda ruxsatnoma talab qilinmaydi — tekshirish kodi mavjud bo'lmagan API larni chaqirishni oldini oladi.
Scoped Storage eng muhim xatti-harakat o'zgarishlaridan biridir. API 29 (targetSdk 29+) dan boshlab, ilova Pictures, Downloads, Music va Documents kataloglariga to'g'ridan-to'g'ri fayl kirishini ololmaydi. Buning o'rniga media uchun MediaStore, ixtiyoriy fayllar uchun SAF (Storage Access Framework) va o'z ombori uchun getExternalFilesDir() ishlatiladi. Istisno — MANAGE_EXTERNAL_STORAGE ruxsatnomasiga ega ilovalar, bu Google Play roziligini talab qiladi.
Google Play ilovalarni nashr qilish uchun targetSdkVersion bo'yicha majburiy talablarni belgilaydi. Avgust 2024 dan boshlab Google Play targetSdkVersion >= API 33 (Android 13) ni talab qiladi. Har yili chegara ko'tariladi: yangi ilovalar va yangilanishlar joriy asosiy API Level dan 1 yildan eski bo'lmagan targetSdk ni belgilashi kerak. Talabni buzish nashrni bloklash va ilovani do'kondan olib tashlashga olib keladi.
Asosiy sabab — xavfsizlik. Har bir yangi Android API Level hujum vektorlarini yopadigan xatti-harakat o'zgarishlarini keltiradi: Scoped Storage (API 29) fayl o'g'irlanishini oldini oladi, POST_NOTIFICATIONS (API 33) spam bildirishnomalardan himoya qiladi, Foreground Service Types (API 34) yashirin fon xizmatlarini cheklaydi. Past targetSdk ga ega ilovalar bu himoyalarni olmaydi va foydalanuvchilar uchun xavf tug'diradi. Google Play zamonaviy qurilmalarda eskirgan ilovalarga ruxsat berolmaydi.
Google Play Console APK/AAB yuklashda targetSdkVersion ni tekshiradi. Agar targetSdk talab qilinganidan past bo'lsa — konsol nashrni "Your app currently targets API level X and must target at least API level Y" xabari bilan bloklaydi. Dasturchi build.gradle ni yangilashi, ilovani qayta kompilyatsiya qilishi, xatti-harakat o'zgarishlarini sinab ko'rishi va qayta yuklashi kerak. AAB formati barcha yangi nashrlar uchun tavsiya etiladi (Avgust 2021 dan majburiy).
| Sana | Minimal targetSdk | Android versiyasi |
|---|---|---|
| Avgust 2022 | 31 | Android 12 |
| Avgust 2023 | 33 | Android 13 |
| Avgust 2024 | 33 | Android 13 |
| Avgust 2025 | 34 | Android 14 |
| Avgust 2026 (rejalashtirilgan) | 35 | Android 15 |
Build.VERSION.SDK_INT — ilova ishlayotgan qurilmaning API Level ini o'z ichiga olgan statik butun sonli doimiy. Bu ish vaqti Android versiyasini tekshirish uchun asosiy vositadir. Build.VERSION_CODES har bir API Level uchun nomlangan doimiylarni o'z ichiga oladi: VERSION_CODES.TIRAMISU (33), VERSION_CODES.UPSIDE_DOWN_CAKE (34), VERSION_CODES.VANILLA_ICE_CREAM (35). if (SDK_INT >= VERSION_CODES.TIRAMISU) orqali taqqoslash standart naqshdir.
// Android kodida API Level tekshirish misollari
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.drawable.AdaptiveIconDrawable
class ApiLevelHelper {
// 1. Asosiy API Level tekshiruvi
fun isAtLeastTiramisu(): Boolean {
return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU // 33
}
// 2. Tekshiruv bilan adaptiv API chaqiruvi
fun getAdaptiveIcon(drawable: android.graphics.drawable.Drawable):
android.graphics.drawable.Drawable? {
// AdaptiveIconDrawable faqat API 26 (Android 8) bilan mavjud
if (VERSION.SDK_INT >= VERSION_CODES.O) {
return AdaptiveIconDrawable(drawable, null)
}
return drawable // eski qurilmalar uchun fallback
}
// 3. POST_NOTIFICATIONS ruxsatnomasini tekshirish (faqat API 33+)
fun canRequestNotificationPermission(): Boolean {
return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU
}
// 4. API Level bo'yicha rasm provayderini tanlash
fun getImagePickerProvider(): String {
return when {
VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
// API 34+ PhotoPicker dan foydalanadi
"photo_picker"
}
VERSION.SDK_INT >= VERSION_CODES.KITKAT -> {
// API 19+ Intent ACTION_OPEN_DOCUMENT dan foydalanadi
"open_document"
}
else -> {
// Legacy: ACTION_GET_CONTENT (barcha versiyalar)
"get_content"
}
}
}
// 5. @TargetApi orqali Java uslubidagi tekshirish (orqaga moslik uchun)
@Suppress("DEPRECATION")
fun checkLegacyStorage(): Boolean {
// Scoped Storage xatti-harakati SDK_INT ga emas, targetSdk ga bog'liq
return VERSION.SDK_INT < VERSION_CODES.Q // Android 10
}
// 6. Analitika uchun qurilish ma'lumoti
fun getDeviceApiInfo(): Map<String, Any> {
return mapOf(
"sdk_int" to VERSION.SDK_INT,
"release" to VERSION.RELEASE,
"codename" to VERSION.CODENAME,
"incremental" to VERSION.INCREMENTAL,
"preview_sdk" to VERSION.PREVIEW_SDK_INT
)
}
}
// Sinov
fun main() {
val helper = ApiLevelHelper()
println("API Level: ${VERSION.SDK_INT}")
println("Is Tiramisu+: ${helper.isAtLeastTiramisu()}")
}ApiLevelHelper klassi barcha asosiy API Level tekshirish naqshlarini namoyish etadi: SDK_INT >= VERSION_CODES bilan isAtLeastTiramisu, eski versiyalar uchun fallback bilan getAdaptiveIcon, when ko'p tarmoqli bilan getImagePickerProvider, analitika uchun getDeviceApiInfo. Asosiy qoida — SDK_INT ni tekshirmasdan yangi API larni chaqirmaslik, aks holda ilova eski qurilmalarda NoSuchMethodError bilan ishdan chiqadi.
Android Studio minSdkVersion dan yuqori API ishlatish haqida ogohlantiruvchi statik analizator lint ni o'z ichiga oladi. Agar metod SDK_INT tekshirilmagan holda chaqirilsa, lint uni xato sifatida belgilaydi: "Call requires API level 34 (current min is 26)". Yechimlar: metodga @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) qo'shish yoki SDK_INT ning if tekshiruvi. @TargetApi eskirgan annotatsiya, @RequiresApi tavsiya etiladi.
API Level jadvali dasturchi uchun ma'lumotnoma vositasidir. Qurilmaning API Level ini bilgan holda, Android versiyasi va mavjud funksiyalarni aniqlash mumkin. Jadval API Level 1 (2008) dan API Level 36 (2025) gacha barcha asosiy Android relizlarini ro'yxatga oladi. Kod nomlari (Cupcake, Donut, Tiramisu, VanillaIceCream) Google ichida va VERSION_CODES da ishlatiladi.
| API Level | Android versiyasi | Kod nomi | Yil |
|---|---|---|---|
| 1 | 1.0 | — | 2008 |
| 3 | 1.5 | Cupcake | 2009 |
| 8 | 2.2 | Froyo | 2010 |
| 14 | 4.0 | Ice Cream Sandwich | 2011 |
| 19 | 4.4 | KitKat | 2013 |
| 21 | 5.0 | Lollipop | 2014 |
| 23 | 6.0 | Marshmallow | 2015 |
| 26 | 8.0 | Oreo | 2017 |
| 28 | 9 | Pie | 2018 |
| 29 | 10 | Quince Tart (10) | 2019 |
| 30 | 11 | Red Velvet Cake | 2020 |
| 31 | 12 | Snow Cone | 2021 |
| 33 | 13 | Tiramisu | 2022 |
| 34 | 14 | Upside Down Cake | 2023 |
| 35 | 15 | Vanilla Ice Cream | 2024 |
| 36 | 16 | Baklava | 2025 |
Quyidagi jadval targetSdk ni oshirishda orqaga moslikni buzadigan xatti-harakat o'zgarishlarini keltiruvchi asosiy API Level larni ko'rsatadi:
| API Level | Xatti-harakat o'zgarishi | Ilovaga ta'siri |
|---|---|---|
| 29 | Scoped Storage | Pictures/Downloads/Music ga to'g'ridan-to'g'ri fayl kirishi yo'q |
| 30 | Package Visibility | queryIntentActivities() faqat o'zaro aloqadagi paketlarni ko'radi |
| 31 | Foreground Service Notification | 10 soniya ichida majburiy bildirishnoma |
| 33 | POST_NOTIFICATIONS | Bildirishnomalar uchun ish vaqti ruxsatnomasi |
| 34 | Foreground Service Types | Manifestda oldingi fon xizmati turi deklaratsiyasi |
| 35 | Privacy Sandbox | Reklama identifikatorlarini cheklash |
Tez-tez so'raladigan savollar
API Level Android Android API versiyasining butun sonli identifikatoridir. Har bir relizning noyob raqami bor: Android 13 = API 33, Android 14 = API 34, Android 15 = API 35, Android 16 = API 36. Dasturchi moslikni boshqarish uchun build.gradle da minSdkVersion, targetSdkVersion va compileSdkVersion ni belgilaydi. API Level mavjud sinflar, metodlar va xatti-harakat o'zgarishlarini aniqlaydi.
minSdkVersion — ilovani o'rnatish uchun minimal Android versiyasi. targetSdkVersion — ilova sinovdan o'tkazilgan versiya, xatti-harakat o'zgarishlarini o'z ichiga oladi. compileSdkVersion — kodni kompilyatsiya qilish uchun SDK versiyasi. minSdk eng past, targetSdk afzal eng so'nggi, compileSdk kamida targetSdk bo'lishi kerak. Uchchasi ham build.gradle da belgilanadi.
Agar targetSdkVersion qurilmaning API Level idan past bo'lsa, Android targetSdk dan keyin joriy qilingan xatti-harakat o'zgarishlarini o'chiradi. Masalan, Android 14 da (API 34) targetSdk = 28 bilan Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types qo'llanilmaydi. Google Play foydalanuvchilar xavfsizligi uchun targetSdkVersion joriy API Level dan 1 yildan eski bo'lmasligini talab qiladi.
Qurilmaning API Level i Build.VERSION.SDK_INT doimiysi orqali mavjud (masalan, Android 14 uchun 34). Taqqoslash uchun Build.VERSION_CODES dan nomlangan doimiylardan foydalaning: if (SDK_INT >= VERSION_CODES.TIRAMISU). Build.VERSION.RELEASE versiya satrini ("14") qaytaradi. SDK_INT qiymati sinf yuklanganda keshlanadi va istalgan oqimdan foydalanish mumkin.
Google Play xavfsizlik xatti-harakat o'zgarishlarini joriy qilish uchun har yili targetSdkVersion talablarini oshiradi. Har bir yangi API Level Scoped Storage, POST_NOTIFICATIONS, Privacy Sandbox va boshqa himoyalarni keltiradi. Past targetSdk ga ega ilovalar bu himoyalarni chetlab o'tadi va foydalanuvchilar uchun xavf tug'diradi. Talab do'kondagi barcha ilovalar joriy qoidalar bo'yicha sinovdan o'tganligini kafolatlaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.