compileSdkVersion: основе, нови API-ји и подешавање у Gradle-у

Аутор: IT Sectr Објављено: 2026-02-08 Време читања: 11 мин

compileSdkVersion — верзија Android SDK-а која се користи при компилацији апликације. Параметар се наводи у build.gradle и одређује који API-ји су доступни програмеру у фази изградње: класе, методе, константе и интерфејси из одређеног API Level-а. За разлику од targetSdkVersion, compileSdkVersion не утиче на понашање у runtime-у — behavioural changes Android-а не зависе од овог параметра. Према Android Developers, compileSdk мора бити бар не нижи од targetSdk, а идеално — једнак последњем стабилном API Level-у.

Главно

  • compileSdkVersion — верзија SDK-а за компилацију, даје приступ API-јима наведеног нивоа
  • Не утиче на понашање у runtime-у — behavioural changes управља targetSdkVersion, а не compileSdk
  • compileSdk мора бити >= targetSdk, препоручује се држање на последњем стабилном API Level-у
  • Подизање compileSdk захтева проверу deprecated API-ја и компатибилности зависности
  • Android SDK укључује платформе за сваки API Level — преузимају се преко SDK Manager-а

Шта је compileSdkVersion у Android-у?

compileSdkVersion — целобројни параметар у build.gradle који одређује према којој верзији Android SDK-а компилирати код. Када пишете код који користи класе из android.* или androidx.*, компајлер их упоређује са API-јима доступним у наведеној верзији compileSdk. Ако се метод појавио у API 36, а compileSdk = 35, код се неће компилирати. Ако је compileSdk = 36 — код ће се компилирати, али на уређају са API 35 при позивању овог метода без провере ће доћи до грешке.

compileSdkVersion се учитава из Android SDK Platform, инсталиране преко SDK Manager-а у Android Studio. Сваки API Level има своју платформу: android-21, android-29, android-34, android-35, android-36. Платформа садржи android.jar — скуп класа, метода и константи са којима ради компајлер Kotlin/Java. Ако платформа није инсталирана, Gradle ће је аутоматски преузети преко sdkmanager-а при првој изградњи.

AGP (Android Gradle Plugin) верзије 8.7+ препоручује навођење compileSdk као целог броја преко compileSdk = 36 у Kotlin DSL-у, без префикса android-. compileSdk се такође може навести преко compileSdkVersion 36 у Groovy DSL-у или compileSdkPreview за прегледне верзије SDK-а (developer previews). compileSdkPreview се користи за тестирање надолазећих API Level-а пре званичног издања.

kotlin
// build.gradle.kts — подешавање compileSdkVersion
android {
    namespace = "com.example.myapp"

    // compileSdk = 36 — последњи стабилни API Level (Android 16)
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 36
        versionCode = 1
        versionName = "1.0.0"
    }
}

// Алтернативно: compileSdkPreview за прегледне верзије
// compileSdkPreview = "Baklava"

У примеру compileSdk = 36 даје приступ свим API-јима Android 16 (Baklava). Android SDK Platform 36 мора бити инсталирана у SDK Manager-у. compileSdkPreview са именом "Baklava" може се користити за тестирање нестабилних API-ја пре званичног издања платформе. Након издања, preview се замењује стабилним compileSdk = 36.

compileSdkVersion vs targetSdkVersion vs minSdkVersion

Три параметра API Level-а у build.gradle — compileSdkVersion, targetSdkVersion и minSdkVersion — често се мешају. Сваки је одговоран за другачији аспект компатибилности, и њихове вредности морају бити усклађене по правилу compileSdk >= targetSdk >= minSdk. minSdk — доња граница: уређаји испод ње неће видети апликацију. targetSdk — тачка тестирања: behavioural changes се укључују до овог нивоа. compileSdk — плафон: API-ји изнад овог нивоа нису доступни компајлеру.

Кључно практично правило: compileSdk се може подићи без икаквог тестирања на уређајима. Ово је сигурна операција која само даје компајлеру нову верзију android.jar-а. Једини ризик — deprecated API-ји који могу бити уклоњени у новој верзији платформе, али се то открива у фази компилације и лако се поправља. Подизање targetSdk, напротив, захтева потпуни QA циклус.

ПараметарОбласт деловањаУтиче на runtimeЗахтева тестирање
compileSdkVersionКомпилацијаНеНе (само провера deprecated)
targetSdkVersionRuntimeДа — behavioural changesДа — пун QA циклус
minSdkVersionИнсталацијаНеНе (али утиче на покривеност)

Зашто compileSdk може бити виши од targetSdk? Замислите да је изашао Android 16 (API 36) са новим API-јима које желите да користите у коду, али behavioural changes API 36 још нисте тестирали. Постављате compileSdk = 36 (нови API-ји доступни), targetSdk = 35 (behavioural changes API 36 искључени). Код ће се компилирати, користиће нове методе под SDK_INT проверама, а behavioural changes API 36 неће покварити апликацију јер је targetSdk = 35.

Примери коректних комбинација

compileSdk = 36, targetSdk = 36, minSdk = 26 — пуна компатибилност са најновијим API-јима и behavioural changes, покривеност 85% уређаја. compileSdk = 36, targetSdk = 34, minSdk = 26 — нови API-ји доступни, behavioural changes само до API 34. compileSdk = 35, targetSdk = 36 — некоректно: compileSdk нижи од targetSdk, API 36 недоступни, иако су behavioural changes 36 активни.

Како ажурирати compileSdkVersion: водич корак по корак

Ажурирање compileSdkVersion — једна од најједноставнијих и најсигурнијих операција у Android пројекту. За разлику од targetSdk, не захтева дуготрајно тестирање behavioural changes. Међутим, постоји неколико корака које треба извршити да би се избегле грешке компилације и deprecated упозорења.

Корак 1 — инсталирајте нову платформу преко SDK Manager-а у Android Studio: Tools → SDK Manager → SDK Platforms → изаберите нови API Level. Ако не инсталирате платформу, Gradle ће покушати да је преузме аутоматски, али то може успорити прву изградњу. Корак 2 — промените compileSdk у build.gradle на нову вредност. Корак 3 — извршите изградњу (Build → Make Project) и поправите грешке компилације.

Корак 4 — проверите deprecated API. Након подизања compileSdk, неки методи могу бити означени @Deprecated са напоменом "removed in API X". Android Studio их истиче прецртавањем и приказује упозорење. Замените deprecated позиве новим алтернативама. Ако алтернатива захтева API Level виши од minSdk, додајте runtime проверу. Корак 5 — проверите dependencies: неке библиотеке могу захтевати одређену верзију compileSdk. AGP 8.7+ препоручује compileSdk = 36.

kotlin
// Након подизања compileSdk: замена deprecated API-ја
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 {

    // ПРЕ: deprecated метод (може бити уклоњен у новом API-ју)
    @Suppress("DEPRECATION")
    fun getMemoryClassOld(context: android.content.Context): Int {
        val am = context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
        return am.memoryClass  // Може бити deprecated у API 36
    }

    // ПОСЛЕ: нова алтернатива (ако је доступна)
    fun getMemoryClassNew(context: android.content.Context): Int {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // Нови API из compileSdk 36
            val am = context.getSystemService(
                android.content.Context.ACTIVITY_SERVICE
            ) as ActivityManager
            return am.getMemoryClassSafe()  // Пример новог API-ја
        }
        @Suppress("DEPRECATION")
        return context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
            .memoryClass
    }
}

Класа CompileSdkMigration показује коректан образац миграције. Стари метод memoryClass може бити уклоњен у новом API-ју — компајлер ће дати грешку. Нова алтернатива getMemoryClassSafe доступна је само на API 36+, па се позива под провером SDK_INT >= BAKLAVA. За старе уређаје користи се fallback са @Suppress("DEPRECATION").

Рад са новим API-јима: conditional checks и fallback

Нови API-ји, доступни захваљујући подизању compileSdkVersion, не могу се директно позивати ако је minSdkVersion нижи од овог API Level-а. Без runtime провере, апликација ће пасти са AbstractMethodError, NoSuchMethodError или VerifyError на старим уређајима. Главни заштитни механизам — провера Build.VERSION.SDK_INT са позивањем новог API-ја само при довољном API Level-у и fallback за старе верзије.

AndroidX обезбеђује backport-ове многих нових API-ја, што омогућава коришћење савремених метода чак и при ниском compileSdk. На пример, Activity Result API из androidx.activity:activity-ktx:1.9.3 ради на свим верзијама Android-а почев од API 14. NotificationCompat из AndroidX-а омогућава коришћење модерних обавештења на старим API-јима. PhotoPicker је доступан преко ActivityResultContracts.PickVisualMedia почев од API 34+.

kotlin
// Сигуран позив новог API-ја са compileSdk 36 и minSdk 26
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.Color

class NewApiHelper {

    // API 36+: нови метод рада са бојом
    fun formatColor(colorInt: Int): String {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // Нови API из compileSdk 36 — захтева API 36+
            return Color.toArgbHexString(colorInt)
        }
        // Fallback: ручно форматирање за старе API-је
        return String.format(
            "#%08X", (0xFFFFFFFF toLong() and colorInt.toLong())
        )
    }

    // AndroidX: backport није потребан — провера SDK_INT
    fun isEdgeToEdgeAvailable(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM
    }
}

// Коришћење у Activity
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 демонстрира сигуран позив новог API-ја Color.toArgbHexString (хипотетички API 36) са fallback-форматирањем за старе верзије. Кључни принцип: compileSdk даје приступ позивању нових метода у коду, али runtime провера SDK_INT штити од пада на старим уређајима. Без провере SDK_INT, апликација са minSdk 26 и compileSdk 36 ће падати на Android 8-15.

AGP (Android Gradle Plugin) и compileSdkVersion

Android Gradle Plugin (AGP) — основни алат за изградњу Android апликација. Свака верзија AGP-а подржава одређени опсег compileSdkVersion. AGP 8.7.x (издат 2026. године) захтева compileSdk >= 34 и препоручује compileSdk = 36. AGP 8.5.x подржава compileSdk 33-35. Ако је compileSdk нижи од минималног за AGP, изградња ће се завршити грешком "The SDK platform (X) is not supported by this version of the Android Gradle Plugin".

NDK (Native Development Kit) је такође повезан са compileSdkVersion. Ако пројекат користи изворни код на C/C++ преко NDK-а, compileSdk одређује верзију заглавних датотека и библиотека. NDK r27+ препоручује compileSdk 36. За библиотеке са .so датотекама, compileSdk утиче на минимални API Level за изворни код преко APP_MIN_SDK_VERSION у Application.mk.

AGP верзијаМинимални compileSdkПрепоручени compileSdkНапомена
8.3.x3334Подршка за Android 14
8.5.x3335Android 15, R8 full mode
8.7.x3436Android 16, Kotlin 2.1
8.9.x3536Non-transitive R classes

Gradle (7.6+) и Kotlin (2.0+) такође утичу на компатибилност са compileSdk. AGP 8.7+ захтева Gradle 8.9+ и Kotlin 2.0+. При подизању compileSdk препоручује се ажурирање AGP-а, Gradle-а и Kotlin-а на најновије стабилне верзије. Проверите компатибилност у званичној табели Android Gradle Plugin compatibility.

Типични проблеми при подизању compileSdk

Проблеми при подизању compileSdkVersion деле се у три категорије: compilation errors, deprecated warnings и runtime incompatibilities. Compilation errors — методи уклоњени из API-ја и код се не компилира. Deprecated warnings — методи означени @Deprecated, код се компилира са упозорењима. Runtime incompatibilities — нови API-ји су обавезни за одређену функционалност и изазивају грешку при недовољном API Level-у на уређају.

Први типични проблем — "Cannot resolve symbol X". Ово значи да је класа или метод уклоњен из јавног API-ја у новој верзији SDK-а. Решење: пронаћи алтернативу на новој платформи или користити AndroidX еквивалент. На пример, класа AsyncTaskLoader је била deprecated у API 28 и уклоњена из јавног API-ја у новијим верзијама. Алтернатива — Kotlin Coroutines или WorkManager.

Други проблем — промена сигнатуре метода. У новој верзији API-ја, метод је могао променити број или типове параметара. Kotlin/Java компајлер даје грешку "None of the following functions can be called with the arguments supplied". Решење: ажурирати позив метода под нову сигнатуру или додати проверу SDK_INT са позивањем старе сигнатуре за старе уређаје.

kotlin
// Решавање проблема при подизању compileSdk
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.content.pm.PackageManager

class CompileSdkProblemFixer {

    // Проблем: метод hasSystemFeature је променио сигнатуру у API 36
    fun hasCamera(pm: PackageManager): Boolean {
        return if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // Нова сигнатура: hasSystemFeature(String, FeatureType)
            pm.hasSystemFeature(
                PackageManager.FEATURE_CAMERA,
                PackageManager.FEATURE_TYPE_BACK
            )
        } else {
            // Стара сигнатура: hasSystemFeature(String)
            @Suppress("DEPRECATION")
            pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
        }
    }

    // Проблем: класа уклоњена, користимо AndroidX еквивалент
    fun loadFragment(manager: androidx.fragment.app.FragmentManager) {
        // Уместо android.app.FragmentManager (уклоњен) користимо
        // androidx.fragment.app.FragmentManager
        val fragment = CustomFragment()
        manager.beginTransaction()
            .replace(android.R.id.content, fragment)
            .commit()
    }
}

Класа CompileSdkProblemFixer решава типичне проблеме: измењена сигнатура hasSystemFeature (хипотетичка промена у API 36) обрађује се кроз SDK_INT проверу са позивањем исправне верзије метода. Уклоњена класа android.app.FragmentManager замењена је AndroidX еквивалентом. За старе позиве где нема алтернативе, користи се @Suppress("DEPRECATION") са коментаром о разлогу задржавања.

Често постављана питања

Шта је compileSdkVersion у Android-у?

compileSdkVersion — верзија Android SDK-а за компилацију кода. Одређује који API-ји су доступни програмеру при изградњи. compileSdk не утиче на понашање у runtime-у — behavioural changes управља targetSdkVersion. compileSdk мора бити >= targetSdk и >= minSdk. Подизање compileSdk даје приступ новим API-јима, али захтева проверу deprecated метода и компатибилности са AGP-ом.

По чему се compileSdkVersion разликује од targetSdkVersion?

compileSdkVersion управља компилацијом: који API-ји су доступни за позив у коду. targetSdkVersion управља понашањем у runtime-у: који behavioural changes се примењују. compileSdk може бити виши од targetSdk — то омогућава коришћење нових API-ја у коду без активације behavioural changes нових верзија. compileSdk је увек >= targetSdk. minSdk — најнижи параметар, targetSdk — средњи, compileSdk — највиши.

Који compileSdkVersion користити у 2026. години?

У 2026. години препоручује се compileSdk = 36 (Android 16, кодно име Baklava). Ово даје приступ свим API-јима последње верзије Android-а. За библиотеке и SDK-ове може се користити compileSdk = 35 или 34 да се не форсира ажурирање код потрошача. compileSdk мора бити инсталиран преко SDK Manager-а и подржан од верзије AGP-а. AGP 8.7+ препоручује compileSdk >= 34.

Шта радити ако се након подизања compileSdk код не компилира?

Грешке након подизања compileSdk обично су повезане са уклоњеним API-јима: класе или методи означени @Deprecated и уклоњени. Решење: пронаћи алтернативу у новом SDK-у, користити AndroidX еквивалент или додати @SuppressLint. Други разлог — нове обавезне дозволе у манифесту. Трећи — промена сигнатура метода: проверите документацију и ажурирајте позиве под нову сигнатуру са SDK_INT провером.

Да ли треба подизати compileSdkVersion истовремено са targetSdk?

compileSdkVersion се може подизати независно од targetSdk. Конфигурација compileSdk = 36 са targetSdk = 34 је коректна: код се компилира са новим API-јима, али behavioural changes API 35-36 се не активирају. Подизање compileSdk је сигурно и не захтева QA. Подизање targetSdk захтева пун циклус тестирања behavioural changes. Препоручује се држање compileSdk на последњем стабилном API Level-у.

Закључци

  • compileSdkVersion — верзија Android SDK-а за компилацију, одређује доступне API-је, не утиче на runtime
  • Правило хијерархије: compileSdk >= targetSdk >= minSdk; compileSdk може бити виши од targetSdk
  • Подизање compileSdk — сигурна операција, захтева само проверу deprecated API-ја и компатибилности зависности
  • Нови API-ји из подигнутог compileSdk захтевају runtime провере Build.VERSION.SDK_INT, иначе пад на старим уређајима
  • AGP верзије 8.7+ захтева compileSdk >= 34, препоручује се compileSdk = 36
  • AndroidX обезбеђује backport-ове API-ја, омогућавајући коришћење савремених метода при било ком compileSdk
  • Deprecated API након подизања compileSdk: замените алтернативама или користите @Suppress са fallback

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође