compileSdkVersion: asoslar, yangi API-lar va Gradle sozlamalari

Muallif: IT Sectr Nashr etilgan: 2026-02-08 O'qish vaqti: 11 daq

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 — kompilyatsiya uchun SDK versiyasi, ko'rsatilgan darajadagi API larga kirish imkonini beradi
  • Ta'sir qilmaydi runtime xatti-harakatiga — behavioural changes targetSdkVersion tomonidan boshqariladi, compileSdk emas
  • compileSdk >= targetSdk bo'lishi kerak, eng so'nggi barqaror API Level da saqlash tavsiya etiladi
  • Oshirish compileSdk eskirgan API larni va bog'liqliklarning mosligini tekshirishni talab qiladi
  • Android SDK har bir API Level uchun platformalarni o'z ichiga oladi — SDK Manager orqali yuklanadi

Android da compileSdkVersion nima?

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.

kotlin
// 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.

compileSdkVersion vs targetSdkVersion vs minSdkVersion

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.

ParametrTa'sir doirasiRuntime ga ta'sir qiladiTest talab qiladi
compileSdkVersionKompilyatsiyaYo'qYo'q (faqat eskirgan API tekshiruvi)
targetSdkVersionRuntimeHa — behavioural changesHa — to'liq QA sikli
minSdkVersionO'rnatishYo'qYo'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.

To'g'ri kombinatsiyalar misollari

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: bosqichma-bosqich qo'llanma

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.

kotlin
// 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 bilan ishlash: conditional checks va fallback

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.

kotlin
// 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.

AGP (Android Gradle Plugin) va compileSdkVersion

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 versiyasiMinimal compileSdkTavsiya etilgan compileSdkIzoh
8.3.x3334Android 14 qo'llab-quvvatlashi
8.5.x3335Android 15, R8 full mode
8.7.x3436Android 16, Kotlin 2.1
8.9.x3536Non-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.

compileSdk ni oshirishdagi tipik muammolar

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.

kotlin
// 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

Android da compileSdkVersion nima?

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 targetSdkVersion dan qanday farq 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 qaysi compileSdkVersion dan foydalanish kerak?

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 kod kompilyatsiya qilinmasa nima qilish kerak?

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 ni targetSdk bilan bir vaqtda oshirish kerakmi?

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

  • compileSdkVersion — kompilyatsiya uchun Android SDK versiyasi, mavjud API larni aniqlaydi, runtime ga ta'sir qilmaydi
  • Ierarxiya qoidasi: compileSdk >= targetSdk >= minSdk; compileSdk targetSdk dan yuqori bo'lishi mumkin
  • Oshirish compileSdk — xavfsiz operatsiya, faqat eskirgan API larni va bog'liqlik mosligini tekshirishni talab qiladi
  • Yangi API lar yuqori compileSdk dan runtime Build.VERSION.SDK_INT tekshiruvlarini talab qiladi, aks holda eski qurilmalarda ishdan chiqish
  • AGP 8.7+ versiyasi compileSdk >= 34 ni talab qiladi, compileSdk = 36 tavsiya etiladi
  • AndroidX API backport larini ta'minlaydi, istalgan compileSdk da zamonaviy metodlardan foydalanish imkonini beradi
  • Eskirgan API lar compileSdk ni oshirgandan so'ng: alternativlar bilan almashtiring yoki fallback bilan @Suppress dan foydalaning

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.

Loyihani muhokama qilish

Shuningdek o'qing