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

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(33)
        ...
    }
}

Groovy

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 33
        ...
    }
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ 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 เหล่านั้นได้