API Level: apa itu, versi API dan targetSdk

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

API Level Android adalah pengidentifikasi bilangan bulat yang secara unik sesuai dengan rilis tertentu dari platform Android. Setiap versi OS memiliki nomor uniknya sendiri: Android 14 = API 34, Android 15 = API 35. Pengembang mengelola tiga parameter di build.gradle — minSdkVersion, targetSdkVersion dan compileSdkVersion — untuk mengontrol kompatibilitas dan akses ke fitur baru. Menurut Android Developers, memilih API Level yang tepat sangat penting untuk keamanan dan jangkauan audiens.

Poin Penting

  • API Level — pengidentifikasi bilangan bulat dari versi Android API, dari API 1 (Android 1.0) hingga API 36 (Android 16)
  • minSdkVersion — versi Android minimum untuk menginstal aplikasi, menentukan jangkauan audiens
  • targetSdkVersion — versi yang digunakan untuk menguji aplikasi; mencakup perubahan perilaku versi tersebut
  • compileSdkVersion — versi SDK untuk kompilasi; harus >= targetSdk, memberikan akses ke API baru
  • Google Play mensyaratkan targetSdkVersion tidak lebih dari 1 tahun dari API Level saat ini

Apa itu API Level Android?

API Level Android adalah pengidentifikasi bilangan bulat yang ditetapkan untuk setiap rilis publik dari Android Framework API. Rilis pertama Android 1.0 memiliki API Level 1, Android 1.5 — API Level 3, Android 2.2 — API Level 8, Android 4.0 — API Level 14, Android 8.0 — API Level 26, Android 12 — API Level 31, Android 14 — API Level 34, Android 15 — API Level 35, Android 16 (2025) — API Level 36. Setiap API Level baru dapat menambahkan kelas, metode, konstanta, izin baru dan mengubah perilaku yang sudah ada.

API Level tidak selalu bertambah 1 dengan setiap rilis. Misalnya, Android 4.4W (Wear) memiliki API 20, sedangkan Android 5.0 — API 21. Kesenjangan terkait dengan iterasi internal dan perangkat Wear OS. Penting bagi pengembang untuk mengetahui bukan nama versi (KitKat, Lollipop, Tiramisu), tetapi API Level-nya — inilah yang digunakan dalam kode untuk pemeriksaan kompatibilitas.

Tujuan utama API Level adalah kompatibilitas mundur. Aplikasi yang dikompilasi terhadap API 34 dapat berjalan pada perangkat dengan API 34 dan di bawahnya (jika tidak menggunakan API baru tanpa pemeriksaan). Android Runtime (ART) memeriksa panggilan API di tingkat sistem dan menerapkan perubahan perilaku tergantung pada targetSdkVersion aplikasi.

Bagaimana Android menangani API Level

Saat menginstal aplikasi, PackageManager memeriksa apakah API Level perangkat >= minSdkVersion dari AndroidManifest.xml. Jika kondisi tidak terpenuhi — instalasi diblokir dengan pesan "App not installed". Selama runtime, Android Runtime memantau panggilan API yang memerlukan API Level lebih tinggi dan menghasilkan NoSuchMethodError atau UnsatisfiedLinkError jika metode tidak ada dalam versi saat ini.

KomponenPeran dalam penanganan API Level
PackageManagerMemeriksa minSdkVersion saat instalasi
Android Runtime (ART)Melakukan pemeriksaan kompatibilitas API saat runtime
Google Play StoreMenyaring aplikasi berdasarkan API Level perangkat
SDK ManagerMengunduh platform untuk kompilasi di bawah API Level yang diperlukan
lintAnalis statis, memperingatkan tentang penggunaan API di atas minSdk

minSdk, targetSdk, compileSdk: perbedaan dan peran setiap parameter

Dalam file build.gradle (Module: app), pengembang menentukan tiga parameter API Level: minSdkVersion, targetSdkVersion dan compileSdkVersion. Membingungkan mereka adalah salah satu kesalahan paling umum di kalangan pengembang Android pemula. Setiap parameter bertanggung jawab untuk aspek kompatibilitas yang berbeda, dan nilainya harus konsisten.

minSdkVersion

minSdkVersion adalah API Level minimum di mana aplikasi dapat diinstal dan dijalankan. Perangkat dengan API Level di bawah minSdk tidak melihat aplikasi di Google Play dan tidak dapat menginstalnya. Nilai dipilih berdasarkan target audiens: minSdk 21 (Android 5.0) mencakup 97% perangkat, minSdk 26 (Android 8.0) — sekitar 85%, minSdk 31 (Android 12) — sekitar 55% (data dari Android Studio Distribution Dashboard, 2026). Semakin rendah minSdk, semakin luas jangkauannya, tetapi semakin banyak kode kompatibilitas mundur yang diperlukan.

targetSdkVersion

targetSdkVersion adalah API Level yang digunakan untuk menguji aplikasi. Android menggunakan targetSdk untuk menerapkan perubahan perilaku: jika aplikasi menentukan targetSdk 33, sistem mengaktifkan semua perubahan perilaku yang diperkenalkan di API 33. Jika targetSdk adalah 31, sistem tidak menerapkan perubahan API 32-33, mempertahankan kompatibilitas dengan perilaku lama. Ini adalah parameter terpenting untuk keamanan: Google Play mensyaratkan targetSdk tidak lebih dari 1 tahun dari API Level saat ini.

compileSdkVersion

compileSdkVersion adalah versi Android SDK yang digunakan untuk mengkompilasi kode. Menentukan API mana yang tersedia saat kompilasi. compileSdk harus >= targetSdk dan, idealnya, sama dengan API Level stabil terbaru. Menaikkan compileSdk tidak mempengaruhi perilaku runtime — hanya ketersediaan API baru untuk kompilator. Setelah menaikkan compileSdk, Anda perlu memeriksa kode untuk API yang tidak digunakan lagi dan persyaratan izin baru.

kotlin
// build.gradle.kts — contoh konfigurasi API Level
plugins {
    id("com.android.application") version "8.7.0"
    id("org.jetbrains.kotlin.android") version "2.1.0"
}

android {
    namespace = "com.example.myapp"
    compileSdk = 36  // Android 16

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

    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.15.0")
    implementation("androidx.appcompat:appcompat:1.7.0")
    implementation("androidx.activity:activity-ktx:1.9.3")
}

Dalam contoh build.gradle.kts, compileSdk = 36 (terbaru pada saat penulisan), targetSdk = 36, minSdk = 26 (Android 8.0). compileSdk 36 memberikan akses ke semua API Android 16. targetSdk 36 mengaktifkan semua perubahan perilaku Android 16. minSdk 26 mencakup ~85% perangkat. AndroidX Activity KTX dan AppCompat menyediakan kompatibilitas mundur untuk fragmen dan tema.

AndroidManifest.xml

Parameter minSdk dan targetSdk juga dapat ditentukan di AndroidManifest.xml, tetapi proyek modern menggunakan build.gradle — nilai dari Gradle menimpa manifes. Di manifes, mungkin berguna untuk menentukan untuk pustaka dan modul yang tidak menggunakan konfigurasi build Gradle.

Perubahan Perilaku: bagaimana targetSdk mempengaruhi perilaku aplikasi

Perubahan perilaku adalah modifikasi cara kerja sistem Android yang hanya diterapkan pada aplikasi dengan targetSdk >= API Level tertentu. Setiap rilis Android baru memperkenalkan perubahan perilaku yang dapat merusak aplikasi yang ada jika tidak diperbarui. Ini adalah mekanisme keamanan utama Android: aplikasi lama terus bekerja seperti sebelumnya, yang baru mengikuti aturan saat ini.

Perubahan perilaku utama berdasarkan versi

Android 10 (API 29) — Scoped Storage: aplikasi dengan targetSdk 29+ tidak memiliki akses langsung ke sistem file bersama, hanya melalui MediaStore, SAF atau penyimpanan sendiri. Android 11 (API 30) — Package Visibility: filter paket, aplikasi hanya melihat paket yang diinstal yang berinteraksi dengannya. Android 12 (API 31) — Foreground Service Notification: semua layanan latar depan wajib menampilkan notifikasi dalam 10 detik setelah dimulai. Android 13 (API 33) — POST_NOTIFICATIONS: izin runtime untuk notifikasi push. Android 14 (API 34) — Foreground Service Types: deklarasi wajib jenis layanan latar depan di manifes.

kotlin
// Penanganan perubahan perilaku Android 13 (API 33): POST_NOTIFICATIONS
import android.Manifest
import android.content.pm.PackageManager
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat

class NotificationHelper {

    fun requestNotificationPermission(activity: MainActivity) {
        // Izin POST_NOTIFICATIONS hanya berfungsi dengan API 33+
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
            return  // Di bawah API 33 izin tidak diperlukan
        }

        when {
            ContextCompat.checkSelfPermission(
                activity,
                Manifest.permission.POST_NOTIFICATIONS
            ) == PackageManager.PERMISSION_GRANTED -> {
                // Izin sudah diberikan, notifikasi dapat dikirim
                showNotification(activity)
            }

            activity.shouldShowRequestPermissionRationale(
                Manifest.permission.POST_NOTIFICATIONS
            ) -> {
                // Tampilkan penjelasan mengapa izin diperlukan
                activity.showRationale()
            }

            else -> {
                // Minta izin
                activity.requestPermissionLauncher.launch(
                    Manifest.permission.POST_NOTIFICATIONS
                )
            }
        }
    }

    private fun showNotification(context: Context) {
        // Buat dan tampilkan notifikasi
        val notification = android.app.Notification.Builder(context, "default_channel")
            .setSmallIcon(android.R.drawable.ic_dialog_info)
            .setContentTitle("Notifikasi")
            .setContentText("Pesan baru")
            .build()
        val manager = context.getSystemService(Context.NOTIFICATION_SERVICE)
            as android.app.NotificationManager
        manager.notify(1, notification)
    }
}

// Daftarkan requestPermissionLauncher di Activity
class MainActivity : ComponentActivity() {
    val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            // Izin diberikan
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Contoh penanganan POST_NOTIFICATIONS di Kotlin: periksa Build.VERSION.SDK_INT >= TIRAMISU, minta izin runtime melalui ActivityResultContracts.RequestPermission, tangani hasil di callback. Tanpa izin ini, aplikasi dengan targetSdk 33+ tidak dapat menampilkan notifikasi push. Di bawah API 33 izin tidak diperlukan — kode pemeriksaan mencegah pemanggilan API yang tidak tersedia.

Scoped Storage (Android 10+)

Scoped Storage adalah salah satu perubahan perilaku yang paling signifikan. Mulai dari API 29 (targetSdk 29+), aplikasi tidak dapat memperoleh akses file langsung ke direktori Pictures, Downloads, Music dan Documents. Sebagai gantinya, MediaStore digunakan untuk media, SAF (Storage Access Framework) untuk file arbitrer, dan getExternalFilesDir() untuk penyimpanan sendiri. Pengecualian adalah aplikasi dengan izin MANAGE_EXTERNAL_STORAGE, yang memerlukan persetujuan Google Play.

Persyaratan Google Play untuk API Level dan targetSdk

Google Play menetapkan persyaratan targetSdkVersion wajib untuk menerbitkan aplikasi. Sejak Agustus 2024, Google Play mensyaratkan targetSdkVersion >= API 33 (Android 13). Setiap tahun ambang batas meningkat: aplikasi dan pembaruan baru harus menentukan targetSdk tidak lebih dari 1 tahun dari API Level utama saat ini. Pelanggaran persyaratan mengakibatkan pemblokiran publikasi dan penghapusan aplikasi dari toko.

Mengapa Google Play memperketat persyaratan

Alasan utamanya adalah keamanan. Setiap API Level Android baru memperkenalkan perubahan perilaku yang menutup vektor serangan: Scoped Storage (API 29) mencegah pencurian file, POST_NOTIFICATIONS (API 33) melindungi dari notifikasi spam, Foreground Service Types (API 34) membatasi layanan latar belakang tersembunyi. Aplikasi dengan targetSdk rendah tidak menerima perlindungan ini dan menjadi ancaman bagi pengguna. Google Play tidak dapat mengizinkan aplikasi usang pada perangkat modern.

Memeriksa kepatuhan terhadap persyaratan

Google Play Console memeriksa targetSdkVersion saat mengunggah APK/AAB. Jika targetSdk di bawah yang disyaratkan — konsol memblokir publikasi dengan pesan: "Your app currently targets API level X and must target at least API level Y". Pengembang harus memperbarui build.gradle, mengkompilasi ulang aplikasi, menguji perubahan perilaku dan mengunggah ulang. Format AAB direkomendasikan untuk semua publikasi baru (wajib sejak Agustus 2021).

TanggaltargetSdk minimumVersi Android
Agustus 202231Android 12
Agustus 202333Android 13
Agustus 202433Android 13
Agustus 202534Android 14
Agustus 2026 (rencana)35Android 15

Memeriksa API Level dalam kode: Build.VERSION.SDK_INT

Build.VERSION.SDK_INT adalah konstanta bilangan bulat statis yang berisi API Level perangkat tempat aplikasi dijalankan. Ini adalah alat utama untuk pemeriksaan versi Android saat runtime. Build.VERSION_CODES berisi konstanta bernama untuk setiap API Level: VERSION_CODES.TIRAMISU (33), VERSION_CODES.UPSIDE_DOWN_CAKE (34), VERSION_CODES.VANILLA_ICE_CREAM (35). Perbandingan melalui if (SDK_INT >= VERSION_CODES.TIRAMISU) adalah pola standar.

kotlin
// Contoh pemeriksaan API Level dalam kode Android
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.drawable.AdaptiveIconDrawable

class ApiLevelHelper {

    // 1. Pemeriksaan API Level dasar
    fun isAtLeastTiramisu(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU  // 33
    }

    // 2. Panggilan API adaptif dengan pemeriksaan
    fun getAdaptiveIcon(drawable: android.graphics.drawable.Drawable):
            android.graphics.drawable.Drawable? {
        // AdaptiveIconDrawable hanya tersedia dengan API 26 (Android 8)
        if (VERSION.SDK_INT >= VERSION_CODES.O) {
            return AdaptiveIconDrawable(drawable, null)
        }
        return drawable  // fallback untuk perangkat lama
    }

    // 3. Pemeriksaan izin POST_NOTIFICATIONS (hanya API 33+)
    fun canRequestNotificationPermission(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU
    }

    // 4. Memilih penyedia gambar berdasarkan API Level
    fun getImagePickerProvider(): String {
        return when {
            VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
                // API 34+ menggunakan PhotoPicker
                "photo_picker"
            }
            VERSION.SDK_INT >= VERSION_CODES.KITKAT -> {
                // API 19+ menggunakan Intent ACTION_OPEN_DOCUMENT
                "open_document"
            }
            else -> {
                // Legacy: ACTION_GET_CONTENT (semua versi)
                "get_content"
            }
        }
    }

    // 5. Pemeriksaan gaya Java melalui @TargetApi (untuk kompatibilitas mundur)
    @Suppress("DEPRECATION")
    fun checkLegacyStorage(): Boolean {
        // Perilaku Scoped Storage tergantung pada targetSdk, bukan SDK_INT
        return VERSION.SDK_INT < VERSION_CODES.Q  // Android 10
    }

    // 6. Informasi build untuk analitik
    fun getDeviceApiInfo(): Map<String, Any> {
        return mapOf(
            "sdk_int" to VERSION.SDK_INT,
            "release" to VERSION.RELEASE,
            "codename" to VERSION.CODENAME,
            "incremental" to VERSION.INCREMENTAL,
            "preview_sdk" to VERSION.PREVIEW_SDK_INT
        )
    }
}

// Pengujian
fun main() {
    val helper = ApiLevelHelper()
    println("API Level: ${VERSION.SDK_INT}")
    println("Is Tiramisu+: ${helper.isAtLeastTiramisu()}")
}

Kelas ApiLevelHelper mendemonstrasikan semua pola pemeriksaan API Level utama: isAtLeastTiramisu dengan SDK_INT >= VERSION_CODES, getAdaptiveIcon dengan fallback untuk versi lama, getImagePickerProvider dengan when multi-cabang, getDeviceApiInfo untuk analitik. Aturan utamanya adalah jangan memanggil API baru tanpa memeriksa SDK_INT, jika tidak aplikasi akan crash dengan NoSuchMethodError pada perangkat lama.

ANT (Android New API) dan lint

Android Studio menyertakan analis statis lint, yang memperingatkan tentang penggunaan API di atas minSdkVersion. Jika suatu metode dipanggil tanpa pemeriksaan SDK_INT, lint menyorotnya sebagai kesalahan: "Call requires API level 34 (current min is 26)". Solusi: tambahkan @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) ke metode atau pemeriksaan if SDK_INT. @TargetApi adalah anotasi yang tidak digunakan lagi, @RequiresApi direkomendasikan.

Tabel korespondensi API Level dan versi Android

Tabel API Level adalah alat referensi bagi pengembang. Mengetahui API Level perangkat, Anda dapat menentukan versi Android dan fitur yang tersedia. Tabel mencantumkan semua rilis Android utama dari API Level 1 (2008) hingga API Level 36 (2025). Nama kode (Cupcake, Donut, Tiramisu, VanillaIceCream) digunakan secara internal di Google dan di VERSION_CODES.

API LevelVersi AndroidNama KodeTahun
11.02008
31.5Cupcake2009
82.2Froyo2010
144.0Ice Cream Sandwich2011
194.4KitKat2013
215.0Lollipop2014
236.0Marshmallow2015
268.0Oreo2017
289Pie2018
2910Quince Tart (10)2019
3011Red Velvet Cake2020
3112Snow Cone2021
3313Tiramisu2022
3414Upside Down Cake2023
3515Vanilla Ice Cream2024
3616Baklava2025

Tabel: API Level ambang untuk perubahan perilaku

Tabel berikut menunjukkan API Level utama yang memperkenalkan perubahan perilaku yang merusak kompatibilitas mundur saat menaikkan targetSdk:

API LevelPerubahan PerilakuDampak pada Aplikasi
29Scoped StorageTidak ada akses file langsung ke Pictures/Downloads/Music
30Package VisibilityqueryIntentActivities() hanya melihat paket yang berinteraksi
31Foreground Service NotificationNotifikasi wajib dalam 10 detik
33POST_NOTIFICATIONSIzin runtime untuk notifikasi
34Foreground Service TypesDeklarasi jenis layanan latar depan di manifes
35Privacy SandboxBatasan pengidentifikasi iklan

Pertanyaan yang Sering Diajukan

Apa itu API Level di Android?

API Level Android adalah pengidentifikasi bilangan bulat dari versi Android API. Setiap rilis memiliki nomor unik: Android 13 = API 33, Android 14 = API 34, Android 15 = API 35, Android 16 = API 36. Pengembang menentukan minSdkVersion, targetSdkVersion dan compileSdkVersion di build.gradle untuk mengelola kompatibilitas. API Level menentukan kelas, metode, dan perubahan perilaku yang tersedia.

Apa perbedaan antara minSdk, targetSdk dan compileSdk?

minSdkVersion — versi Android minimum untuk menginstal aplikasi. targetSdkVersion — versi yang digunakan untuk menguji aplikasi, mencakup perubahan perilaku. compileSdkVersion — versi SDK untuk mengkompilasi kode. minSdk adalah yang terendah, targetSdk sebaiknya yang terbaru, compileSdk harus setidaknya targetSdk. Ketiganya ditentukan di build.gradle.

Apa yang terjadi jika saya mengatur targetSdk lebih rendah dari versi Android di perangkat?

Jika targetSdkVersion lebih rendah dari API Level perangkat, Android menonaktifkan perubahan perilaku yang diperkenalkan setelah targetSdk. Misalnya, dengan targetSdk = 28 di Android 14 (API 34), Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types tidak diterapkan. Google Play mensyaratkan targetSdkVersion tidak lebih dari 1 tahun dari API Level saat ini untuk keamanan pengguna.

Bagaimana cara mengetahui API Level perangkat?

API Level perangkat tersedia melalui konstanta Build.VERSION.SDK_INT (misalnya, 34 untuk Android 14). Untuk perbandingan, gunakan konstanta bernama dari Build.VERSION_CODES: if (SDK_INT >= VERSION_CODES.TIRAMISU). Build.VERSION.RELEASE mengembalikan string versi ("14"). Nilai SDK_INT di-cache saat kelas dimuat dan dapat diakses dari thread mana pun.

Mengapa Google Play meminta targetSdk baru setiap tahun?

Google Play meningkatkan persyaratan targetSdkVersion setiap tahun untuk menerapkan perubahan perilaku keamanan. Setiap API Level baru memperkenalkan Scoped Storage, POST_NOTIFICATIONS, Privacy Sandbox dan perlindungan lainnya. Aplikasi dengan targetSdk rendah melewati perlindungan ini dan menciptakan risiko bagi pengguna. Persyaratan ini memastikan bahwa semua aplikasi di toko telah diuji berdasarkan aturan saat ini.

Ringkasan

  • API Level — pengidentifikasi bilangan bulat dari versi Android API (1-36), digunakan untuk mengelola kompatibilitas aplikasi
  • minSdkVersion menetapkan API Level minimum untuk instalasi, targetSdkVersion — versi dengan perubahan perilaku, compileSdkVersion — versi untuk kompilasi
  • Perubahan perilaku (Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types) hanya diterapkan jika targetSdk >= API Level yang sesuai
  • Google Play mensyaratkan targetSdk tidak lebih dari 1 tahun, jika tidak akan memblokir publikasi aplikasi
  • Build.VERSION.SDK_INT — pemeriksaan runtime API Level perangkat untuk memanggil API baru dengan aman dengan fallback
  • lint di Android Studio memperingatkan tentang penggunaan API di atas minSdk dan merekomendasikan @RequiresApi untuk metode
  • Perubahan perilaku API 34+ mencakup jenis layanan latar depan wajib, API 35+ — Privacy Sandbox dengan batasan pengidentifikasi iklan

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