compileSdkVersion — ilovani kompilyatsiya qilishda foydalaniladigan Android SDK versiyasi. Parametr build.gradle da ko'rsatiladi va ma'lum bir API Level dan qanday API lar (sinflar, metodlar, konstantalar va interfeyslar) ishlab chiqaruvchi uchun mavjudligini aniqlaydi. targetSdkVersion dan farqli o'laroq, compileSdkVersion runtime xatti-harakatiga ta'sir qilmaydi — Android ning behavioural changes i bu parametrga bog'liq emas. Android Developers ma'lumotlariga ko'ra, compileSdk kamida targetSdk dan past bo'lmasligi kerak, ideal holatda esa eng so'nggi barqaror API Level ga teng bo'lishi kerak.
Asosiy ma'lumotlar
compileSdkVersion — build.gradle dagi butun son parametr bo'lib, kod qaysi Android SDK versiyasiga nisbatan kompilyatsiya qilinishini ko'rsatadi. android.* yoki androidx.* sinflaridan foydalanadigan kod yozganda, kompilyator ularni compileSdk ning ko'rsatilgan versiyasida mavjud bo'lgan API lar bilan tekshiradi. Agar metod API 36 da paydo bo'lgan bo'lsa va compileSdk = 35 bo'lsa, kod kompilyatsiya qilinmaydi. Agar compileSdk = 36 bo'lsa — kod kompilyatsiya qilinadi, lekin API 35 bo'lgan qurilmada bu metodni tekshirmasdan chaqirish xatolikka olib keladi.
compileSdkVersion Android SDK Platform dan yuklanadi, SDK Manager orqali Android Studio da o'rnatiladi. Har bir API Level o'z platformasiga ega: android-21, android-29, android-34, android-35, android-36. Platforma Kotlin/Java kompilyatori ishlaydigan sinflar, metodlar va konstantalar to'plamini — android.jar ni o'z ichiga oladi. Agar platforma o'rnatilmagan bo'lsa, Gradle birinchi qurilishda sdkmanager orqali uni avtomatik yuklab oladi.
AGP (Android Gradle Plugin) 8.7+ versiyasi Kotlin DSL da compileSdk ni android- prefiksisiz compileSdk = 36 kabi butun son sifatida ko'rsatishni tavsiya qiladi. compileSdk ni shuningdek Groovy DSL da compileSdkVersion 36 yoki SDK ning dastlabki versiyalari (developer previews) uchun compileSdkPreview orqali ko'rsatish mumkin. compileSdkPreview rasmiy chiqarilishidan oldin kelajakdagi API Level ni test qilish uchun ishlatiladi.
// build.gradle.kts — compileSdkVersion sozlamalari
android {
namespace = "com.example.myapp"
// compileSdk = 36 — eng so'nggi barqaror API Level (Android 16)
compileSdk = 36
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26
targetSdk = 36
versionCode = 1
versionName = "1.0.0"
}
}
// Muqobil: preview versiyalar uchun compileSdkPreview
// compileSdkPreview = "Baklava"Misolda compileSdk = 36 Android 16 (Baklava) ning barcha API lariga kirish imkonini beradi. Android SDK Platform 36 SDK Manager da o'rnatilgan bo'lishi kerak. "Baklava" nomi bilan compileSdkPreview platformaning rasmiy chiqarilishidan oldin barqaror bo'lmagan API larni test qilish uchun ishlatilishi mumkin. Chiqarilishdan so'ng preview barqaror compileSdk = 36 bilan almashtiriladi.
Uchta API Level parametri build.gradle da — compileSdkVersion, targetSdkVersion va minSdkVersion — ko'pincha chalkashtiriladi. Har biri moslikning turli jihati uchun javobgardir va ularning qiymatlari compileSdk >= targetSdk >= minSdk qoidasiga muvofiq bo'lishi kerak. minSdk — pastki chegara: undan past qurilmalar ilovani ko'rmaydi. targetSdk — test nuqtasi: behavioural changes shu darajagacha yoqiladi. compileSdk — shift: bu darajadan yuqori API lar kompilyator uchun mavjud emas.
Asosiy amaliy qoida: compileSdk ni qurilmalarda hech qanday testlarsiz oshirish mumkin. Bu faqat kompilyatorga android.jar ning yangi versiyasini beradigan xavfsiz operatsiyadir. Yagona xavf — platformaning yangi versiyasida olib tashlanishi mumkin bo'lgan eskirgan API lar, lekin bu kompilyatsiya bosqichida aniqlanadi va oson tuzatiladi. targetSdk ni oshirish, aksincha, to'liq QA siklini talab qiladi.
| Parametr | Ta'sir doirasi | Runtime ga ta'sir qiladi | Test talab qiladi |
|---|---|---|---|
| compileSdkVersion | Kompilyatsiya | Yo'q | Yo'q (faqat eskirgan API tekshiruvi) |
| targetSdkVersion | Runtime | Ha — behavioural changes | Ha — to'liq QA sikli |
| minSdkVersion | O'rnatish | Yo'q | Yo'q (lekin qamrovga ta'sir qiladi) |
Nega compileSdk targetSdk dan yuqori bo'lishi mumkin? Tasavvur qiling, Android 16 (API 36) kodda ishlatmoqchi bo'lgan yangi API lar bilan chiqdi, lekin API 36 ning behavioural changes ini hali test qilmadingiz. Siz compileSdk = 36 (yangi API lar mavjud), targetSdk = 35 (API 36 ning behavioural changes i o'chirilgan) o'rnatasiz. Kod kompilyatsiya qilinadi, SDK_INT tekshiruvlari ostida yangi metodlardan foydalanadi va API 36 ning behavioural changes i ilovani buzmaydi, chunki targetSdk = 35.
compileSdk = 36, targetSdk = 36, minSdk = 26 — eng so'nggi API lar va behavioural changes bilan to'liq moslik, qurilmalarning 85% qamrovi. compileSdk = 36, targetSdk = 34, minSdk = 26 — yangi API lar mavjud, behavioural changes faqat API 34 gacha. compileSdk = 35, targetSdk = 36 — noto'g'ri: compileSdk targetSdk dan past, API 36 mavjud emas, garchi behavioural changes 36 faol bo'lsa ham.
compileSdkVersion ni yangilash — Android loyihasidagi eng oddiy va xavfsiz operatsiyalardan biri. targetSdk dan farqli o'laroq, behavioural changes ni uzoq muddatli test qilishni talab qilmaydi. Biroq, kompilyatsiya xatolari va eskirish ogohlantirishlaridan qochish uchun bir necha qadamlarni bajarish kerak.
1-qadam — yangi platformani o'rnating Android Studio da SDK Manager orqali: Tools → SDK Manager → SDK Platforms → yangi API Level ni tanlang. Platformani o'rnatmasangiz, Gradle uni avtomatik yuklab olishga harakat qiladi, lekin bu birinchi qurilishni sekinlashtirishi mumkin. 2-qadam — build.gradle da compileSdk ni yangi qiymatga o'zgartiring. 3-qadam — qurilishni bajaring (Build → Make Project) va kompilyatsiya xatolarini tuzating.
4-qadam — eskirgan API larni tekshiring. compileSdk ni oshirgandan so'ng, ba'zi metodlar "removed in API X" yozuvi bilan @Deprecated deb belgilanishi mumkin. Android Studio ularni chizib tashlash bilan ajratib ko'rsatadi va ogohlantirish chiqaradi. Eskirgan chaqiruvlarni yangi alternativlar bilan almashtiring. Agar alternativ minSdk dan yuqori API Level talab qilsa, runtime tekshiruvi qo'shing. 5-qadam — dependencies ni tekshiring: ba'zi kutubxonalar ma'lum compileSdk versiyasini talab qilishi mumkin. AGP 8.7+ compileSdk = 36 ni tavsiya qiladi.
// compileSdk ni oshirgandan so'ng: eskirgan API larni almashtirish
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Process
import android.app.ActivityManager
class CompileSdkMigration {
// OLDIN: eskirgan metod (yangi API da olib tashlanishi mumkin)
@Suppress("DEPRECATION")
fun getMemoryClassOld(context: android.content.Context): Int {
val am = context.getSystemService(
android.content.Context.ACTIVITY_SERVICE
) as ActivityManager
return am.memoryClass // API 36 da eskirishi mumkin
}
// KEYIN: yangi alternativ (agar mavjud bo'lsa)
fun getMemoryClassNew(context: android.content.Context): Int {
if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
// compileSdk 36 dan yangi API
val am = context.getSystemService(
android.content.Context.ACTIVITY_SERVICE
) as ActivityManager
return am.getMemoryClassSafe() // Yangi API namunasi
}
@Suppress("DEPRECATION")
return context.getSystemService(
android.content.Context.ACTIVITY_SERVICE
) as ActivityManager
.memoryClass
}
}CompileSdkMigration sinfi to'g'ri migratsiya namunasini ko'rsatadi. Eski memoryClass metodi yangi API da olib tashlanishi mumkin — kompilyator xato beradi. Yangi alternativ getMemoryClassSafe faqat API 36+ da mavjud, shuning uchun SDK_INT >= BAKLAVA tekshiruvi ostida chaqiriladi. Eski qurilmalar uchun @Suppress("DEPRECATION") bilan fallback ishlatiladi.
Yangi API lar, compileSdkVersion ni oshirish tufayli mavjud bo'lgan, minSdkVersion bu API Level dan past bo'lsa, to'g'ridan-to'g'ri chaqirilishi mumkin emas. Runtime tekshiruvisiz ilova eski qurilmalarda AbstractMethodError, NoSuchMethodError yoki VerifyError bilan ishdan chiqadi. Asosiy himoya mexanizmi — Build.VERSION.SDK_INT tekshiruvi bilan yangi API ni faqat etarli API Level da chaqirish va eski versiyalar uchun fallback.
AndroidX ko'plab yangi API larning backport larini ta'minlaydi, bu esa past compileSdk da ham zamonaviy metodlardan foydalanish imkonini beradi. Masalan, androidx.activity:activity-ktx:1.9.3 dan Activity Result API API 14 dan boshlab Android ning barcha versiyalarida ishlaydi. AndroidX dan NotificationCompat eski API larda zamonaviy bildirishnomalardan foydalanish imkonini beradi. PhotoPicker API 34+ dan boshlab ActivityResultContracts.PickVisualMedia orqali mavjud.
// compileSdk 36 va minSdk 26 bilan yangi API ni xavfsiz chaqirish
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.Color
class NewApiHelper {
// API 36+: rang bilan ishlashning yangi metodi
fun formatColor(colorInt: Int): String {
if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
// compileSdk 36 dan yangi API — API 36+ talab qiladi
return Color.toArgbHexString(colorInt)
}
// Fallback: eski API lar uchun qo'lda formatlash
return String.format(
"#%08X", (0xFFFFFFFF toLong() and colorInt.toLong())
)
}
// AndroidX: backport talab qilinmaydi — SDK_INT tekshiruvi
fun isEdgeToEdgeAvailable(): Boolean {
return VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM
}
}
// Activity da foydalanish
class ColorActivity : android.app.Activity() {
override fun onCreate(savedInstanceState: android.os.Bundle?) {
super.onCreate(savedInstanceState)
val helper = NewApiHelper()
val colorStr = helper.formatColor(0xFF6200EE)
println("Color: $colorStr")
}
}NewApiHelper sinfi eski versiyalar uchun fallback formatlash bilan yangi Color.toArgbHexString API (gipotetik API 36) ni xavfsiz chaqirishni namoyish qiladi. Asosiy printsip: compileSdk koddagi yangi metodlarni chaqirish imkonini beradi, lekin runtime SDK_INT tekshiruvi eski qurilmalarda ishdan chiqishdan himoya qiladi. SDK_INT tekshiruvisiz minSdk 26 va compileSdk 36 bo'lgan ilova Android 8-15 da ishdan chiqadi.
Android Gradle Plugin (AGP) — Android ilovalarini qurish uchun asosiy vositadir. Har bir AGP versiyasi ma'lum compileSdkVersion diapazonini qo'llab-quvvatlaydi. AGP 8.7.x (2026 yilda chiqarilgan) compileSdk >= 34 ni talab qiladi va compileSdk = 36 ni tavsiya qiladi. AGP 8.5.x compileSdk 33-35 ni qo'llab-quvvatlaydi. Agar compileSdk AGP uchun minimal darajadan past bo'lsa, qurilish "The SDK platform (X) is not supported by this version of the Android Gradle Plugin" xatosi bilan tugaydi.
NDK (Native Development Kit) ham compileSdkVersion ga bog'liq. Loyiha NDK orqali C/C++ da native koddan foydalansa, compileSdk sarlavha fayllari va kutubxonalar versiyasini aniqlaydi. NDK r27+ compileSdk 36 ni tavsiya qiladi. .so fayllari bo'lgan kutubxonalar uchun compileSdk Application.mk dagi APP_MIN_SDK_VERSION orqali native kod uchun minimal API Level ga ta'sir qiladi.
| AGP versiyasi | Minimal compileSdk | Tavsiya etilgan compileSdk | Izoh |
|---|---|---|---|
| 8.3.x | 33 | 34 | Android 14 qo'llab-quvvatlashi |
| 8.5.x | 33 | 35 | Android 15, R8 full mode |
| 8.7.x | 34 | 36 | Android 16, Kotlin 2.1 |
| 8.9.x | 35 | 36 | Non-transitive R classes |
Gradle (7.6+) va Kotlin (2.0+) ham compileSdk bilan moslikka ta'sir qiladi. AGP 8.7+ Gradle 8.9+ va Kotlin 2.0+ ni talab qiladi. compileSdk ni oshirishda AGP, Gradle va Kotlin ni eng so'nggi barqaror versiyalarga yangilash tavsiya etiladi. Moslikni Android Gradle Plugin compatibility rasmiy jadvalida tekshiring.
compileSdkVersion ni oshirishdagi muammolar uch toifaga bo'linadi: compilation errors, deprecated warnings va runtime incompatibilities. Compilation errors — metodlar API dan olib tashlangan va kod kompilyatsiya qilinmaydi. Deprecated warnings — metodlar @Deprecated deb belgilangan, kod ogohlantirishlar bilan kompilyatsiya qilinadi. Runtime incompatibilities — yangi API lar ma'lum funksionallik uchun majburiy va qurilmada etarli API Level bo'lmaganda xatolikka sabab bo'ladi.
Birinchi tipik muammo — "Cannot resolve symbol X". Bu sinf yoki metod SDK ning yangi versiyasida umumiy API dan olib tashlanganligini anglatadi. Yechim: yangi platformada alternativ topish yoki AndroidX ekvivalentidan foydalanish. Masalan, AsyncTaskLoader sinfi API 28 da eskirgan va yangi versiyalarda umumiy API dan olib tashlangan. Alternativ — Kotlin Coroutines yoki WorkManager.
Ikkinchi muammo — metod imzosining o'zgarishi. API ning yangi versiyasida metod parametrlar soni yoki turlarini o'zgartirgan bo'lishi mumkin. Kotlin/Java kompilyatori "None of the following functions can be called with the arguments supplied" xatosini beradi. Yechim: metod chaqiruvini yangi imzoga yangilash yoki eski qurilmalar uchun SDK_INT tekshiruvi bilan eski imzoni chaqirish.
// compileSdk ni oshirishdagi muammolarni hal qilish
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.content.pm.PackageManager
class CompileSdkProblemFixer {
// Muammo: hasSystemFeature metodi API 36 da imzosini o'zgartirdi
fun hasCamera(pm: PackageManager): Boolean {
return if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
// Yangi imzo: hasSystemFeature(String, FeatureType)
pm.hasSystemFeature(
PackageManager.FEATURE_CAMERA,
PackageManager.FEATURE_TYPE_BACK
)
} else {
// Eski imzo: hasSystemFeature(String)
@Suppress("DEPRECATION")
pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
}
}
// Muammo: sinf olib tashlangan, AndroidX ekvivalentidan foydalanamiz
fun loadFragment(manager: androidx.fragment.app.FragmentManager) {
// android.app.FragmentManager (olib tashlangan) o'rniga foydalanamiz
// androidx.fragment.app.FragmentManager
val fragment = CustomFragment()
manager.beginTransaction()
.replace(android.R.id.content, fragment)
.commit()
}
}CompileSdkProblemFixer sinfi tipik muammolarni hal qiladi: o'zgartirilgan hasSystemFeature imzosi (API 36 da gipotetik o'zgarish) SDK_INT tekshiruvi bilan metodning to'g'ri versiyasini chaqirish orqali boshqariladi. Olib tashlangan android.app.FragmentManager sinfi AndroidX ekvivalenti bilan almashtirilgan. Alternativ bo'lmagan eski chaqiruvlar uchun saqlanish sababi haqida sharh bilan @Suppress("DEPRECATION") ishlatiladi.
Tez-tez so'raladigan savollar
compileSdkVersion — kodni kompilyatsiya qilish uchun Android SDK versiyasi. Qurilish vaqtida ishlab chiqaruvchi uchun qanday API lar mavjudligini aniqlaydi. compileSdk runtime xatti-harakatiga ta'sir qilmaydi — behavioural changes targetSdkVersion tomonidan boshqariladi. compileSdk >= targetSdk va >= minSdk bo'lishi kerak. compileSdk ni oshirish yangi API larga kirish imkonini beradi, lekin eskirgan metodlar va AGP mosligini tekshirishni talab qiladi.
compileSdkVersion kompilyatsiyani boshqaradi: kodda qanday API lar mavjud. targetSdkVersion runtime xatti-harakatini boshqaradi: qanday behavioural changes qo'llaniladi. compileSdk targetSdk dan yuqori bo'lishi mumkin — bu yangi API larni behavioural changes ni faollashtirmasdan kodda ishlatish imkonini beradi. compileSdk har doim >= targetSdk. minSdk — eng past parametr, targetSdk — o'rta, compileSdk — eng yuqori.
2026 yilda compileSdk = 36 (Android 16, kod nomi Baklava) tavsiya etiladi. Bu Android ning eng so'nggi versiyasining barcha API lariga kirish imkonini beradi. Kutubxonalar va SDK lar uchun iste'molchilarni yangilashga majburlamaslik uchun compileSdk = 35 yoki 34 ishlatilishi mumkin. compileSdk SDK Manager orqali o'rnatilgan va AGP versiyasi tomonidan qo'llab-quvvatlangan bo'lishi kerak. AGP 8.7+ compileSdk >= 34 ni tavsiya qiladi.
compileSdk ni oshirgandan so'ng xatolar odatda olib tashlangan API lar bilan bog'liq: sinflar yoki metodlar @Deprecated deb belgilangan va olib tashlangan. Yechim: yangi SDK da alternativ topish, AndroidX ekvivalentidan foydalanish yoki @SuppressLint qo'shish. Ikkinchi sabab — manifestda yangi majburiy ruxsatnomalar. Uchinchi — metod imzolarining o'zgarishi: hujjatlarni tekshiring va chaqiruvlarni SDK_INT tekshiruvi bilan yangi imzoga yangilang.
compileSdkVersion targetSdk dan mustaqil ravishda oshirilishi mumkin. compileSdk = 36 bilan targetSdk = 34 konfiguratsiyasi to'g'ri: kod yangi API lar bilan kompilyatsiya qilinadi, lekin behavioural changes API 35-36 faollashtirilmaydi. compileSdk ni oshirish xavfsiz va QA talab qilmaydi. targetSdk ni oshirish behavioural changes ni to'liq test siklini talab qiladi. compileSdk ni eng so'nggi barqaror API Level da saqlash tavsiya etiladi.
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.