compileSdkVersion: dasar-dasar, API baru dan konfigurasi di Gradle

Penulis: IT Sectr Diterbitkan: 2026-02-08 Waktu membaca: 11 mnt

compileSdkVersion — versi Android SDK yang digunakan saat kompilasi aplikasi. Parameter ditentukan di build.gradle dan menentukan API mana yang tersedia untuk pengembang pada tahap build: kelas, metode, konstanta, dan antarmuka dari API Level tertentu. Berbeda dengan targetSdkVersion, compileSdkVersion tidak memengaruhi perilaku runtime — behavioural changes Android tidak bergantung pada parameter ini. Menurut Android Developers, compileSdk harus setidaknya tidak lebih rendah dari targetSdk, dan idealnya sama dengan API Level stabil terakhir.

Poin Utama

  • compileSdkVersion — versi SDK untuk kompilasi, memberikan akses ke API dari level yang ditentukan
  • Tidak memengaruhi perilaku runtime — behavioural changes dikelola oleh targetSdkVersion, bukan compileSdk
  • compileSdk harus >= targetSdk, disarankan untuk tetap di API Level stabil terakhir
  • Menaikkan compileSdk memerlukan pengecekan API yang sudah deprecated dan kompatibilitas dependensi
  • Android SDK mencakup platform untuk setiap API Level — diunduh melalui SDK Manager

Apa itu compileSdkVersion di Android?

compileSdkVersion — parameter bilangan bulat di build.gradle yang menentukan terhadap versi Android SDK mana kode akan dikompilasi. Saat Anda menulis kode yang menggunakan kelas dari android.* atau androidx.*, kompiler memeriksanya dengan API yang tersedia di versi compileSdk yang ditentukan. Jika metode muncul di API 36 dan compileSdk = 35, kode tidak akan dikompilasi. Jika compileSdk = 36 — kode akan dikompilasi, tetapi pada perangkat dengan API 35 saat memanggil metode ini tanpa pemeriksaan akan terjadi error.

compileSdkVersion dimuat dari Android SDK Platform, diinstal melalui SDK Manager di Android Studio. Setiap API Level memiliki platformnya sendiri: android-21, android-29, android-34, android-35, android-36. Platform berisi android.jar — kumpulan kelas, metode, dan konstanta yang digunakan kompiler Kotlin/Java. Jika platform tidak diinstal, Gradle akan mengunduhnya secara otomatis melalui sdkmanager saat build pertama.

AGP (Android Gradle Plugin) versi 8.7+ merekomendasikan menentukan compileSdk sebagai bilangan bulat melalui compileSdk = 36 di Kotlin DSL, tanpa prefiks android-. compileSdk juga dapat ditentukan melalui compileSdkVersion 36 di Groovy DSL atau compileSdkPreview untuk versi pratinjau SDK (developer previews). compileSdkPreview digunakan untuk menguji API Level yang akan datang sebelum rilis resmi.

kotlin
// build.gradle.kts — konfigurasi compileSdkVersion
android {
    namespace = "com.example.myapp"

    // compileSdk = 36 — API Level stabil terakhir (Android 16)
    compileSdk = 36

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

// Alternatif: compileSdkPreview untuk versi pratinjau
// compileSdkPreview = "Baklava"

Dalam contoh, compileSdk = 36 memberikan akses ke semua API Android 16 (Baklava). Android SDK Platform 36 harus diinstal di SDK Manager. compileSdkPreview dengan nama "Baklava" dapat digunakan untuk menguji API yang tidak stabil sebelum rilis resmi platform. Setelah rilis, preview diganti dengan compileSdk = 36 yang stabil.

compileSdkVersion vs targetSdkVersion vs minSdkVersion

Tiga parameter API Level di build.gradle — compileSdkVersion, targetSdkVersion dan minSdkVersion — sering tertukar. Masing-masing bertanggung jawab untuk aspek kompatibilitas yang berbeda, dan nilainya harus diselaraskan menurut aturan compileSdk >= targetSdk >= minSdk. minSdk — batas bawah: perangkat di bawahnya tidak akan melihat aplikasi. targetSdk — titik pengujian: behavioural changes diaktifkan hingga level ini. compileSdk — batas atas: API di atas level ini tidak tersedia untuk kompiler.

Aturan praktis utama: compileSdk dapat dinaikkan tanpa pengujian apa pun pada perangkat. Ini adalah operasi aman yang hanya memberikan kompiler versi baru android.jar. Satu-satunya risiko — API yang sudah deprecated yang mungkin dihapus di versi baru platform, tetapi ini terdeteksi pada tahap kompilasi dan mudah diperbaiki. Menaikkan targetSdk, sebaliknya, memerlukan siklus QA lengkap.

ParameterRuang lingkupMemengaruhi runtimeMemerlukan pengujian
compileSdkVersionKompilasiTidakTidak (hanya pengecekan deprecated)
targetSdkVersionRuntimeYa — behavioural changesYa — siklus QA penuh
minSdkVersionInstalasiTidakTidak (tapi memengaruhi jangkauan)

Mengapa compileSdk bisa lebih tinggi dari targetSdk? Bayangkan Android 16 (API 36) dirilis dengan API baru yang ingin Anda gunakan dalam kode, tetapi behavioural changes API 36 belum Anda uji. Anda mengatur compileSdk = 36 (API baru tersedia), targetSdk = 35 (behavioural changes API 36 dinonaktifkan). Kode akan dikompilasi, akan menggunakan metode baru di bawah pemeriksaan SDK_INT, dan behavioural changes API 36 tidak akan merusak aplikasi karena targetSdk = 35.

Contoh kombinasi yang benar

compileSdk = 36, targetSdk = 36, minSdk = 26 — kompatibilitas penuh dengan API terbaru dan behavioural changes, jangkauan 85% perangkat. compileSdk = 36, targetSdk = 34, minSdk = 26 — API baru tersedia, behavioural changes hanya hingga API 34. compileSdk = 35, targetSdk = 36 — tidak benar: compileSdk lebih rendah dari targetSdk, API 36 tidak tersedia, meskipun behavioural changes 36 aktif.

Cara memperbarui compileSdkVersion: panduan langkah demi langkah

Memperbarui compileSdkVersion — salah satu operasi paling sederhana dan aman dalam proyek Android. Berbeda dengan targetSdk, tidak memerlukan pengujian behavioural changes yang lama. Namun ada beberapa langkah yang harus dilakukan untuk menghindari error kompilasi dan peringatan deprecated.

Langkah 1 — instal platform baru melalui SDK Manager di Android Studio: Tools → SDK Manager → SDK Platforms → pilih API Level baru. Jika Anda tidak menginstal platform, Gradle akan mencoba mengunduhnya secara otomatis, tetapi ini dapat memperlambat build pertama. Langkah 2 — ubah compileSdk di build.gradle ke nilai baru. Langkah 3 — lakukan build (Build → Make Project) dan perbaiki error kompilasi.

Langkah 4 — periksa API yang sudah deprecated. Setelah menaikkan compileSdk, beberapa metode mungkin ditandai @Deprecated dengan catatan "removed in API X". Android Studio menyorotnya dengan coretan dan memberikan peringatan. Ganti panggilan deprecated dengan alternatif baru. Jika alternatif memerlukan API Level lebih tinggi dari minSdk, tambahkan pemeriksaan runtime. Langkah 5 — periksa dependencies: beberapa pustaka mungkin memerlukan versi compileSdk tertentu. AGP 8.7+ merekomendasikan compileSdk = 36.

kotlin
// Setelah menaikkan compileSdk: mengganti API deprecated
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 {

    // SEBELUM: metode deprecated (mungkin dihapus di API baru)
    @Suppress("DEPRECATION")
    fun getMemoryClassOld(context: android.content.Context): Int {
        val am = context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
        return am.memoryClass  // Mungkin deprecated di API 36
    }

    // SESUDAH: alternatif baru (jika tersedia)
    fun getMemoryClassNew(context: android.content.Context): Int {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // API baru dari compileSdk 36
            val am = context.getSystemService(
                android.content.Context.ACTIVITY_SERVICE
            ) as ActivityManager
            return am.getMemoryClassSafe()  // Contoh API baru
        }
        @Suppress("DEPRECATION")
        return context.getSystemService(
            android.content.Context.ACTIVITY_SERVICE
        ) as ActivityManager
            .memoryClass
    }
}

Kelas CompileSdkMigration menunjukkan pola migrasi yang benar. Metode lama memoryClass dapat dihapus di API baru — kompiler akan memberikan error. Alternatif baru getMemoryClassSafe hanya tersedia di API 36+, sehingga dipanggil di bawah pemeriksaan SDK_INT >= BAKLAVA. Untuk perangkat lama, fallback digunakan dengan @Suppress("DEPRECATION").

Bekerja dengan API baru: conditional checks dan fallback

API baru, tersedia berkat menaikkan compileSdkVersion, tidak dapat dipanggil secara langsung jika minSdkVersion lebih rendah dari API Level ini. Tanpa pemeriksaan runtime, aplikasi akan crash dengan AbstractMethodError, NoSuchMethodError atau VerifyError pada perangkat lama. Mekanisme perlindungan utama — pemeriksaan Build.VERSION.SDK_INT dengan memanggil API baru hanya pada API Level yang cukup dan fallback untuk versi lama.

AndroidX menyediakan backport dari banyak API baru, memungkinkan penggunaan metode modern bahkan dengan compileSdk yang rendah. Misalnya, Activity Result API dari androidx.activity:activity-ktx:1.9.3 bekerja di semua versi Android mulai dari API 14. NotificationCompat dari AndroidX memungkinkan penggunaan notifikasi modern pada API lama. PhotoPicker tersedia melalui ActivityResultContracts.PickVisualMedia mulai dari API 34+.

kotlin
// Pemanggilan aman API baru dengan compileSdk 36 dan 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+: metode baru untuk bekerja dengan warna
    fun formatColor(colorInt: Int): String {
        if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // API baru dari compileSdk 36 — memerlukan API 36+
            return Color.toArgbHexString(colorInt)
        }
        // Fallback: format manual untuk API lama
        return String.format(
            "#%08X", (0xFFFFFFFF toLong() and colorInt.toLong())
        )
    }

    // AndroidX: backport tidak diperlukan — pemeriksaan SDK_INT
    fun isEdgeToEdgeAvailable(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM
    }
}

// Penggunaan di 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")
    }
}

Kelas NewApiHelper mendemonstrasikan pemanggilan aman API baru Color.toArgbHexString (API 36 hipotetis) dengan format fallback untuk versi lama. Prinsip utama: compileSdk memberikan akses untuk memanggil metode baru dalam kode, tetapi pemeriksaan runtime SDK_INT melindungi dari crash pada perangkat lama. Tanpa pemeriksaan SDK_INT, aplikasi dengan minSdk 26 dan compileSdk 36 akan crash di Android 8-15.

AGP (Android Gradle Plugin) dan compileSdkVersion

Android Gradle Plugin (AGP) — alat build utama untuk aplikasi Android. Setiap versi AGP mendukung rentang compileSdkVersion tertentu. AGP 8.7.x (dirilis pada 2026) memerlukan compileSdk >= 34 dan merekomendasikan compileSdk = 36. AGP 8.5.x mendukung compileSdk 33-35. Jika compileSdk lebih rendah dari minimum untuk AGP, build akan berakhir dengan error "The SDK platform (X) is not supported by this version of the Android Gradle Plugin".

NDK (Native Development Kit) juga terikat dengan compileSdkVersion. Jika proyek menggunakan kode native di C/C++ melalui NDK, compileSdk menentukan versi file header dan pustaka. NDK r27+ merekomendasikan compileSdk 36. Untuk pustaka dengan file .so, compileSdk memengaruhi API Level minimum untuk kode native melalui APP_MIN_SDK_VERSION di Application.mk.

Versi AGPcompileSdk minimalcompileSdk yang direkomendasikanCatatan
8.3.x3334Dukungan 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+) dan Kotlin (2.0+) juga memengaruhi kompatibilitas dengan compileSdk. AGP 8.7+ memerlukan Gradle 8.9+ dan Kotlin 2.0+. Saat menaikkan compileSdk, disarankan untuk memperbarui AGP, Gradle, dan Kotlin ke versi stabil terbaru. Periksa kompatibilitas di tabel resmi Android Gradle Plugin compatibility.

Masalah umum saat menaikkan compileSdk

Masalah saat menaikkan compileSdkVersion terbagi menjadi tiga kategori: compilation errors, deprecated warnings dan runtime incompatibilities. Compilation errors — metode dihapus dari API dan kode tidak dikompilasi. Deprecated warnings — metode ditandai @Deprecated, kode dikompilasi dengan peringatan. Runtime incompatibilities — API baru wajib untuk fungsionalitas tertentu dan menyebabkan error saat API Level tidak mencukupi pada perangkat.

Masalah umum pertama — "Cannot resolve symbol X". Ini berarti kelas atau metode telah dihapus dari API publik di versi SDK baru. Solusi: temukan alternatif di platform baru atau gunakan padanan AndroidX. Misalnya, kelas AsyncTaskLoader sudah deprecated di API 28 dan dihapus dari API publik di versi yang lebih baru. Alternatif — Kotlin Coroutines atau WorkManager.

Masalah kedua — perubahan tanda tangan metode. Di versi API baru, metode mungkin mengubah jumlah atau tipe parameter. Kompiler Kotlin/Java memberikan error "None of the following functions can be called with the arguments supplied". Solusi: perbarui panggilan metode ke tanda tangan baru atau tambahkan pemeriksaan SDK_INT dengan memanggil tanda tangan lama untuk perangkat lama.

kotlin
// Memecahkan masalah saat menaikkan compileSdk
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.content.pm.PackageManager

class CompileSdkProblemFixer {

    // Masalah: metode hasSystemFeature mengubah tanda tangan di API 36
    fun hasCamera(pm: PackageManager): Boolean {
        return if (VERSION.SDK_INT >= VERSION_CODES.BAKLAVA) {
            // Tanda tangan baru: hasSystemFeature(String, FeatureType)
            pm.hasSystemFeature(
                PackageManager.FEATURE_CAMERA,
                PackageManager.FEATURE_TYPE_BACK
            )
        } else {
            // Tanda tangan lama: hasSystemFeature(String)
            @Suppress("DEPRECATION")
            pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
        }
    }

    // Masalah: kelas dihapus, menggunakan padanan AndroidX
    fun loadFragment(manager: androidx.fragment.app.FragmentManager) {
        // Alih-alih android.app.FragmentManager (dihapus) menggunakan
        // androidx.fragment.app.FragmentManager
        val fragment = CustomFragment()
        manager.beginTransaction()
            .replace(android.R.id.content, fragment)
            .commit()
    }
}

Kelas CompileSdkProblemFixer memecahkan masalah umum: tanda tangan hasSystemFeature yang berubah (perubahan hipotetis di API 36) ditangani melalui pemeriksaan SDK_INT dengan memanggil versi metode yang benar. Kelas android.app.FragmentManager yang dihapus diganti dengan padanan AndroidX. Untuk panggilan lama yang tidak memiliki alternatif, digunakan @Suppress("DEPRECATION") dengan komentar tentang alasan mempertahankannya.

Pertanyaan yang Sering Diajukan

Apa itu compileSdkVersion di Android?

compileSdkVersion — versi Android SDK untuk mengkompilasi kode. Menentukan API mana yang tersedia untuk pengembang saat build. compileSdk tidak memengaruhi perilaku runtime — behavioural changes dikelola oleh targetSdkVersion. compileSdk harus >= targetSdk dan >= minSdk. Menaikkan compileSdk memberikan akses ke API baru, tetapi memerlukan pemeriksaan metode deprecated dan kompatibilitas dengan AGP.

Apa perbedaan compileSdkVersion dengan targetSdkVersion?

compileSdkVersion mengelola kompilasi: API mana yang tersedia untuk dipanggil dalam kode. targetSdkVersion mengelola perilaku runtime: behavioural changes mana yang diterapkan. compileSdk bisa lebih tinggi dari targetSdk — ini memungkinkan penggunaan API baru dalam kode tanpa mengaktifkan behavioural changes versi baru. compileSdk selalu >= targetSdk. minSdk — parameter terendah, targetSdk — menengah, compileSdk — tertinggi.

compileSdkVersion apa yang digunakan di tahun 2026?

Di tahun 2026, direkomendasikan compileSdk = 36 (Android 16, nama kode Baklava). Ini memberikan akses ke semua API versi Android terbaru. Untuk pustaka dan SDK, dapat menggunakan compileSdk = 35 atau 34 agar tidak memaksa konsumen memperbarui. compileSdk harus diinstal melalui SDK Manager dan didukung oleh versi AGP. AGP 8.7+ merekomendasikan compileSdk >= 34.

Apa yang harus dilakukan jika kode tidak dikompilasi setelah menaikkan compileSdk?

Error setelah menaikkan compileSdk biasanya terkait dengan API yang dihapus: kelas atau metode ditandai @Deprecated dan dihapus. Solusi: temukan alternatif di SDK baru, gunakan padanan AndroidX atau tambahkan @SuppressLint. Alasan kedua — izin wajib baru di manifes. Ketiga — perubahan tanda tangan metode: periksa dokumentasi dan perbarui panggilan ke tanda tangan baru dengan pemeriksaan SDK_INT.

Apakah perlu menaikkan compileSdkVersion bersamaan dengan targetSdk?

compileSdkVersion dapat dinaikkan secara independen dari targetSdk. Konfigurasi compileSdk = 36 dengan targetSdk = 34 benar: kode dikompilasi dengan API baru, tetapi behavioural changes API 35-36 tidak diaktifkan. Menaikkan compileSdk aman dan tidak memerlukan QA. Menaikkan targetSdk memerlukan siklus pengujian behavioural changes yang lengkap. Disarankan untuk menjaga compileSdk di API Level stabil terakhir.

Kesimpulan

  • compileSdkVersion — versi Android SDK untuk kompilasi, menentukan API yang tersedia, tidak memengaruhi runtime
  • Aturan hierarki: compileSdk >= targetSdk >= minSdk; compileSdk bisa lebih tinggi dari targetSdk
  • Menaikkan compileSdk — operasi aman, hanya memerlukan pemeriksaan API deprecated dan kompatibilitas dependensi
  • API baru dari compileSdk yang dinaikkan memerlukan pemeriksaan runtime Build.VERSION.SDK_INT, jika tidak akan crash di perangkat lama
  • AGP versi 8.7+ memerlukan compileSdk >= 34, compileSdk = 36 direkomendasikan
  • AndroidX menyediakan backport API, memungkinkan penggunaan metode modern di compileSdk mana pun
  • API deprecated setelah menaikkan compileSdk: ganti dengan alternatif atau gunakan @Suppress dengan fallback

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga