API Level: คืออะไร เวอร์ชัน API และ targetSdk

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-08 เวลาอ่าน: 12 นาที

API Level Android คือตัวระบุจำนวนเต็มที่สอดคล้องกับรีลีสเฉพาะของแพลตฟอร์ม Android แต่ละเวอร์ชันของระบบปฏิบัติการมีหมายเลขเฉพาะของตัวเอง: Android 14 = API 34, Android 15 = API 35 นักพัฒนาจัดการพารามิเตอร์สามตัวใน build.gradle — minSdkVersion, targetSdkVersion และ compileSdkVersion — เพื่อควบคุมความเข้ากันได้และการเข้าถึงฟีเจอร์ใหม่ ตาม Android Developers การเลือก API Level ที่เหมาะสมมีความสำคัญต่อความปลอดภัยและการครอบคลุมผู้ชม

ประเด็นสำคัญ

  • API Level — ตัวระบุจำนวนเต็มของเวอร์ชัน Android API ตั้งแต่ API 1 (Android 1.0) ถึง API 36 (Android 16)
  • minSdkVersion — เวอร์ชัน Android ขั้นต่ำสำหรับติดตั้งแอป กำหนดการครอบคลุมผู้ชม
  • targetSdkVersion — เวอร์ชันที่ใช้ทดสอบแอป รวมถึงการเปลี่ยนแปลงพฤติกรรมของเวอร์ชันนั้น
  • compileSdkVersion — เวอร์ชัน SDK สำหรับคอมไพล์ ต้อง >= targetSdk ให้เข้าถึง API ใหม่
  • Google Play กำหนดให้ targetSdkVersion ไม่เก่าเกิน 1 ปีจาก API Level ปัจจุบัน

API Level Android คืออะไร?

API Level Android คือตัวระบุจำนวนเต็มที่กำหนดให้กับรีลีสสาธารณะแต่ละครั้งของ Android Framework API รีลีสแรก Android 1.0 มี 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 แต่ละ API Level ใหม่อาจเพิ่มคลาส เมธอด ค่าคงที่ สิทธิ์ใหม่ และเปลี่ยนพฤติกรรมของสิ่งที่มีอยู่

API Level ไม่ได้เพิ่มขึ้นทีละ 1 อย่างเคร่งครัดในทุกรีลีส ตัวอย่างเช่น Android 4.4W (Wear) มี API 20 ในขณะที่ Android 5.0 — API 21 ช่องว่างเกี่ยวข้องกับการทำซ้ำภายในและอุปกรณ์ Wear OS สำหรับนักพัฒนา สิ่งสำคัญคือต้องรู้ไม่ใช่ชื่อเวอร์ชัน (KitKat, Lollipop, Tiramisu) แต่เป็น API Level — นี่คือสิ่งที่ใช้ในโค้ดสำหรับตรวจสอบความเข้ากันได้

วัตถุประสงค์หลักของ API Level คือความเข้ากันได้ย้อนหลัง แอปที่คอมไพล์กับ API 34 สามารถทำงานบนอุปกรณ์ที่มี API 34 และต่ำกว่า (หากไม่ใช้ API ใหม่โดยไม่ตรวจสอบ) Android Runtime (ART) ตรวจสอบการเรียก API ในระดับระบบและใช้การเปลี่ยนแปลงพฤติกรรมตาม targetSdkVersion ของแอป

Android จัดการ API Level อย่างไร

เมื่อติดตั้งแอป PackageManager จะตรวจสอบว่า API Level ของอุปกรณ์ >= minSdkVersion จาก AndroidManifest.xml หากไม่เป็นไปตามเงื่อนไข — การติดตั้งจะถูกบล็อกด้วยข้อความ "App not installed" ในระหว่างการทำงาน Android Runtime จะตรวจสอบการเรียก API ที่ต้องการ API Level สูงกว่าและสร้าง NoSuchMethodError หรือ UnsatisfiedLinkError หากเมธอดไม่มีอยู่ในเวอร์ชันปัจจุบัน

ส่วนประกอบบทบาทในการจัดการ API Level
PackageManagerตรวจสอบ minSdkVersion ระหว่างการติดตั้ง
Android Runtime (ART)ดำเนินการตรวจสอบความเข้ากันได้ของ API ในขณะทำงาน
Google Play Storeกรองแอปตาม API Level ของอุปกรณ์
SDK Managerดาวน์โหลดแพลตฟอร์มสำหรับคอมไพล์ภายใต้ API Level ที่ต้องการ
lintตัววิเคราะห์แบบคงที่ เตือนเกี่ยวกับการใช้ API ที่สูงกว่า minSdk

minSdk, targetSdk, compileSdk: ความแตกต่างและบทบาทของแต่ละพารามิเตอร์

ในไฟล์ build.gradle (Module: app) นักพัฒนาจะระบุพารามิเตอร์ API Level สามตัว: minSdkVersion, targetSdkVersion และ compileSdkVersion การสับสนระหว่างพารามิเตอร์เหล่านี้เป็นหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดของนักพัฒนา Android มือใหม่ แต่ละพารามิเตอร์รับผิดชอบด้านความเข้ากันได้ที่แตกต่างกัน และค่าของพารามิเตอร์ต้องสอดคล้องกัน

minSdkVersion

minSdkVersion คือ API Level ขั้นต่ำที่สามารถติดตั้งและเรียกใช้แอปได้ อุปกรณ์ที่มี API Level ต่ำกว่า minSdk จะไม่เห็นแอปใน Google Play และไม่สามารถติดตั้งได้ ค่าจะถูกเลือกตามกลุ่มเป้าหมาย: minSdk 21 (Android 5.0) ครอบคลุม 97% ของอุปกรณ์, minSdk 26 (Android 8.0) — ประมาณ 85%, minSdk 31 (Android 12) — ประมาณ 55% (ข้อมูลจาก Android Studio Distribution Dashboard, 2026) ยิ่ง minSdk ต่ำ การครอบคลุมยิ่งมากขึ้น แต่ต้องใช้โค้ดความเข้ากันได้ย้อนหลังมากขึ้น

targetSdkVersion

targetSdkVersion คือ API Level ที่ใช้ทดสอบแอป Android ใช้ targetSdk เพื่อใช้การเปลี่ยนแปลงพฤติกรรม: หากแอประบุ targetSdk 33 ระบบจะเปิดใช้งานการเปลี่ยนแปลงพฤติกรรมทั้งหมดที่นำมาใช้ใน API 33 หาก targetSdk คือ 31 ระบบจะไม่ใช้การเปลี่ยนแปลง API 32-33 โดยคงความเข้ากันได้กับพฤติกรรมเก่า นี่เป็นพารามิเตอร์ที่สำคัญที่สุดสำหรับความปลอดภัย: Google Play กำหนดให้ targetSdk ไม่เก่าเกิน 1 ปีจาก API Level ปัจจุบัน

compileSdkVersion

compileSdkVersion คือเวอร์ชัน Android SDK ที่ใช้คอมไพล์โค้ด กำหนดว่า API ใดบ้างที่พร้อมใช้งานในเวลาคอมไพล์ compileSdk ต้อง >= targetSdk และควรเท่ากับ API Level เสถียรล่าสุด การเพิ่ม compileSdk ไม่ส่งผลต่อพฤติกรรมในขณะทำงาน — เฉพาะความพร้อมใช้งานของ API ใหม่สำหรับคอมไพเลอร์ หลังจากเพิ่ม compileSdk คุณต้องตรวจสอบโค้ดสำหรับ API ที่เลิกใช้และข้อกำหนดสิทธิ์ใหม่

kotlin
// build.gradle.kts — ตัวอย่างการกำหนดค่า 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")
}

ในตัวอย่าง build.gradle.kts compileSdk = 36 (ล่าสุดในขณะเขียน), targetSdk = 36, minSdk = 26 (Android 8.0) compileSdk 36 ให้เข้าถึง API ทั้งหมดของ Android 16 targetSdk 36 เปิดใช้งานการเปลี่ยนแปลงพฤติกรรมทั้งหมดของ Android 16 minSdk 26 ครอบคลุม ~85% ของอุปกรณ์ AndroidX Activity KTX และ AppCompat ให้ความเข้ากันได้ย้อนหลังสำหรับ fragment และธีม

AndroidManifest.xml

พารามิเตอร์ minSdk และ targetSdk ยังสามารถระบุได้ใน AndroidManifest.xml แต่โปรเจกต์สมัยใหม่ใช้ build.gradle — ค่าจาก Gradle จะแทนที่ manifest ใน manifest การระบุ อาจมีประโยชน์สำหรับไลบรารีและโมดูลที่ไม่ใช้การกำหนดค่าบิลด์ของ Gradle

การเปลี่ยนแปลงพฤติกรรม: targetSdk ส่งผลต่อพฤติกรรมของแอปอย่างไร

การเปลี่ยนแปลงพฤติกรรม คือการปรับเปลี่ยนวิธีการทำงานของระบบ Android ที่ใช้เฉพาะกับแอปที่มี targetSdk >= API Level ที่กำหนด ทุกรีลีส Android ใหม่จะนำการเปลี่ยนแปลงพฤติกรรมที่อาจทำลายแอปที่มีอยู่หากไม่ได้รับการอัปเดต นี่เป็นกลไกความปลอดภัยที่สำคัญของ Android: แอปเก่ายังคงทำงานเหมือนเดิม แอปใหม่ปฏิบัติตามกฎปัจจุบัน

การเปลี่ยนแปลงพฤติกรรมหลักตามเวอร์ชัน

Android 10 (API 29) — Scoped Storage: แอปที่มี targetSdk 29+ ไม่มีการเข้าถึงระบบไฟล์ที่ใช้ร่วมกันโดยตรง ทำได้ผ่าน MediaStore, SAF หรือพื้นที่เก็บข้อมูลของตัวเองเท่านั้น Android 11 (API 30) — Package Visibility: ตัวกรองแพ็กเกจ แอปจะเห็นเฉพาะแพ็กเกจที่ติดตั้งซึ่งมีปฏิสัมพันธ์ด้วย Android 12 (API 31) — Foreground Service Notification: บริการเบื้องหน้าทั้งหมดต้องแสดงการแจ้งเตือนภายใน 10 วินาทีหลังจากเริ่มทำงาน Android 13 (API 33) — POST_NOTIFICATIONS: สิทธิ์ในขณะทำงานสำหรับการแจ้งเตือนแบบพุช Android 14 (API 34) — Foreground Service Types: การประกาศประเภทบริการเบื้องหน้าที่จำเป็นใน manifest

kotlin
// การจัดการการเปลี่ยนแปลงพฤติกรรม 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) {
        // สิทธิ์ POST_NOTIFICATIONS ทำงานกับ API 33+ เท่านั้น
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
            return  // ต่ำกว่า API 33 ไม่ต้องขอสิทธิ์
        }

        when {
            ContextCompat.checkSelfPermission(
                activity,
                Manifest.permission.POST_NOTIFICATIONS
            ) == PackageManager.PERMISSION_GRANTED -> {
                // ได้รับสิทธิ์แล้ว สามารถส่งการแจ้งเตือนได้
                showNotification(activity)
            }

            activity.shouldShowRequestPermissionRationale(
                Manifest.permission.POST_NOTIFICATIONS
            ) -> {
                // แสดงคำอธิบายว่าทำไมต้องขอสิทธิ์
                activity.showRationale()
            }

            else -> {
                // ขอสิทธิ์
                activity.requestPermissionLauncher.launch(
                    Manifest.permission.POST_NOTIFICATIONS
                )
            }
        }
    }

    private fun showNotification(context: Context) {
        // สร้างและแสดงการแจ้งเตือน
        val notification = android.app.Notification.Builder(context, "default_channel")
            .setSmallIcon(android.R.drawable.ic_dialog_info)
            .setContentTitle("การแจ้งเตือน")
            .setContentText("ข้อความใหม่")
            .build()
        val manager = context.getSystemService(Context.NOTIFICATION_SERVICE)
            as android.app.NotificationManager
        manager.notify(1, notification)
    }
}

// ลงทะเบียน requestPermissionLauncher ใน Activity
class MainActivity : ComponentActivity() {
    val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            // ได้รับสิทธิ์แล้ว
        }
    }

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

ตัวอย่างการจัดการ POST_NOTIFICATIONS ใน Kotlin: ตรวจสอบ Build.VERSION.SDK_INT >= TIRAMISU, ขอสิทธิ์ในขณะทำงานผ่าน ActivityResultContracts.RequestPermission, จัดการผลลัพธ์ใน callback หากไม่มีสิทธิ์นี้ แอปที่มี targetSdk 33+ จะไม่สามารถแสดงการแจ้งเตือนแบบพุชได้ ต่ำกว่า API 33 ไม่ต้องขอสิทธิ์ — โค้ดตรวจสอบป้องกันการเรียก API ที่ไม่พร้อมใช้งาน

Scoped Storage (Android 10+)

Scoped Storage เป็นหนึ่งในการเปลี่ยนแปลงพฤติกรรมที่สำคัญที่สุด เริ่มตั้งแต่ API 29 (targetSdk 29+) แอปไม่สามารถเข้าถึงไฟล์โดยตรงไปยังไดเรกทอรี Pictures, Downloads, Music และ Documents แต่จะใช้ MediaStore สำหรับสื่อ, SAF (Storage Access Framework) สำหรับไฟล์ทั่วไป และ getExternalFilesDir() สำหรับพื้นที่เก็บข้อมูลของตัวเอง ข้อยกเว้นคือแอปที่มีสิทธิ์ MANAGE_EXTERNAL_STORAGE ซึ่งต้องได้รับการอนุมัติจาก Google Play

ข้อกำหนดของ Google Play สำหรับ API Level และ targetSdk

Google Play กำหนดข้อกำหนด targetSdkVersion ที่จำเป็นสำหรับการเผยแพร่แอป ตั้งแต่เดือนสิงหาคม 2024 Google Play กำหนด targetSdkVersion >= API 33 (Android 13) แต่ละปีเกณฑ์จะสูงขึ้น: แอปใหม่และการอัปเดตต้องระบุ targetSdk ไม่เก่าเกิน 1 ปีจาก API Level หลักปัจจุบัน การละเมิดข้อกำหนดจะนำไปสู่การบล็อกการเผยแพร่และการลบแอปออกจากร้านค้า

ทำไม Google Play จึงเพิ่มข้อกำหนดให้เข้มงวดขึ้น

เหตุผลหลักคือ ความปลอดภัย แต่ละ API Level ใหม่ของ Android นำการเปลี่ยนแปลงพฤติกรรมที่ปิดเวกเตอร์การโจมตี: Scoped Storage (API 29) ป้องกันการขโมยไฟล์, POST_NOTIFICATIONS (API 33) ป้องกันการแจ้งเตือนสแปม, Foreground Service Types (API 34) จำกัดบริการพื้นหลังที่ซ่อนอยู่ แอปที่มี targetSdk ต่ำไม่ได้รับการป้องกันเหล่านี้และเป็นภัยคุกคามต่อผู้ใช้ Google Play ไม่สามารถอนุญาตให้แอปล้าสมัยบนอุปกรณ์สมัยใหม่

การตรวจสอบการปฏิบัติตามข้อกำหนด

Google Play Console ตรวจสอบ targetSdkVersion เมื่ออัปโหลด APK/AAB หาก targetSdk ต่ำกว่าที่กำหนด — คอนโซลจะบล็อกการเผยแพร่ด้วยข้อความ: "Your app currently targets API level X and must target at least API level Y" นักพัฒนาต้องอัปเดต build.gradle คอมไพล์แอปใหม่ ทดสอบการเปลี่ยนแปลงพฤติกรรม และอัปโหลดอีกครั้ง รูปแบบ AAB แนะนำสำหรับการเผยแพร่ใหม่ทั้งหมด (บังคับตั้งแต่เดือนสิงหาคม 2021)

วันที่targetSdk ขั้นต่ำเวอร์ชัน Android
สิงหาคม 202231Android 12
สิงหาคม 202333Android 13
สิงหาคม 202433Android 13
สิงหาคม 202534Android 14
สิงหาคม 2026 (แผน)35Android 15

ตรวจสอบ API Level ในโค้ด: Build.VERSION.SDK_INT

Build.VERSION.SDK_INT คือค่าคงที่จำนวนเต็มแบบคงที่ที่ประกอบด้วย API Level ของอุปกรณ์ที่เรียกใช้แอป เป็นเครื่องมือหลักสำหรับตรวจสอบเวอร์ชัน Android ในขณะทำงาน Build.VERSION_CODES ประกอบด้วยค่าคงที่ชื่อสำหรับแต่ละ API Level: VERSION_CODES.TIRAMISU (33), VERSION_CODES.UPSIDE_DOWN_CAKE (34), VERSION_CODES.VANILLA_ICE_CREAM (35) การเปรียบเทียบผ่าน if (SDK_INT >= VERSION_CODES.TIRAMISU) เป็นรูปแบบมาตรฐาน

kotlin
// ตัวอย่างการตรวจสอบ API Level ในโค้ด Android
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.graphics.drawable.AdaptiveIconDrawable

class ApiLevelHelper {

    // 1. การตรวจสอบ API Level พื้นฐาน
    fun isAtLeastTiramisu(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU  // 33
    }

    // 2. การเรียก API แบบปรับตัวพร้อมการตรวจสอบ
    fun getAdaptiveIcon(drawable: android.graphics.drawable.Drawable):
            android.graphics.drawable.Drawable? {
        // AdaptiveIconDrawable พร้อมใช้งานกับ API 26 (Android 8) เท่านั้น
        if (VERSION.SDK_INT >= VERSION_CODES.O) {
            return AdaptiveIconDrawable(drawable, null)
        }
        return drawable  // fallback สำหรับอุปกรณ์เก่า
    }

    // 3. การตรวจสอบสิทธิ์ POST_NOTIFICATIONS (เฉพาะ API 33+)
    fun canRequestNotificationPermission(): Boolean {
        return VERSION.SDK_INT >= VERSION_CODES.TIRAMISU
    }

    // 4. การเลือกผู้ให้บริการรูปภาพตาม API Level
    fun getImagePickerProvider(): String {
        return when {
            VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
                // API 34+ ใช้ PhotoPicker
                "photo_picker"
            }
            VERSION.SDK_INT >= VERSION_CODES.KITKAT -> {
                // API 19+ ใช้ Intent ACTION_OPEN_DOCUMENT
                "open_document"
            }
            else -> {
                // Legacy: ACTION_GET_CONTENT (ทุกเวอร์ชัน)
                "get_content"
            }
        }
    }

    // 5. การตรวจสอบสไตล์ Java ผ่าน @TargetApi (สำหรับความเข้ากันได้ย้อนหลัง)
    @Suppress("DEPRECATION")
    fun checkLegacyStorage(): Boolean {
        // พฤติกรรมของ Scoped Storage ขึ้นอยู่กับ targetSdk ไม่ใช่ SDK_INT
        return VERSION.SDK_INT < VERSION_CODES.Q  // Android 10
    }

    // 6. ข้อมูลบิลด์สำหรับการวิเคราะห์
    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
        )
    }
}

// การทดสอบ
fun main() {
    val helper = ApiLevelHelper()
    println("API Level: ${VERSION.SDK_INT}")
    println("Is Tiramisu+: ${helper.isAtLeastTiramisu()}")
}

คลาส ApiLevelHelper แสดงรูปแบบการตรวจสอบ API Level หลักทั้งหมด: isAtLeastTiramisu กับ SDK_INT >= VERSION_CODES, getAdaptiveIcon พร้อม fallback สำหรับเวอร์ชันเก่า, getImagePickerProvider กับ when หลายสาขา, getDeviceApiInfo สำหรับการวิเคราะห์ กฎสำคัญคือไม่เรียก API ใหม่โดยไม่ตรวจสอบ SDK_INT มิฉะนั้นแอปจะล่มด้วย NoSuchMethodError บนอุปกรณ์เก่า

ANT (Android New API) และ lint

Android Studio มีตัววิเคราะห์แบบคงที่ lint ซึ่งเตือนเกี่ยวกับการใช้ API ที่สูงกว่า minSdkVersion หากเรียกเมธอดโดยไม่ตรวจสอบ SDK_INT lint จะไฮไลต์เป็นข้อผิดพลาด: "Call requires API level 34 (current min is 26)" วิธีแก้ไข: เพิ่ม @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) ในเมธอด หรือตรวจสอบ if ของ SDK_INT @TargetApi เป็นคำอธิบายประกอบที่เลิกใช้แล้ว แนะนำให้ใช้ @RequiresApi

ตารางความสอดคล้องของ API Level และเวอร์ชัน Android

ตาราง API Level เป็นเครื่องมืออ้างอิงสำหรับนักพัฒนา เมื่อทราบ API Level ของอุปกรณ์ คุณสามารถระบุเวอร์ชัน Android และฟีเจอร์ที่พร้อมใช้งานได้ ตารางแสดงรีลีส Android หลักทั้งหมดตั้งแต่ API Level 1 (2008) ถึง API Level 36 (2025) ชื่อรหัส (Cupcake, Donut, Tiramisu, VanillaIceCream) ใช้ภายใน Google และใน VERSION_CODES

API Levelเวอร์ชัน Androidชื่อรหัสปี
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

ตาราง: API Level เกณฑ์สำหรับการเปลี่ยนแปลงพฤติกรรม

ตารางต่อไปนี้แสดง API Level หลักที่นำการเปลี่ยนแปลงพฤติกรรมที่ทำลายความเข้ากันได้ย้อนหลังเมื่อเพิ่ม targetSdk:

API Levelการเปลี่ยนแปลงพฤติกรรมผลกระทบต่อแอป
29Scoped Storageไม่มีการเข้าถึงไฟล์โดยตรงไปยัง Pictures/Downloads/Music
30Package VisibilityqueryIntentActivities() เห็นเฉพาะแพ็กเกจที่มีปฏิสัมพันธ์
31Foreground Service Notificationการแจ้งเตือนบังคับภายใน 10 วินาที
33POST_NOTIFICATIONSสิทธิ์ในขณะทำงานสำหรับการแจ้งเตือน
34Foreground Service Typesการประกาศประเภทบริการเบื้องหน้าใน manifest
35Privacy Sandboxข้อจำกัดตัวระบุโฆษณา

คำถามที่พบบ่อย

API Level ใน Android คืออะไร?

API Level Android คือตัวระบุจำนวนเต็มของเวอร์ชัน Android API แต่ละรีลีสมีหมายเลขเฉพาะ: Android 13 = API 33, Android 14 = API 34, Android 15 = API 35, Android 16 = API 36 นักพัฒนาระบุ minSdkVersion, targetSdkVersion และ compileSdkVersion ใน build.gradle เพื่อจัดการความเข้ากันได้ API Level กำหนดคลาส เมธอด และการเปลี่ยนแปลงพฤติกรรมที่พร้อมใช้งาน

minSdk แตกต่างจาก targetSdk และ compileSdk อย่างไร?

minSdkVersion — เวอร์ชัน Android ขั้นต่ำสำหรับติดตั้งแอป targetSdkVersion — เวอร์ชันที่ใช้ทดสอบแอป รวมถึงการเปลี่ยนแปลงพฤติกรรม compileSdkVersion — เวอร์ชัน SDK สำหรับคอมไพล์โค้ด minSdk ต่ำที่สุด targetSdk ควรเป็นเวอร์ชันล่าสุด compileSdk ต้องอย่างน้อย targetSdk ทั้งสามระบุใน build.gradle

จะเกิดอะไรขึ้นถ้าตั้ง targetSdk ต่ำกว่าเวอร์ชัน Android บนอุปกรณ์?

หาก targetSdkVersion ต่ำกว่า API Level ของอุปกรณ์ Android จะปิดการเปลี่ยนแปลงพฤติกรรมที่นำมาหลัง targetSdk ตัวอย่างเช่น ด้วย targetSdk = 28 บน Android 14 (API 34) จะไม่ใช้ Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types Google Play กำหนดให้ targetSdkVersion ไม่เก่าเกิน 1 ปีจาก API Level ปัจจุบันเพื่อความปลอดภัยของผู้ใช้

จะทราบ API Level ของอุปกรณ์ได้อย่างไร?

API Level ของอุปกรณ์พร้อมใช้งานผ่านค่าคงที่ Build.VERSION.SDK_INT (เช่น 34 สำหรับ Android 14) สำหรับการเปรียบเทียบ ใช้ค่าคงที่ชื่อจาก Build.VERSION_CODES: if (SDK_INT >= VERSION_CODES.TIRAMISU) Build.VERSION.RELEASE ส่งคืนสตริงเวอร์ชัน ("14") ค่า SDK_INT ถูกแคชเมื่อโหลดคลาสและเข้าถึงได้จากเธรดใดก็ได้

ทำไม Google Play ถึงต้องการ targetSdk ใหม่ทุกปี?

Google Play เพิ่มข้อกำหนด targetSdkVersion ทุกปีเพื่อใช้การเปลี่ยนแปลงพฤติกรรมด้านความปลอดภัย แต่ละ API Level ใหม่นำ Scoped Storage, POST_NOTIFICATIONS, Privacy Sandbox และการป้องกันอื่นๆ แอปที่มี targetSdk ต่ำจะหลีกเลี่ยงการป้องกันเหล่านี้และสร้างความเสี่ยงต่อผู้ใช้ ข้อกำหนดนี้รับประกันว่าแอปทั้งหมดในร้านค้าผ่านการทดสอบภายใต้กฎปัจจุบัน

สรุป

  • API Level — ตัวระบุจำนวนเต็มของเวอร์ชัน Android API (1-36) ใช้สำหรับจัดการความเข้ากันได้ของแอป
  • minSdkVersion กำหนด API Level ขั้นต่ำสำหรับติดตั้ง targetSdkVersion — เวอร์ชันที่มีการเปลี่ยนแปลงพฤติกรรม compileSdkVersion — เวอร์ชันสำหรับคอมไพล์
  • การเปลี่ยนแปลงพฤติกรรม (Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types) จะใช้เฉพาะเมื่อ targetSdk >= API Level ที่เกี่ยวข้อง
  • Google Play กำหนดให้ targetSdk ไม่เก่าเกิน 1 ปี มิฉะนั้นจะบล็อกการเผยแพร่แอป
  • Build.VERSION.SDK_INT — การตรวจสอบ API Level ของอุปกรณ์ในขณะทำงานเพื่อเรียก API ใหม่อย่างปลอดภัยพร้อม fallback
  • lint ใน Android Studio เตือนเกี่ยวกับการใช้ API ที่สูงกว่า minSdk และแนะนำ @RequiresApi สำหรับเมธอด
  • การเปลี่ยนแปลงพฤติกรรม API 34+ รวมถึงประเภทบริการเบื้องหน้าที่จำเป็น API 35+ — Privacy Sandbox พร้อมข้อจำกัดตัวระบุโฆษณา

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม