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 — 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.
// 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.
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.
| Parameter | Ruang lingkup | Memengaruhi runtime | Memerlukan pengujian |
|---|---|---|---|
| compileSdkVersion | Kompilasi | Tidak | Tidak (hanya pengecekan deprecated) |
| targetSdkVersion | Runtime | Ya — behavioural changes | Ya — siklus QA penuh |
| minSdkVersion | Instalasi | Tidak | Tidak (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.
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.
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.
// 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").
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+.
// 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.
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 AGP | compileSdk minimal | compileSdk yang direkomendasikan | Catatan |
|---|---|---|---|
| 8.3.x | 33 | 34 | Dukungan Android 14 |
| 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+) 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 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.
// 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
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.
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.
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.
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.
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
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.
Baca juga