API Level Android คือตัวระบุจำนวนเต็มที่สอดคล้องกับรีลีสเฉพาะของแพลตฟอร์ม Android แต่ละเวอร์ชันของระบบปฏิบัติการมีหมายเลขเฉพาะของตัวเอง: Android 14 = API 34, Android 15 = API 35 นักพัฒนาจัดการพารามิเตอร์สามตัวใน build.gradle — minSdkVersion, targetSdkVersion และ compileSdkVersion — เพื่อควบคุมความเข้ากันได้และการเข้าถึงฟีเจอร์ใหม่ ตาม Android Developers การเลือก API Level ที่เหมาะสมมีความสำคัญต่อความปลอดภัยและการครอบคลุมผู้ชม
ประเด็นสำคัญ
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 ของแอป
เมื่อติดตั้งแอป 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 |
ในไฟล์ build.gradle (Module: app) นักพัฒนาจะระบุพารามิเตอร์ API Level สามตัว: minSdkVersion, targetSdkVersion และ compileSdkVersion การสับสนระหว่างพารามิเตอร์เหล่านี้เป็นหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดของนักพัฒนา Android มือใหม่ แต่ละพารามิเตอร์รับผิดชอบด้านความเข้ากันได้ที่แตกต่างกัน และค่าของพารามิเตอร์ต้องสอดคล้องกัน
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 คือ API Level ที่ใช้ทดสอบแอป Android ใช้ targetSdk เพื่อใช้การเปลี่ยนแปลงพฤติกรรม: หากแอประบุ targetSdk 33 ระบบจะเปิดใช้งานการเปลี่ยนแปลงพฤติกรรมทั้งหมดที่นำมาใช้ใน API 33 หาก targetSdk คือ 31 ระบบจะไม่ใช้การเปลี่ยนแปลง API 32-33 โดยคงความเข้ากันได้กับพฤติกรรมเก่า นี่เป็นพารามิเตอร์ที่สำคัญที่สุดสำหรับความปลอดภัย: Google Play กำหนดให้ targetSdk ไม่เก่าเกิน 1 ปีจาก API Level ปัจจุบัน
compileSdkVersion คือเวอร์ชัน Android SDK ที่ใช้คอมไพล์โค้ด กำหนดว่า API ใดบ้างที่พร้อมใช้งานในเวลาคอมไพล์ compileSdk ต้อง >= targetSdk และควรเท่ากับ API Level เสถียรล่าสุด การเพิ่ม compileSdk ไม่ส่งผลต่อพฤติกรรมในขณะทำงาน — เฉพาะความพร้อมใช้งานของ API ใหม่สำหรับคอมไพเลอร์ หลังจากเพิ่ม compileSdk คุณต้องตรวจสอบโค้ดสำหรับ API ที่เลิกใช้และข้อกำหนดสิทธิ์ใหม่
// 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 และธีม
พารามิเตอร์ minSdk และ targetSdk ยังสามารถระบุได้ใน AndroidManifest.xml แต่โปรเจกต์สมัยใหม่ใช้ build.gradle — ค่าจาก Gradle จะแทนที่ manifest ใน manifest การระบุ
การเปลี่ยนแปลงพฤติกรรม คือการปรับเปลี่ยนวิธีการทำงานของระบบ 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
// การจัดการการเปลี่ยนแปลงพฤติกรรม 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 เป็นหนึ่งในการเปลี่ยนแปลงพฤติกรรมที่สำคัญที่สุด เริ่มตั้งแต่ API 29 (targetSdk 29+) แอปไม่สามารถเข้าถึงไฟล์โดยตรงไปยังไดเรกทอรี Pictures, Downloads, Music และ Documents แต่จะใช้ MediaStore สำหรับสื่อ, SAF (Storage Access Framework) สำหรับไฟล์ทั่วไป และ getExternalFilesDir() สำหรับพื้นที่เก็บข้อมูลของตัวเอง ข้อยกเว้นคือแอปที่มีสิทธิ์ MANAGE_EXTERNAL_STORAGE ซึ่งต้องได้รับการอนุมัติจาก Google Play
Google Play กำหนดข้อกำหนด targetSdkVersion ที่จำเป็นสำหรับการเผยแพร่แอป ตั้งแต่เดือนสิงหาคม 2024 Google Play กำหนด targetSdkVersion >= API 33 (Android 13) แต่ละปีเกณฑ์จะสูงขึ้น: แอปใหม่และการอัปเดตต้องระบุ targetSdk ไม่เก่าเกิน 1 ปีจาก API Level หลักปัจจุบัน การละเมิดข้อกำหนดจะนำไปสู่การบล็อกการเผยแพร่และการลบแอปออกจากร้านค้า
เหตุผลหลักคือ ความปลอดภัย แต่ละ 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 |
|---|---|---|
| สิงหาคม 2022 | 31 | Android 12 |
| สิงหาคม 2023 | 33 | Android 13 |
| สิงหาคม 2024 | 33 | Android 13 |
| สิงหาคม 2025 | 34 | Android 14 |
| สิงหาคม 2026 (แผน) | 35 | Android 15 |
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) เป็นรูปแบบมาตรฐาน
// ตัวอย่างการตรวจสอบ 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 บนอุปกรณ์เก่า
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 เป็นเครื่องมืออ้างอิงสำหรับนักพัฒนา เมื่อทราบ API Level ของอุปกรณ์ คุณสามารถระบุเวอร์ชัน Android และฟีเจอร์ที่พร้อมใช้งานได้ ตารางแสดงรีลีส Android หลักทั้งหมดตั้งแต่ API Level 1 (2008) ถึง API Level 36 (2025) ชื่อรหัส (Cupcake, Donut, Tiramisu, VanillaIceCream) ใช้ภายใน Google และใน VERSION_CODES
| API Level | เวอร์ชัน Android | ชื่อรหัส | ปี |
|---|---|---|---|
| 1 | 1.0 | — | 2008 |
| 3 | 1.5 | Cupcake | 2009 |
| 8 | 2.2 | Froyo | 2010 |
| 14 | 4.0 | Ice Cream Sandwich | 2011 |
| 19 | 4.4 | KitKat | 2013 |
| 21 | 5.0 | Lollipop | 2014 |
| 23 | 6.0 | Marshmallow | 2015 |
| 26 | 8.0 | Oreo | 2017 |
| 28 | 9 | Pie | 2018 |
| 29 | 10 | Quince Tart (10) | 2019 |
| 30 | 11 | Red Velvet Cake | 2020 |
| 31 | 12 | Snow Cone | 2021 |
| 33 | 13 | Tiramisu | 2022 |
| 34 | 14 | Upside Down Cake | 2023 |
| 35 | 15 | Vanilla Ice Cream | 2024 |
| 36 | 16 | Baklava | 2025 |
ตารางต่อไปนี้แสดง API Level หลักที่นำการเปลี่ยนแปลงพฤติกรรมที่ทำลายความเข้ากันได้ย้อนหลังเมื่อเพิ่ม targetSdk:
| API Level | การเปลี่ยนแปลงพฤติกรรม | ผลกระทบต่อแอป |
|---|---|---|
| 29 | Scoped Storage | ไม่มีการเข้าถึงไฟล์โดยตรงไปยัง Pictures/Downloads/Music |
| 30 | Package Visibility | queryIntentActivities() เห็นเฉพาะแพ็กเกจที่มีปฏิสัมพันธ์ |
| 31 | Foreground Service Notification | การแจ้งเตือนบังคับภายใน 10 วินาที |
| 33 | POST_NOTIFICATIONS | สิทธิ์ในขณะทำงานสำหรับการแจ้งเตือน |
| 34 | Foreground Service Types | การประกาศประเภทบริการเบื้องหน้าใน manifest |
| 35 | Privacy Sandbox | ข้อจำกัดตัวระบุโฆษณา |
คำถามที่พบบ่อย
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 กำหนดคลาส เมธอด และการเปลี่ยนแปลงพฤติกรรมที่พร้อมใช้งาน
minSdkVersion — เวอร์ชัน Android ขั้นต่ำสำหรับติดตั้งแอป targetSdkVersion — เวอร์ชันที่ใช้ทดสอบแอป รวมถึงการเปลี่ยนแปลงพฤติกรรม compileSdkVersion — เวอร์ชัน SDK สำหรับคอมไพล์โค้ด minSdk ต่ำที่สุด targetSdk ควรเป็นเวอร์ชันล่าสุด compileSdk ต้องอย่างน้อย targetSdk ทั้งสามระบุใน build.gradle
หาก 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 ของอุปกรณ์พร้อมใช้งานผ่านค่าคงที่ Build.VERSION.SDK_INT (เช่น 34 สำหรับ Android 14) สำหรับการเปรียบเทียบ ใช้ค่าคงที่ชื่อจาก Build.VERSION_CODES: if (SDK_INT >= VERSION_CODES.TIRAMISU) Build.VERSION.RELEASE ส่งคืนสตริงเวอร์ชัน ("14") ค่า SDK_INT ถูกแคชเมื่อโหลดคลาสและเข้าถึงได้จากเธรดใดก็ได้
Google Play เพิ่มข้อกำหนด targetSdkVersion ทุกปีเพื่อใช้การเปลี่ยนแปลงพฤติกรรมด้านความปลอดภัย แต่ละ API Level ใหม่นำ Scoped Storage, POST_NOTIFICATIONS, Privacy Sandbox และการป้องกันอื่นๆ แอปที่มี targetSdk ต่ำจะหลีกเลี่ยงการป้องกันเหล่านี้และสร้างความเสี่ยงต่อผู้ใช้ ข้อกำหนดนี้รับประกันว่าแอปทั้งหมดในร้านค้าผ่านการทดสอบภายใต้กฎปัจจุบัน
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ