minSdkVersion คือระดับ API ขั้นต่ำของ Android ที่สามารถติดตั้งและเรียกใช้แอปพลิเคชันได้ พารามิเตอร์นี้ระบุใน build.gradle ในบล็อก defaultConfig และกำหนดขอบเขตล่างของความเข้ากันได้: หากระดับ API ของอุปกรณ์ต่ำกว่าค่า minSdk ระบบจะบล็อกการติดตั้ง และ Google Play จะไม่แสดงแอปให้อุปกรณ์ดังกล่าว ตาม Android Developers การเลือก minSdk ที่ถูกต้องเป็นสิ่งสำคัญสำหรับการสร้างสมดุลระหว่างการเข้าถึงผู้ชมและการเข้าถึง API ที่ทันสมัย
ประเด็นสำคัญ
minSdkVersion เป็นพารามิเตอร์จำนวนเต็มใน build.gradle ที่ระบุระดับ API ขั้นต่ำของ Android สำหรับการติดตั้งแอป หากระดับ API ของอุปกรณ์ต่ำกว่าค่าที่ระบุ PackageManager จะบล็อกการติดตั้ง และ Google Play Store จะซ่อนแอปจากผลการค้นหาสำหรับอุปกรณ์นั้น minSdkVersion ถูกเขียนลงใน AndroidManifest.xml ในขณะสร้างผ่านแท็ก <uses-sdk android:minSdkVersion> และถูกตรวจสอบในการติดตั้งทุกครั้ง
ค่า minSdkVersion เป็นการแลกเปลี่ยนระหว่างการเข้าถึงผู้ชมและการเข้าถึง API ใหม่ ยิ่ง minSdk ต่ำเท่าไร อุปกรณ์ก็จะสามารถติดตั้งแอปได้มากขึ้นเท่านั้น โดยเฉพาะในภูมิภาคที่กำลังพัฒนาที่สมาร์ทโฟน Android รุ่นเก่าเป็นที่นิยม ยิ่ง minSdk สูงเท่าไร โค้ดความเข้ากันได้ย้อนหลังก็ยิ่งน้อยลงและ API ที่ทันสมัยก็จะพร้อมใช้งานมากขึ้นโดยไม่ต้องตรวจสอบขณะรันไทม์ Android Jetpack และไลบรารี AndroidX มี backport ของ API ใหม่หลายตัวสำหรับ Android เวอร์ชันเก่า ซึ่งช่วยให้เลือก minSdk ที่ต่ำกว่าได้โดยไม่สูญเสียฟังก์ชันการทำงาน
minSdkVersion ส่งผลต่อทุกขั้นตอนของการพัฒนา: การวิเคราะห์แบบคงที่ (lint ใช้ minSdk สำหรับการเตือน), ความเข้ากันได้ของ dependencies (ไลบรารีอาจต้องการ minSdk ของตนเอง), การทดสอบ (จำเป็นต้องทดสอบบนอุปกรณ์ที่มี minSdk) และ Google Play Console (การเข้าถึงผู้ชมคำนวณจาก minSdk) การเปลี่ยน minSdkVersion เป็นหนึ่งในการตัดสินใจที่สำคัญที่สุดในการตั้งค่าโปรเจกต์ เนื่องจากส่งผลต่อโค้ด การทดสอบ และฐานผู้ใช้
Build.gradle.kts (Kotlin DSL) เป็นมาตรฐานสมัยใหม่ในโปรเจกต์ Android พารามิเตอร์ minSdk ถูกตั้งค่าในบล็อก defaultConfig ที่ระดับโมดูล ค่าสามารถถูกแทนที่สำหรับ build types และ product flavors ที่แตกต่างกัน ซึ่งช่วยให้ทดสอบบน API ที่ต่ำกว่าได้โดยไม่เปลี่ยนค่าหลัก
// build.gradle.kts — การกำหนดค่า minSdk พื้นฐาน
android {
namespace = "com.example.myapp"
compileSdk = 36
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 26 // Android 8.0 Oreo
targetSdk = 36
versionCode = 1
versionName = "1.0.0"
}
// การแทนที่ minSdk สำหรับ flavor ที่แตกต่างกัน
flavorDimensions += "tier"
productFlavors {
create("free") {
minSdk = 26
}
create("premium") {
minSdk = 26
}
}
}ในตัวอย่าง minSdk = 26 สอดคล้องกับ Android 8.0 Oreo นี่เป็นค่าที่นิยมในปี 2026: มันตัดอุปกรณ์เพียง ~15% ตาม Distribution Dashboard ของ Android Studio compileSdk = 36 ให้การเข้าถึง API ทั้งหมดของ Android 16 และ targetSdk = 36 รวมการเปลี่ยนแปลงพฤติกรรมของเวอร์ชันล่าสุด สำหรับ debug builds สามารถลด minSdk สำหรับการทดสอบบนอีมูเลเตอร์รุ่นเก่า
การเลือก minSdkVersion เป็นการตัดสินใจเชิงกลยุทธ์โดยอิงจากการวิเคราะห์กลุ่มเป้าหมาย ข้อกำหนด API และระบบนิเวศของไลบรารี ไม่มีค่าเดียวที่ถูกต้องสำหรับทุกโปรเจกต์ ในปี 2026 Android Studio แนะนำ minSdk = 26 (Android 8.0) เป็นระดับพื้นฐานสำหรับโปรเจกต์ใหม่ แต่สำหรับแอปพลิเคชัน B2B หรือโซลูชันองค์กร ค่าที่ต่ำกว่าหรือสูงกว่าอาจยอมรับได้
ปัจจัยแรกคือ Distribution Dashboard Android Studio ให้สถิติอุปกรณ์ที่ใช้งานตามระดับ API โดยอิงจากข้อมูล Google Play ซึ่งอัปเดตรายเดือน minSdkVersion ควรครอบคลุมอย่างน้อย 90-95% ของอุปกรณ์ที่ใช้งานในตลาดเป้าหมาย สำหรับแอประหว่างประเทศที่มีผู้ชมในแอฟริกาและเอเชียตะวันออกเฉียงใต้ ควรลด minSdk ลงเหลือ 21 (Android 5.0) เนื่องจากสัดส่วนที่สูงของอุปกรณ์รุ่นเก่า
ปัจจัยที่สองคือ ข้อกำหนด dependencies แต่ละไลบรารีมี minSdkVersion ของตนเองที่ระบุใน manifest หากไลบรารีต้องการ minSdk 29 และแอปต้องการ minSdk 26 การสร้างจะล้มเหลวด้วยข้อผิดพลาด manifest merger ไลบรารี Google Play Services สมัยใหม่มี minSdk 21, Firebase มี minSdk 21, ไลบรารี Jetpack ส่วนใหญ่มี minSdk 21 หรือ 26 และ Compose BOM มี minSdk 21 สำหรับ Compose เกณฑ์ขั้นต่ำคือ API 21
ปัจจัยที่สามคือ API ที่จำเป็น หากฟังก์ชันหลักของแอปต้องการ API ที่พร้อมใช้งานจากระดับหนึ่งเท่านั้น (เช่น PhotoPicker — API 34, Predicted Navigation — API 35) สิ่งนี้อาจเป็นเหตุผลในการเพิ่ม minSdk อย่างไรก็ตาม มักใช้การรวมกันของ backport AndroidX (Activity Result API, NotificationCompat) และการตรวจสอบขณะรันไทม์เพื่อรักษา minSdk ให้ต่ำ
| minSdk | เวอร์ชัน Android | ความครอบคลุม (~2026) | คำแนะนำ |
|---|---|---|---|
| 21 | 5.0 Lollipop | 97% | ความครอบคลุมสูงสุด, โค้ดสำรองจำนวนมาก |
| 23 | 6.0 Marshmallow | 95% | สิทธิ์ขณะรันไทม์พร้อมใช้งานโดยตรง |
| 26 | 8.0 Oreo | 85% | ระดับพื้นฐานที่แนะนำ |
| 29 | 10 Q | 72% | Scoped Storage โดยตรง, การทดสอบน้อยลง |
| 31 | 12 Snow Cone | 55% | แอปเฉพาะทาง, API ที่ทันสมัย |
ขั้นตอนที่ 1: เปิด Android Studio, File → New Project และดู minSdk ที่แนะนำในตัวช่วยสร้าง ขั้นตอนที่ 2: ตรวจสอบ Distribution Dashboard ใน Android Studio (View → Tool Windows → App Inspection → Distribution Dashboard) ขั้นตอนที่ 3: วิเคราะห์ dependencies ของโปรเจกต์ — รัน build และแก้ไขข้อขัดแย้งของ manifest merger ขั้นตอนที่ 4: ประเมินว่า API ระดับ X ใดที่ใช้งานจริงโดยไม่มี backport ขั้นตอนที่ 5: ตั้งค่า minSdk เป็นค่าต่ำสุดที่ครอบคลุม 90%+ ของกลุ่มเป้าหมายและเข้ากันได้กับ dependencies ทั้งหมด
การกระจายอุปกรณ์ ตามระดับ API เป็นตัวชี้วัดแบบไดนามิกที่เปลี่ยนแปลงทุกไตรมาส ตาม Distribution Dashboard ของ Android Studio ณ เดือนมิถุนายน 2026 ประมาณ 85% ของอุปกรณ์ Android ที่ใช้งานทำงานบน API 26 (Android 8.0) ขึ้นไป, 72% บน API 29 (Android 10) ขึ้นไป และ 55% บน API 31 (Android 12) ขึ้นไป ตลาดจีนมีสถิติของตนเองเนื่องจากไม่มี Google Play Services ในอุปกรณ์ Huawei จำนวนมาก
อุปกรณ์ GMS (Google Mobile Services) อัปเดตเร็วกว่า: สัดส่วนของ API 31+ บนอุปกรณ์เหล่านี้ถึง 68% เนื่องจากข้อกำหนดบังคับของ Google Play สำหรับผู้ผลิต อุปกรณ์ที่ไม่ใช่ GMS (Huawei, Honor, แบรนด์จีนบางแห่ง) มีการกระจายที่เก่ากว่า: สัดส่วนของ API 31+ บนอุปกรณ์เหล่านี้ประมาณ 35% หากแอปของคุณกำหนดเป้าหมายตลาดต่างประเทศ ให้พึ่งพาสถิติทั่วโลก หากกำหนดเป้าหมายจีน ให้พิจารณากลุ่มที่ไม่ใช่ GMS
| ระดับ API | เวอร์ชัน Android | ความครอบคลุมทั่วโลก | ความครอบคลุมที่ไม่ใช่ GMS |
|---|---|---|---|
| 21-25 | 5.0-6.0 | ~2% | ~5% |
| 26-28 | 8.0-9.0 | ~13% | ~20% |
| 29-30 | 10-11 | ~15% | ~25% |
| 31-33 | 12-13 | ~20% | ~25% |
| 34-35 | 14-15 | ~30% | ~15% |
| 36 | 16 | ~20% | ~10% |
สรุป: สำหรับแอประหว่างประเทศ minSdk 26 ครอบคลุม 85% ของอุปกรณ์ด้วยต้นทุนความเข้ากันได้ย้อนหลังที่น้อยที่สุด สำหรับแอปที่มีผู้ชมในภูมิภาคกำลังพัฒนา minSdk 21 (ครอบคลุม 97%) นั้นสมเหตุสมผล แต่จะต้องใช้โค้ดมากขึ้นสำหรับการทำงานกับ API ดั้งเดิม สำหรับแอปองค์กรที่มีกลุ่มอุปกรณ์ที่ควบคุมได้ คุณสามารถตั้งค่า minSdk 31 และกำจัดโค้ดสำรองได้อย่างสมบูรณ์
ความเข้ากันได้ย้อนหลัง เป็นความท้าทายหลักกับ minSdkVersion ที่ต่ำ AndroidX (เดิมคือ Support Library) มี backport ของ API ที่ทันสมัยสำหรับ Android เวอร์ชันเก่า: AppCompatActivity สำหรับ Material Design, FragmentManager, Loader, NotificationCompat, PreferenceFragmentCompat และองค์ประกอบอื่นๆ อีกมากมาย การใช้ AndroidX เทียบเท่าแทน API ดั้งเดิมเป็นขั้นตอนแรกสู่ความเข้ากันได้
lint (ตัววิเคราะห์แบบคงที่ของ Android Studio) สแกนโค้ดเพื่อหาเรียก API ที่สูงกว่า minSdkVersion หากเมธอดมีคำอธิบายประกอบด้วย @RequiresApi ที่ระดับ API สูงกว่า minSdk และถูกเรียกโดยไม่มีการตรวจสอบ lint จะเน้นข้อผิดพลาด เพื่อระงับคำเตือน ให้ใช้คำอธิบายประกอบ @SuppressLint("NewApi") บนเมธอด หรือ @RequiresApi(Build.VERSION_CODES.TIRAMISU) บนฟังก์ชันทั้งหมด การตรวจสอบขณะรันไทม์ ผ่าน Build.VERSION.SDK_INT เป็นกลไกหลักในการเรียก API ใหม่อย่างปลอดภัยบนอุปกรณ์รุ่นเก่า
// ตัวอย่างความเข้ากันได้ย้อนหลัง: PhotoPicker (API 34+) และการสำรอง
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
class ImagePickerActivity : AppCompatActivity() {
// Activity Result API (AndroidX) — ทำงานบนทุกระดับ API
private val pickImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
uri?.let { displayImage(it) }
}
fun pickImage() {
// PhotoPicker พร้อมใช้งานจาก API 34 เท่านั้น
if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
// การใช้ PhotoPicker (API 34+)
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
} else {
// การสำรอง: GetContent (ทำงานบนทุกเวอร์ชัน)
pickImageLauncher.launch("image/*")
}
}
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
fun usePhotoPickerOnly() {
// ไม่สามารถเรียกเมธอดนี้บน API < 34
val intent = android.provider.MediaStore
.ACTION_PICK_IMAGES
startActivityForResult(intent, 100)
}
}คลาส ImagePickerActivity แสดงสามระดับของความเข้ากันได้ย้อนหลัง Activity Result API จาก AndroidX ทำงานบนทุกระดับ API ดังนั้นการเลือกรูปภาพพื้นฐานจึงไม่ขึ้นอยู่กับ minSdk PhotoPicker (ACTION_PICK_IMAGES) พร้อมใช้งานจาก API 34 เท่านั้นและถูกเรียกภายใต้การตรวจสอบ SDK_INT โดยมีการสำรองไปยัง GetContent เมธอด usePhotoPickerOnly ถูกทำเครื่องหมายด้วย @RequiresApi — lint จะไม่อนุญาตให้เรียกโดยไม่มีการตรวจสอบ AppCompat จาก AndroidX ปรับธีม เฟรกเมนต์ และแอนิเมชันให้เข้ากับเวอร์ชัน OS โดยอัตโนมัติ
ไลบรารี (AAR, JAR) ก็มี minSdkVersion ที่ระบุใน manifest ของตน เมื่อเชื่อมต่อไลบรารี Gradle ตรวจสอบความเข้ากันได้: หาก minSdk ของไลบรารีสูงกว่า minSdk ของแอป การสร้างจะล้มเหลวด้วยข้อผิดพลาด สำหรับไลบรารีสาธารณะ แนะนำให้ระบุ minSdk ที่ต่ำที่สุดเท่าที่เป็นไปได้ (21 ในกรณีส่วนใหญ่) เพื่อไม่จำกัดผู้บริโภค หากไลบรารีต้องการ API 29+ จะสูญเสียผู้ใช้ที่มีศักยภาพ ~28%
โปรเจกต์หลายโมดูล สามารถมีค่า minSdkVersion ที่แตกต่างกันสำหรับโมดูลต่างๆ ตัวอย่างเช่น โมดูล :core:network อาจมี minSdk 26 ในขณะที่โมดูล :feature:camera อาจมี minSdk 29 (เนื่องจาก CameraX ที่มีข้อกำหนดเฉพาะ) Google Play ต้องการให้ minSdk ของโมดูลหลัก :app ต่ำกว่าหรือเท่ากับ minSdk ของโมดูลที่ขึ้นต่อกันทั้งหมด ในทางปฏิบัติ โมดูลทั้งหมดของแอปเดียวกันมักจะมี minSdk เดียวกันเพื่อการบำรุงรักษาที่ง่าย
// build.gradle.kts — โมดูลไลบรารีที่มี minSdk ต่ำ
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.mylibrary"
compileSdk = 36
defaultConfig {
minSdk = 21 // ขั้นต่ำสำหรับความครอบคลุมสูงสุด
targetSdk = 36
}
}
dependencies {
// AndroidX Core — minSdk 21, เพิ่ม backport
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.0")
}โมดูลไลบรารีที่มี minSdk = 21 เข้ากันได้กับ 97% ของอุปกรณ์และไม่จำกัดผู้บริโภค หากไลบรารีใช้ API ที่สูงกว่า 21 ผู้พัฒนาจะต้องเพิ่มการตรวจสอบขณะรันไทม์หรือระบุ @RequiresApi บนเมธอดที่เกี่ยวข้อง AndroidX Core KTX (minSdk 21) มี backport สำหรับ Context, Bundle, Locale และคลาสระบบอื่นๆ ซึ่งช่วยให้ไลบรารีรักษา minSdk ที่ต่ำได้
ข้อผิดพลาดในการเลือก minSdk อาจทำให้เสียการติดตั้งหลายพันครั้งหรือสัปดาห์ของการพัฒนาเพิ่มเติม ข้อผิดพลาดทั่วไปแรกคือการคัดลอก minSdk จากเทมเพลตโปรเจกต์โดยไม่วิเคราะห์ Distribution Dashboard นักพัฒนาจำนวนมากปล่อย minSdk = 21 จากเทมเพลต Android Studio ทั้งที่ minSdk 26 ก็เพียงพอสำหรับผู้ชมของพวกเขาและจะลดจำนวนการตรวจสอบ SDK_INT ในโค้ด
ข้อผิดพลาดที่สองคือ minSdk สูงเกินไป โดยไม่พิจารณาตลาด หากคุณตั้งค่า minSdk = 31 (Android 12) สำหรับแอประหว่างประเทศ คุณจะสูญเสีย ~45% ของอุปกรณ์ สำหรับสตาร์ทอัพหรือแปปที่มีผู้ชมจำนวนมาก นี่เป็นหายนะ ตรวจสอบ Distribution Dashboard ก่อนเพิ่ม minSdk เสมอ และใช้การทดสอบ A/B ใน Google Play Console หากไม่แน่ใจ
ข้อผิดพลาดที่สามคือ การละเลย minSdk ของ dependencies เมื่อเพิ่มไลบรารีใหม่ ตรวจสอบ minSdk ของมันในเอกสารหรือไฟล์ POM Firebase ML Kit ต้องการ minSdk 21, ไลบรารีกล้องที่กำหนดเองบางตัวต้องการ minSdk 29 หาก manifest merger ล้มเหลวในโปรดักชันเนื่องจากไลบรารีใหม่ การแก้ไขอาจใช้เวลาหลายวัน
// ตัวอย่าง: การตรวจสอบความเข้ากันได้ของ API ขณะรันไทม์
fun checkFeatureAvailability(): Boolean {
// ข้อผิดพลาดทั่วไป — การเรียก API โดยไม่ตรวจสอบ SDK_INT
return when {
VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE -> {
// API 34+ — ใช้ PhotoPicker
true
}
VERSION.SDK_INT >= VERSION_CODES.Q -> {
// API 29-33 — ใช้ MediaStore
true
}
else -> {
// API < 29 — ใช้ ACTION_GET_CONTENT
true
}
}
}สถาปัตยกรรมที่ถูกต้องสำหรับการตรวจสอบ ระดับ API คือนิพจน์ when ที่มีช่วงครอบคลุมค่าที่เป็นไปได้ทั้งหมดตั้งแต่ minSdk ถึง compileSdk กฎสำคัญ: การเรียก API ระดับ X ใดๆ ต้องได้รับการป้องกันด้วยการตรวจสอบ VERSION.SDK_INT สำหรับอุปกรณ์ทั้งหมดที่มีระดับ API ตั้งแต่ minSdk ถึง X lint ช่วยตรวจจับการเรียกที่ไม่ได้รับการตรวจสอบ แต่ไม่สามารถรับประกันความครอบคลุมทั้งหมดสำหรับโค้ดแบบไดนามิก
คำถามที่พบบ่อย
minSdkVersion คือระดับ API ขั้นต่ำของ Android ที่สามารถติดตั้งแอปได้ ระบุใน build.gradle ในบล็อก defaultConfig หากระดับ API ของอุปกรณ์ต่ำกว่า minSdk ระบบจะบล็อกการติดตั้งและ Google Play จะไม่แสดงแอปให้อุปกรณ์ดังกล่าว minSdk ส่งผลต่อการเข้าถึงผู้ชม: minSdk = 26 ครอบคลุม ~85% ของอุปกรณ์, minSdk = 21 ครอบคลุม ~97%
minSdkVersion ถูกเลือกโดยอิงจากสถิติ Distribution Dashboard ใน Android Studio และกลุ่มเป้าหมาย สำหรับแอปจำนวนมาก แนะนำให้ใช้ minSdk 26 (Android 8.0) — ครอบคลุม ~85% ของอุปกรณ์ สำหรับแอป B2B คุณสามารถตั้งค่า minSdk 31 (Android 12) สิ่งสำคัญคือต้องตรวจสอบว่าไลบรารีทั้งหมดที่ใช้รองรับ minSdk ที่เลือก สำหรับแอป Compose เกณฑ์ขั้นต่ำคือ API 21
API ใหม่สามารถใช้กับ minSdkVersion ที่ต่ำผ่าน AndroidX ที่มี backport (AppCompat, Core KTX, Activity Result API) หรือผ่านการตรวจสอบขณะรันไทม์ Build.VERSION.SDK_INT ด้วยโค้ดสำรอง คำอธิบายประกอบ @RequiresApi บอก lint ว่าเมธอดต้องการระดับ API ที่เฉพาะเจาะจง AndroidX Material Components ยังมีความเข้ากันได้ย้อนหลังสำหรับส่วนประกอบ UI หากไม่มีการตรวจสอบ แอปจะหยุดทำงานด้วย NoSuchMethodError
หาก ไลบรารี มี minSdkVersion สูงกว่าแอป Android Studio จะแสดงข้อผิดพลาดในการสร้าง: Manifest merger failed วิธีแก้ไขคือเพิ่ม minSdk ของแอปให้เท่ากับระดับของไลบรารี หาตัวเลือกอื่นที่มี minSdk ต่ำกว่า หรือใช้ตัวครอบ ไลบรารี Jetpack ส่วนใหญ่มี minSdk 21 หรือ 26 Firebase ML Kit ต้องการ minSdk 21, CameraX ต้องการ minSdk 21
การเพิ่ม minSdkVersion หลังจากเผยแพร่เป็นไปได้ แต่อาจทำให้สูญเสียผู้ใช้บนอุปกรณ์รุ่นเก่า แนะนำให้เพิ่ม minSdk ไม่เกิน 1-2 ระดับ API ต่อครั้ง โดยวิเคราะห์สถิติอุปกรณ์ที่ใช้งานใน Google Play Console การลด minSdkVersion เป็นไปได้ในทางเทคนิค แต่ต้องตรวจสอบโค้ดสำหรับการเรียก API ที่สูงกว่า minSdk ใหม่ และอาจต้องเขียนโค้ดบางส่วนใหม่
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม