ภาพรวมความเข้ากันได้ของอุปกรณ์

Android ออกแบบมาให้ทำงานบนอุปกรณ์ต่างๆ มากมาย เช่น โทรศัพท์ แท็บเล็ต และโทรทัศน์ อุปกรณ์ที่หลากหลายช่วยให้แอปของคุณมีกลุ่มเป้าหมายจำนวนมาก หากต้องการให้แอปประสบความสำเร็จในอุปกรณ์ทั้งหมด แอปต้องรองรับความหลากหลายของฟีเจอร์และมีอินเทอร์เฟซผู้ใช้ที่ยืดหยุ่นซึ่งปรับให้เข้ากับการกำหนดค่าหน้าจอที่แตกต่างกันได้

Android มีเฟรมเวิร์กแอปแบบไดนามิกที่ช่วยให้คุณระบุทรัพยากรแอปที่เจาะจงตามการกำหนดค่าในไฟล์แบบคงที่ได้ เช่น เลย์เอาต์ XML ที่แตกต่างกันสำหรับหน้าจอขนาดต่างๆ เพื่อช่วยให้แอปใช้งานร่วมกับอุปกรณ์ได้ จากนั้น Android จะโหลดทรัพยากรที่เหมาะสมตามการกำหนดค่าอุปกรณ์ปัจจุบัน หากคุณออกแบบแอปและทรัพยากรเพิ่มเติมของแอปอย่างรอบคอบ คุณจะเผยแพร่แพ็กเกจแอปพลิเคชัน (APK) เดียวที่เพิ่มประสิทธิภาพประสบการณ์ของผู้ใช้ในอุปกรณ์ต่างๆ ได้

อย่างไรก็ตาม คุณสามารถระบุข้อกำหนดด้านฟีเจอร์ของแอปและควบคุมประเภทอุปกรณ์ที่ติดตั้งแอปของคุณจาก Google Play Store ได้หากจำเป็น เอกสารนี้อธิบายวิธีควบคุมอุปกรณ์ที่มีสิทธิ์เข้าถึงแอปของคุณ และวิธีเตรียมแอปให้เข้าถึงกลุ่มเป้าหมายที่เหมาะสม

"ความเข้ากันได้" หมายถึงอะไร

สำหรับการพัฒนา Android ความเข้ากันได้มี 2 ประเภท ได้แก่ ความเข้ากันได้ของอุปกรณ์และความเข้ากันได้ของแอป

เนื่องจาก Android เป็นโครงการโอเพนซอร์ส ผู้ผลิตฮาร์ดแวร์ทุกรายจึงสามารถสร้างอุปกรณ์ที่ใช้ระบบปฏิบัติการ Android ได้ แต่อุปกรณ์จะ "เข้ากันได้กับ Android" ก็ต่อเมื่อสามารถเรียกใช้แอปที่เขียนขึ้นสำหรับสภาพแวดล้อมการดำเนินการของ Android ได้อย่างถูกต้อง รายละเอียดที่แน่นอนของสภาพแวดล้อมการดำเนินการของ Android กำหนดโดยโปรแกรมความเข้ากันได้กับอุปกรณ์ Android อุปกรณ์แต่ละเครื่องต้องผ่านชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) จึงจะถือว่าเข้ากันได้

ในฐานะนักพัฒนาแอป คุณไม่ต้องกังวลว่าอุปกรณ์จะเข้ากันได้กับ Android หรือไม่ เนื่องจากมีเพียงอุปกรณ์ที่เข้ากันได้กับ Android เท่านั้นที่มี Google Play Store ดังนั้น หากผู้ใช้ติดตั้งแอปของคุณจาก Google Play Store แสดงว่าผู้ใช้กำลังใช้อุปกรณ์ที่เข้ากันได้กับ Android

อย่างไรก็ตาม คุณต้องพิจารณาว่าแอปของคุณเข้ากันได้กับการกำหนดค่าอุปกรณ์ที่เป็นไปได้แต่ละรายการหรือไม่ เนื่องจาก Android ทำงานบนการกำหนดค่าอุปกรณ์ที่หลากหลาย ฟีเจอร์บางอย่างจึงไม่พร้อมใช้งานในอุปกรณ์บางรุ่น ตัวอย่างเช่น อุปกรณ์บางชนิดอาจไม่มีเซ็นเซอร์เข็มทิศ หากฟังก์ชันหลักของแอปต้องใช้เซ็นเซอร์เข็มทิศ แอปก็จะใช้งานได้กับอุปกรณ์ที่มีฟีเจอร์ดังกล่าวเท่านั้น

ควบคุมความพร้อมให้บริการของแอปในอุปกรณ์ต่างๆ

Android รองรับฟีเจอร์ที่หลากหลายซึ่งแอปของคุณสามารถใช้ประโยชน์ได้ผ่าน API ของแพลตฟอร์ม ฟีเจอร์บางอย่างจะอิงตามฮาร์ดแวร์ เช่น เซ็นเซอร์เข็มทิศ บางอย่างจะอิงตามซอฟต์แวร์ เช่น วิดเจ็ตแอป และบางอย่างจะขึ้นอยู่กับเวอร์ชันของแพลตฟอร์ม อุปกรณ์บางเครื่องอาจไม่รองรับบางฟีเจอร์ คุณจึงอาจต้องควบคุมความพร้อมให้บริการของแอปในอุปกรณ์ต่างๆ โดยอิงตามฟีเจอร์ที่แอปต้องใช้

หากต้องการให้แอปมีฐานผู้ใช้มากที่สุดเท่าที่จะเป็นไปได้ ให้รองรับการกำหนดค่าอุปกรณ์ให้มากที่สุดโดยใช้ APK หรือ AAB รายการเดียว ในสถานการณ์ส่วนใหญ่ คุณสามารถทำได้โดยปิดใช้ฟีเจอร์ที่ไม่บังคับขณะรันไทม์และจัดหาทรัพยากรของแอปที่มีทางเลือกสำหรับการกำหนดค่าต่างๆ เช่น เลย์เอาต์ที่แตกต่างกันสำหรับหน้าจอขนาดต่างๆ หากจำเป็น คุณสามารถจำกัดความพร้อมให้บริการของแอปในอุปกรณ์บางรุ่นผ่าน Google Play Store โดยอิงตามลักษณะของอุปกรณ์ต่อไปนี้

ฟีเจอร์ของอุปกรณ์

หากต้องการจัดการความพร้อมให้บริการของแอปตามฟีเจอร์ของอุปกรณ์ Android จะกำหนดรหัสฟีเจอร์สำหรับฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์ที่อาจไม่พร้อมใช้งานในอุปกรณ์บางรุ่น เช่น รหัสฟีเจอร์สำหรับเซ็นเซอร์เข็มทิศคือ FEATURE_SENSOR_COMPASS และรหัสฟีเจอร์สำหรับวิดเจ็ตแอปคือ FEATURE_APP_WIDGETS

หากจำเป็น คุณสามารถป้องกันไม่ให้ผู้ใช้ติดตั้งแอปเมื่ออุปกรณ์ไม่มีฟีเจอร์ที่จำเป็น โดยประกาศฟีเจอร์ดังกล่าวโดยใช้องค์ประกอบ <uses-feature> ในไฟล์ Manifest ของแอป

ตัวอย่างเช่น หากแอปของคุณไม่เหมาะกับอุปกรณ์ที่ไม่มีเซ็นเซอร์เข็มทิศ คุณสามารถประกาศว่าเซ็นเซอร์เข็มทิศเป็นข้อกำหนดได้โดยใช้แท็กไฟล์ Manifest ต่อไปนี้

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Google Play Store จะเปรียบเทียบฟีเจอร์ที่แอปของคุณต้องการกับฟีเจอร์ที่มีอยู่ในอุปกรณ์ของผู้ใช้แต่ละรายเพื่อพิจารณาว่าแอปของคุณเข้ากันได้กับอุปกรณ์แต่ละเครื่องหรือไม่ หากอุปกรณ์ไม่มีฟีเจอร์ทั้งหมดที่แอปต้องการ ผู้ใช้จะติดตั้งแอปไม่ได้

อย่างไรก็ตาม หากฟังก์ชันการทำงานหลักของแอปไม่จำเป็นต้องใช้ฟีเจอร์ของอุปกรณ์ ให้ตั้งค่าแอตทริบิวต์ required เป็น "false" และตรวจสอบฟีเจอร์ของอุปกรณ์ที่รันไทม์ หากฟีเจอร์ของแอปไม่พร้อมใช้งานในอุปกรณ์ปัจจุบัน ให้ลดระดับฟีเจอร์ของแอปที่เกี่ยวข้องอย่างค่อยเป็นค่อยไป ตัวอย่างเช่น คุณสามารถค้นหาว่าฟีเจอร์พร้อมใช้งานหรือไม่โดยเรียกใช้ hasSystemFeature() ดังนี้

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

ดูข้อมูลเกี่ยวกับตัวกรองทั้งหมดที่คุณใช้เพื่อควบคุมความพร้อมให้บริการของแอปผ่าน Google Play Store ได้ในเอกสารประกอบตัวกรองใน Google Play

เวอร์ชันของแพลตฟอร์ม

อุปกรณ์แต่ละเครื่องอาจใช้แพลตฟอร์ม Android เวอร์ชันที่แตกต่างกัน เช่น Android 12 หรือ Android 13 แพลตฟอร์มแต่ละเวอร์ชันที่ตามมามักจะเพิ่ม API ที่ไม่มีในเวอร์ชันก่อนหน้า แพลตฟอร์มแต่ละเวอร์ชันจะระบุระดับ API เพื่อระบุชุด API ที่พร้อมใช้งาน เช่น Android 12 คือ ระดับ API 31 และ Android 13 คือ ระดับ API 33

คุณต้องระบุค่า minSdkVersion และ targetSdkVersion ในไฟล์ build.gradle ดังนี้

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(36)
        ...
    }
}

ดึงดูด

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 36
        ...
    }
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ build.gradle ได้ที่กำหนดค่าบิลด์

Android แต่ละเวอร์ชันที่ต่อเนื่องกันจะรองรับการใช้งานแอปที่สร้างขึ้นโดยใช้ API จากแพลตฟอร์มเวอร์ชันก่อนหน้า ดังนั้นแอปของคุณจะเข้ากันได้กับ Android เวอร์ชันในอนาคตขณะที่ใช้ Android API ที่ระบุไว้

อย่างไรก็ตาม หากแอปใช้ API ที่เพิ่มเข้ามาในแพลตฟอร์มเวอร์ชันล่าสุด แต่ไม่จำเป็นต้องใช้ API ดังกล่าวสำหรับฟังก์ชันการทำงานหลัก ให้ตรวจสอบระดับ API ขณะรันไทม์และลดระดับฟีเจอร์ที่เกี่ยวข้องอย่างค่อยเป็นค่อยไปเมื่อระดับ API ต่ำเกินไป ในกรณีนี้ ให้ตั้งค่า minSdkVersion เป็นค่าต่ำสุดที่เป็นไปได้สำหรับฟังก์ชันการทำงานหลักของแอป จากนั้นเปรียบเทียบเวอร์ชันของระบบปัจจุบัน SDK_INT กับค่าคงที่ของชื่อเวอร์ชันใน Build.VERSION_CODES ที่สอดคล้องกับระดับ API ที่คุณต้องการตรวจสอบ ดังที่แสดงในตัวอย่างต่อไปนี้

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

การกำหนดค่าหน้าจอ

Android ทำงานบนอุปกรณ์ขนาดต่างๆ เช่น โทรศัพท์ แท็บเล็ต และทีวี ในการจัดหมวดหมู่อุปกรณ์ตามประเภทหน้าจอ Android จะกำหนดลักษณะ 2 อย่างสำหรับอุปกรณ์แต่ละเครื่อง ได้แก่ ขนาดหน้าจอ (ขนาดจริงของหน้าจอ) และความหนาแน่นของหน้าจอ (ความหนาแน่นจริงของพิกเซลบนหน้าจอ หรือที่เรียกว่า DPI) Android จะจัดรูปแบบต่างๆ เหล่านี้เป็นกลุ่มเพื่อให้กำหนดเป้าหมายได้ง่ายขึ้น เพื่อลดความซับซ้อนของการกำหนดค่าต่างๆ ดังนี้

  • ขนาดทั่วไป 4 ขนาด ได้แก่ เล็ก ปกติ ใหญ่ และใหญ่พิเศษ
  • ความหนาแน่นทั่วไปหลายแบบ: mdpi (ปานกลาง), hdpi (สูง), xhdpi (สูงมาก), xxhdpi (สูงมากพิเศษ) และอื่นๆ

โดยค่าเริ่มต้น แอปของคุณจะเข้ากันได้กับหน้าจอทุกขนาดและความหนาแน่น เนื่องจากระบบจะปรับเลย์เอาต์ของ UI และทรัพยากรรูปภาพตามความจำเป็นสำหรับหน้าจอแต่ละหน้าจอ จัดเตรียมรูปภาพบิตแมปที่เพิ่มประสิทธิภาพแล้วสำหรับความหนาแน่นของหน้าจอที่พบบ่อย

เพิ่มประสิทธิภาพประสบการณ์ของผู้ใช้โดยใช้เลย์เอาต์ที่ยืดหยุ่นให้มากที่สุด ในกรณีที่มีเลย์เอาต์สำหรับการเปลี่ยนแปลงการกำหนดค่าขนาดใหญ่ เช่น แนวตั้งและแนวนอน หรือขนาดหน้าต่างขนาดใหญ่เทียบกับขนาดเล็ก ให้พิจารณาจัดเตรียมเลย์เอาต์สำรองที่ยืดหยุ่นต่อการเปลี่ยนแปลงเล็กน้อยในการกำหนดค่า ซึ่งจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ในรูปแบบต่างๆ เช่น แท็บเล็ต โทรศัพท์ และอุปกรณ์แบบพับได้ นอกจากนี้ยังช่วยเมื่อหน้าต่างเปลี่ยนขนาดในโหมดหลายหน้าต่างด้วย

ดูข้อมูลเกี่ยวกับวิธีสร้างทรัพยากรทางเลือกสำหรับหน้าจอต่างๆ และวิธีจำกัดแอปให้แสดงในหน้าจอขนาดที่ต้องการเมื่อจำเป็นได้ที่ภาพรวมความเข้ากันได้ของหน้าจอ และดูหลักเกณฑ์ด้านคุณภาพของแอปสำหรับหน้าจอขนาดใหญ่

ควบคุมความพร้อมให้บริการของแอปด้วยเหตุผลทางธุรกิจ

นอกจากการจำกัดความพร้อมให้บริการของแอปตามลักษณะของอุปกรณ์แล้ว คุณอาจต้องจำกัดความพร้อมให้บริการของแอปด้วยเหตุผลทางธุรกิจหรือทางกฎหมาย สำหรับสถานการณ์ประเภทนี้ Google Play Store มีตัวเลือกการกรองใน Play Console ที่ช่วยให้คุณควบคุมความพร้อมให้บริการของแอปได้ด้วยเหตุผลที่ไม่ใช่ทางเทคนิค เช่น ภาษาของผู้ใช้หรือผู้ให้บริการเครือข่ายไร้สาย

การกรองความเข้ากันได้ทางเทคนิค เช่น องค์ประกอบฮาร์ดแวร์ที่จำเป็น จะอิงตามข้อมูลที่อยู่ในไฟล์ APK หรือ AAB เสมอ แต่การกรองด้วยเหตุผลที่ไม่ใช่ทางเทคนิค เช่น ภาษาตามภูมิศาสตร์ จะจัดการใน Google Play Console เสมอ

แหล่งข้อมูลเพิ่มเติม:

ภาพรวมแหล่งข้อมูลของแอป
ข้อมูลเกี่ยวกับวิธีจัดโครงสร้างแอป Android เพื่อแยกทรัพยากรแอปออกจากโค้ดแอป รวมถึงวิธีจัดหาทรัพยากรทางเลือกสำหรับการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจง
ตัวกรองใน Google Play
ข้อมูลเกี่ยวกับวิธีต่างๆ ที่ Google Play Store สามารถป้องกันไม่ให้แอปของคุณติดตั้งในอุปกรณ์ต่างๆ
สิทธิ์ใน Android
วิธีที่ Android จำกัดการเข้าถึง API บางรายการของแอปด้วยระบบสิทธิ์ที่กำหนดให้ผู้ใช้ต้องให้ความยินยอมเพื่อให้แอปของคุณใช้ API เหล่านั้นได้