<uses-feature>

Google Play ใช้<uses-feature> องค์ประกอบที่ประกาศในไฟล์ Manifest ของแอปเพื่อกรองแอปของคุณออกจากอุปกรณ์ที่มีคุณสมบัติไม่ตรงตามข้อกำหนดของฮาร์ดแวร์และซอฟต์แวร์

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

ดูข้อมูลสำคัญเกี่ยวกับวิธีที่ Google Play ใช้ฟีเจอร์เป็นพื้นฐานในการกรองได้ที่ส่วน Google Play และการกรองตามฟีเจอร์

ไวยากรณ์:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
อยู่ใน
<manifest>
description:

ประกาศฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์รายการเดียวที่แอปพลิเคชันใช้

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

เนื่องจากการรองรับฟีเจอร์อาจแตกต่างกันไปตามอุปกรณ์ Android องค์ประกอบ <uses-feature> จึงมีบทบาทสําคัญในการช่วยให้แอปพลิเคชันอธิบายฟีเจอร์ที่เปลี่ยนแปลงตามอุปกรณ์ซึ่งแอปพลิเคชันใช้

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

คุณต้องระบุฟีเจอร์แต่ละรายการในองค์ประกอบ <uses-feature> แยกกัน ดังนั้นหากแอปพลิเคชันต้องใช้หลายฟีเจอร์ ระบบจะประกาศองค์ประกอบ <uses-feature> หลายรายการ ตัวอย่างเช่น แอปพลิเคชันที่ต้องมีทั้งฟีเจอร์บลูทูธและกล้องในอุปกรณ์จะประกาศองค์ประกอบ 2 รายการต่อไปนี้

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

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

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

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

สำหรับฟีเจอร์บางอย่างอาจมีแอตทริบิวต์ที่เฉพาะเจาะจงซึ่งให้คุณกำหนดเวอร์ชันของฟีเจอร์ เช่น เวอร์ชันของ Open GL ที่ใช้ (ประกาศด้วย glEsVersion) ฟีเจอร์อื่นๆ ที่มีหรือไม่มีในอุปกรณ์ เช่น กล้อง จะประกาศโดยใช้แอตทริบิวต์ name

แม้ว่าระบบจะเปิดใช้งานองค์ประกอบ <uses-feature> เฉพาะสำหรับอุปกรณ์ที่ใช้ API ระดับ 4 ขึ้นไป แต่ให้ใส่องค์ประกอบเหล่านี้สำหรับแอปพลิเคชันทั้งหมด แม้ว่า minSdkVersion จะเท่ากับ 3 หรือต่ำกว่าก็ตาม อุปกรณ์ที่ใช้แพลตฟอร์มเวอร์ชันเก่าจะไม่สนใจองค์ประกอบนี้

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

แอตทริบิวต์
android:name
ระบุฟีเจอร์ฮาร์ดแวร์หรือซอฟต์แวร์เดียวที่แอปพลิเคชันใช้เป็นสตริงตัวบ่งชี้ ค่าแอตทริบิวต์ที่ถูกต้องจะแสดงอยู่ในส่วนฟีเจอร์ฮาร์ดแวร์และฟีเจอร์ซอฟต์แวร์ ค่าแอตทริบิวต์เหล่านี้จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
android:required
ค่าบูลีนที่ระบุว่าแอปพลิเคชันต้องใช้ฟีเจอร์ที่ระบุใน android:name หรือไม่
  • การประกาศ android:required="true" สำหรับฟีเจอร์หนึ่งๆ บ่งบอกว่าแอปพลิเคชันไม่สามารถทำงานหรือไม่ได้ออกแบบมาให้ทำงานเมื่อไม่มีฟีเจอร์ที่ระบุในอุปกรณ์
  • การประกาศ android:required="false" สำหรับฟีเจอร์หนึ่งๆ บ่งบอกว่าแอปพลิเคชันใช้ฟีเจอร์นั้นหากมีในอุปกรณ์ แต่ออกแบบมาให้ทำงานได้โดยไม่ต้องใช้ฟีเจอร์ที่ระบุ หากจำเป็น

ค่าเริ่มต้นของ android:required คือ "true"

android:glEsVersion
เวอร์ชัน OpenGL ES ที่แอปพลิเคชันต้องใช้ โดย 16 บิตที่สูงกว่าจะแสดงค่าหลัก และ 16 บิตที่ต่ำกว่าจะแสดงค่าย่อย เช่น หากต้องการระบุ OpenGL ES เวอร์ชัน 2.0 ให้ตั้งค่าเป็น "0x00020000" หรือหากต้องการระบุ OpenGL ES 3.2 ให้ตั้งค่าเป็น "0x00030002"

แอปพลิเคชันระบุแอตทริบิวต์ android:glEsVersion ไม่เกิน 1 รายการในไฟล์ Manifest หากระบุมากกว่า 1 รายการ ระบบจะใช้ android:glEsVersion ที่มีค่าตัวเลขสูงสุดและละเว้นค่าอื่นๆ

หากแอปพลิเคชันไม่ได้ระบุandroid:glEsVersion แอตทริบิวต์ ระบบจะถือว่าแอปพลิเคชันต้องใช้เฉพาะ OpenGL ES 1.0 ซึ่งอุปกรณ์ Android ทุกรุ่นรองรับ

แอปพลิเคชันจะถือว่าหากแพลตฟอร์มรองรับ OpenGL ES เวอร์ชันหนึ่งๆ ก็จะรองรับ OpenGL ES เวอร์ชันที่ต่ำกว่าทั้งหมดด้วย ดังนั้น สำหรับแอปพลิเคชันที่ต้องมีทั้ง OpenGL ES 1.0 และ OpenGL ES 2.0 ให้ระบุว่าต้องใช้ OpenGL ES 2.0

สําหรับแอปพลิเคชันที่ทํางานร่วมกับ OpenGL ES หลายเวอร์ชัน ให้ระบุเฉพาะ OpenGL ES เวอร์ชันต่ำสุดที่จําเป็น เครื่องมือนี้จะตรวจสอบที่รันไทม์ว่า OpenGL ES ระดับที่สูงขึ้นพร้อมใช้งานหรือไม่

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ OpenGL ES รวมถึงวิธีตรวจสอบเวอร์ชัน OpenGL ES ที่รองรับขณะรันไทม์ได้ที่คู่มือ API ของ OpenGL ES

เปิดตัวใน
API ระดับ 4
ดูข้อมูลเพิ่มเติมได้ที่

Google Play และการกรองตามฟีเจอร์

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

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

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

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

เมื่อผู้ใช้เปิด Google Play แอปพลิเคชันจะค้นหารายการฟีเจอร์ที่มีในอุปกรณ์จากเครื่องมือจัดการแพ็กเกจโดยเรียกใช้ getSystemAvailableFeatures() จากนั้นแอปพลิเคชัน Store จะส่งรายการฟีเจอร์ไปยัง Google Play เมื่อสร้างเซสชันให้กับผู้ใช้

ทุกครั้งที่คุณอัปโหลดแอปพลิเคชันไปยัง Google Play Console ทาง Google Play จะสแกนไฟล์ Manifest ของแอปพลิเคชัน โดยจะค้นหาองค์ประกอบ <uses-feature> และประเมินร่วมกับองค์ประกอบอื่นๆ ในบางกรณี เช่น องค์ประกอบ <uses-sdk> และ <uses-permission> หลังจากสร้างชุดฟีเจอร์ที่จําเป็นสําหรับแอปพลิเคชันแล้ว ระบบจะจัดเก็บรายการดังกล่าวภายในเป็นข้อมูลเมตาที่เชื่อมโยงกับ APK ของแอปพลิเคชันและเวอร์ชันของแอปพลิเคชัน

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

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

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

การกรองตามฟีเจอร์ที่ประกาศไว้อย่างชัดเจน

ฟีเจอร์ที่ประกาศอย่างชัดเจนคือฟีเจอร์ที่แอปพลิเคชันประกาศไว้ในองค์ประกอบ <uses-feature> การประกาศฟีเจอร์อาจมีแอตทริบิวต์ android:required=["true" | "false"] หากคุณคอมไพล์กับ API ระดับ 5 ขึ้นไป

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

Google Play จะจัดการฟีเจอร์ที่ประกาศอย่างชัดแจ้งด้วยวิธีต่อไปนี้

  • หากมีการประกาศอย่างชัดเจนว่าฟีเจอร์หนึ่งๆ เป็นฟีเจอร์ที่จำเป็น ดังที่แสดงในตัวอย่างต่อไปนี้ Google Play จะเพิ่มฟีเจอร์นั้นลงในรายการฟีเจอร์ที่จำเป็นสำหรับแอปพลิเคชัน จากนั้นจะกรองแอปพลิเคชันไม่ให้แสดงต่อผู้ใช้ในอุปกรณ์ที่ไม่มีฟีเจอร์ดังกล่าว
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
  • หากมีการประกาศอย่างชัดเจนว่าฟีเจอร์ไม่จำเป็น ดังที่แสดงในตัวอย่างต่อไปนี้ Google Play จะไม่เพิ่มฟีเจอร์นั้นลงในรายการฟีเจอร์ที่จำเป็น ด้วยเหตุนี้ ระบบจะไม่พิจารณาฟีเจอร์ที่ไม่จำเป็นซึ่งประกาศไว้อย่างชัดเจนเมื่อกรองแอปพลิเคชัน แม้ว่าอุปกรณ์จะไม่มีฟีเจอร์ที่ประกาศไว้ Google Play จะยังคงถือว่าแอปพลิเคชันเข้ากันได้กับอุปกรณ์และแสดงแอปพลิเคชันต่อผู้ใช้ เว้นแต่จะมีการใช้กฎการกรองอื่นๆ
    <uses-feature android:name="android.hardware.camera" android:required="false" />
  • หากมีการประกาศฟีเจอร์อย่างชัดแจ้งแต่ไม่มีแอตทริบิวต์ android:required แสดงว่า Google Play จะถือว่าฟีเจอร์นั้นจำเป็นต้องมีและตั้งค่าการกรอง

โดยทั่วไป หากแอปพลิเคชันออกแบบมาเพื่อทำงานบน Android 1.6 และต่ำกว่า แอตทริบิวต์ android:required จะไม่พร้อมใช้งานใน API และ Google Play จะถือว่าต้องมีการประกาศ <uses-feature> ทั้งหมด

หมายเหตุ: การประกาศฟีเจอร์อย่างชัดเจนและใส่แอตทริบิวต์ android:required="false" จะช่วยให้คุณปิดใช้การกรองทั้งหมดใน Google Play สำหรับฟีเจอร์ที่ระบุได้อย่างมีประสิทธิภาพ

กรองตามฟีเจอร์โดยนัย

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

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

แอปพลิเคชันอาจต้องใช้ฟีเจอร์หนึ่งๆ แต่ไม่ได้ประกาศฟีเจอร์นั้นด้วยเหตุผลต่อไปนี้

  • แอปพลิเคชันได้รับการคอมไพล์กับไลบรารี Android เวอร์ชันเก่า (Android 1.5 หรือเก่ากว่า) ซึ่งไม่มีองค์ประกอบ <uses-feature>
  • นักพัฒนาแอปเข้าใจผิดว่าฟีเจอร์นี้มีอยู่ในอุปกรณ์ทุกเครื่องและไม่จำเป็นต้องประกาศ
  • นักพัฒนาแอปไม่ได้ประกาศฟีเจอร์โดยไม่ตั้งใจ
  • นักพัฒนาแอปประกาศฟีเจอร์อย่างชัดเจน แต่ประกาศไม่ถูกต้อง เช่น ข้อผิดพลาดในการสะกดคำในชื่อองค์ประกอบ <uses-feature> หรือค่าสตริงที่ไม่รู้จักสำหรับแอตทริบิวต์ android:name จะทําให้ประกาศฟีเจอร์เป็นโมฆะ

Google Play จะพยายามค้นหาข้อกำหนดฟีเจอร์โดยนัยของแอปพลิเคชันโดยตรวจสอบองค์ประกอบอื่นๆ ที่ประกาศไว้ในไฟล์ Manifest โดยเฉพาะองค์ประกอบ <uses-permission>

หากแอปพลิเคชันขอสิทธิ์ที่เกี่ยวข้องกับฮาร์ดแวร์ Google Play จะถือว่าแอปพลิเคชันใช้ฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้อง จึงต้องใช้ฟีเจอร์เหล่านั้น แม้ว่าจะไม่มีประกาศ <uses-feature> ที่เกี่ยวข้องก็ตาม สําหรับสิทธิ์ดังกล่าว Google Play จะเพิ่มฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้องลงในข้อมูลเมตาที่เก็บไว้สําหรับแอปพลิเคชันและตั้งค่าตัวกรองสําหรับฟีเจอร์เหล่านั้น

เช่น หากแอปพลิเคชันขอสิทธิ์ CAMERA Google Play จะถือว่าแอปพลิเคชันต้องใช้กล้องหลัง (หันออกสู่ภายนอก) แม้ว่าแอปจะไม่ได้ประกาศองค์ประกอบ <uses-feature> สำหรับ android.hardware.camera ก็ตาม ด้วยเหตุนี้ Google Play จึงกรองอุปกรณ์ที่ไม่มีกล้องหลังออก

หากไม่ต้องการให้ Google Play กรองตามฟีเจอร์ที่สื่อเป็นนัยที่เฉพาะเจาะจง ให้ประกาศฟีเจอร์นั้นอย่างชัดเจนในองค์ประกอบ <uses-feature> และใส่แอตทริบิวต์ android:required="false" ตัวอย่างเช่น หากต้องการปิดใช้การกรองที่เกิดจากสิทธิ์ CAMERA ให้ประกาศฟีเจอร์ต่อไปนี้

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

ข้อควรระวัง: สิทธิ์ที่คุณขอในองค์ประกอบ <uses-permission> อาจส่งผลต่อวิธีที่ Google Play กรองแอปพลิเคชันของคุณโดยตรง ส่วนสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์จะแสดงชุดสิทธิ์ทั้งหมดที่บ่งบอกถึงข้อกำหนดของฟีเจอร์และทริกเกอร์การกรอง

การจัดการพิเศษสำหรับฟีเจอร์บลูทูธ

Google Play ใช้กฎที่แตกต่างจากที่อธิบายไว้ในตัวอย่างก่อนหน้านี้เล็กน้อยเมื่อพิจารณาการกรองสำหรับบลูทูธ

หากแอปพลิเคชันประกาศสิทธิ์บลูทูธในองค์ประกอบ <uses-permission> แต่ไม่ได้ประกาศฟีเจอร์บลูทูธอย่างชัดเจนในองค์ประกอบ <uses-feature> ทาง Google Play จะตรวจสอบเวอร์ชันของแพลตฟอร์ม Android ที่แอปพลิเคชันออกแบบมาให้ทำงานตามที่ระบุไว้ในองค์ประกอบ <uses-sdk>

ดังที่แสดงในตารางต่อไปนี้ Google Play จะเปิดใช้การกรองสำหรับฟีเจอร์บลูทูธก็ต่อเมื่อแอปพลิเคชันประกาศแพลตฟอร์มที่ต่ำที่สุดหรือเป้าหมายเป็น Android 2.0 (API ระดับ 5) ขึ้นไปเท่านั้น อย่างไรก็ตาม โปรดทราบว่า Google Play จะใช้กฎปกติสำหรับการกรองเมื่อแอปพลิเคชันประกาศฟีเจอร์บลูทูธอย่างชัดเจนในองค์ประกอบ <uses-feature>

ตารางที่ 1 วิธีที่ Google Play กำหนดข้อกำหนดฟีเจอร์บลูทูธสำหรับแอปพลิเคชันที่ขอสิทธิ์บลูทูธแต่ไม่ประกาศฟีเจอร์บลูทูธในองค์ประกอบ <uses-feature>

If minSdkVersion is ... และ targetSdkVersion คือ ผลลัพธ์
<=4 หรือไม่ได้ประกาศ <uses-sdk> <=4 Google Play ไม่ได้กรองแอปพลิเคชันออกจากอุปกรณ์ใดๆ โดยอิงตามการรองรับฟีเจอร์ android.hardware.bluetooth ที่รายงานไว้
<=4 >=5 Google Play จะกรองแอปพลิเคชันออกจากอุปกรณ์ที่ไม่รองรับฟีเจอร์ android.hardware.bluetooth (รวมถึงรุ่นเก่าๆ)
>=5 >=5

ตัวอย่างต่อไปนี้แสดงผลลัพธ์การกรองที่แตกต่างกันตามวิธีที่ Google Play จัดการฟีเจอร์บลูทูธ

ในตัวอย่างนี้ แอปพลิเคชันที่ออกแบบมาให้ทำงานกับ API เวอร์ชันเก่าจะประกาศสิทธิ์บลูทูธ แต่ไม่ประกาศฟีเจอร์บลูทูธในองค์ประกอบ <uses-feature>
ผลลัพธ์: Google Play ไม่ได้กรองแอปพลิเคชันจากอุปกรณ์ใดเลย
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
ในตัวอย่างนี้ที่ 2 แอปพลิเคชันเดียวกันยังประกาศระดับ API เป้าหมายเป็น "5" ด้วย
ผลลัพธ์: ตอนนี้ Google Play จะถือว่าจำเป็นต้องใช้ฟีเจอร์นี้และกรองแอปพลิเคชันออกจากอุปกรณ์ทั้งหมดที่ไม่ได้รายงานการรองรับบลูทูธ รวมถึงอุปกรณ์ที่ใช้แพลตฟอร์มเวอร์ชันเก่า
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
ตอนนี้แอปพลิเคชันเดียวกันนี้ประกาศฟีเจอร์บลูทูธโดยเฉพาะ
ผลลัพธ์: เหมือนกับตัวอย่างก่อนหน้าคือมีการใช้การกรอง
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
สุดท้าย ในกรณีต่อไปนี้ แอปพลิเคชันเดียวกันจะเพิ่มแอตทริบิวต์ android:required="false"
ผลลัพธ์: Google Play ปิดใช้การกรองตามการรองรับฟีเจอร์บลูทูธสำหรับอุปกรณ์ทั้งหมด
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

ทดสอบฟีเจอร์ที่แอปพลิเคชันต้องการ

คุณสามารถใช้เครื่องมือ aapt2 ซึ่งมีอยู่ใน Android SDK เพื่อดูว่า Google Play จะกรองแอปพลิเคชันของคุณอย่างไรตามฟีเจอร์และสิทธิ์ที่ประกาศ โดยเรียกใช้ aapt2 กับคำสั่ง dump badging ซึ่งจะทำให้ aapt2 แยกวิเคราะห์ไฟล์ Manifest ของแอปพลิเคชันและใช้กฎเดียวกันกับที่ Google Play ใช้เพื่อระบุฟีเจอร์ที่แอปพลิเคชันต้องการ

หากต้องการใช้เครื่องมือนี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างและส่งออกแอปพลิเคชันเป็น APK ที่ไม่ได้ลงนาม หากคุณพัฒนาแอปใน Android Studio ให้สร้างแอปพลิเคชันด้วย Gradle ดังนี้
    1. เปิดโปรเจ็กต์แล้วเลือกเรียกใช้ > แก้ไขการกําหนดค่า
    2. เลือกเครื่องหมายบวกใกล้กับมุมซ้ายบนของหน้าต่างการเรียกใช้/แก้ไขข้อบกพร่อง การกําหนดค่า
    3. เลือก Gradle
    4. ป้อน "APK ที่ไม่ได้เซ็นชื่อ" ในชื่อ
    5. เลือกโมดูลจากส่วนโปรเจ็กต์ Gradle
    6. ป้อน "assemble" ใน Tasks
    7. เลือกตกลงเพื่อกำหนดค่าใหม่ให้เสร็จสมบูรณ์
    8. ตรวจสอบว่าได้เลือกการกำหนดค่าการเรียกใช้ Unsigned APK ในแถบเครื่องมือ แล้วเลือกเรียกใช้ > เรียกใช้ "Unsigned APK"
    คุณดู APK ที่ไม่ได้ลงนามได้ในไดเรกทอรี <ProjectName>/app/build/outputs/apk/
  2. ค้นหาเครื่องมือ aapt2 หากยังไม่ได้อยู่ใน PATH หากใช้ SDK Tools r8 ขึ้นไป คุณจะเห็น aapt2 ในไดเรกทอรี <SDK>/build-tools/<tools version number>

    หมายเหตุ: คุณต้องใช้ aapt2 เวอร์ชันที่ระบุไว้สำหรับคอมโพเนนต์ Build-Tools เวอร์ชันล่าสุดที่มี หากไม่มีคอมโพเนนต์ Build-Tools เวอร์ชันล่าสุด ให้ดาวน์โหลดโดยใช้ Android SDK Manager

  3. เรียกใช้ aapt2 โดยใช้ไวยากรณ์นี้
$ aapt2 dump badging <path_to_exported_.apk>

ตัวอย่างเอาต์พุตคำสั่งสำหรับตัวอย่างบลูทูธที่ 2 ที่แสดงก่อนหน้านี้มีดังนี้

$ ./aapt2 dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

ข้อมูลอ้างอิงฟีเจอร์

ส่วนต่อไปนี้ให้ข้อมูลอ้างอิงเกี่ยวกับฟีเจอร์ฮาร์ดแวร์ ฟีเจอร์ซอฟต์แวร์ และชุดสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์ที่เฉพาะเจาะจง

ฟีเจอร์ฮาร์ดแวร์

ส่วนนี้จะแสดงฟีเจอร์ฮาร์ดแวร์ที่แพลตฟอร์มเวอร์ชันล่าสุดรองรับ หากต้องการระบุว่าแอปใช้หรือต้องใช้ฟีเจอร์ฮาร์ดแวร์ ให้ประกาศค่าที่เกี่ยวข้องโดยขึ้นต้นด้วย "android.hardware" ในแอตทริบิวต์ android:name ทุกครั้งที่คุณประกาศฟีเจอร์ฮาร์ดแวร์ ให้ใช้องค์ประกอบ <uses-feature> แยกต่างหาก

ฟีเจอร์ฮาร์ดแวร์เสียง

android.hardware.audio.low_latency
แอปใช้ไปป์ไลน์เสียงที่มีเวลาในการตอบสนองต่ำของอุปกรณ์ ซึ่งจะช่วยลดการหน่วงเวลาและความล่าช้าเมื่อประมวลผลอินพุตหรือเอาต์พุตเสียง
android.hardware.audio.output
แอปส่งเสียงโดยใช้ลำโพง แจ็คเสียง ความสามารถในการสตรีมบลูทูธ หรือกลไกที่คล้ายกันของอุปกรณ์
android.hardware.audio.pro
แอปใช้ฟังก์ชันการทำงานและประสิทธิภาพเสียงระดับสูงของอุปกรณ์
android.hardware.microphone
แอปบันทึกเสียงโดยใช้ไมโครโฟนของอุปกรณ์

ฟีเจอร์ฮาร์ดแวร์บลูทูธ

android.hardware.bluetooth
แอปใช้ฟีเจอร์บลูทูธของอุปกรณ์ ซึ่งปกติแล้วจะใช้เพื่อสื่อสารกับอุปกรณ์อื่นๆ ที่เปิดใช้บลูทูธ
android.hardware.bluetooth_le
แอปใช้ฟีเจอร์วิทยุบลูทูธพลังงานต่ำของอุปกรณ์

ฟีเจอร์ฮาร์ดแวร์ของกล้อง

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

การรองรับหน้าจอขนาดใหญ่

อุปกรณ์หน้าจอขนาดใหญ่บางรุ่นไม่รองรับฟีเจอร์กล้องบางรายการ โดยปกติแล้ว Chromebook จะไม่มีกล้องหลัง (หันออกด้านนอก) โฟกัสอัตโนมัติ หรือแฟลช แต่ Chromebook มีกล้องหน้า (หันหน้าเข้าหาผู้ใช้) และมักเชื่อมต่อกับกล้องภายนอก

หากต้องการรองรับกล้องพื้นฐานและทำให้แอปพร้อมให้บริการในอุปกรณ์จำนวนมากที่สุด ให้เพิ่มการตั้งค่าฟีเจอร์กล้องต่อไปนี้ลงในไฟล์ Manifest ของแอป

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

ปรับการตั้งค่าฟีเจอร์เพื่อรองรับ Use Case ของแอป แต่หากต้องการให้แอปพร้อมให้บริการในอุปกรณ์จำนวนมากที่สุด ให้ใส่แอตทริบิวต์ required เสมอเพื่อระบุอย่างชัดเจนว่าฟีเจอร์ใดเป็นฟีเจอร์ที่ต้องมี

รายการฟีเจอร์
android.hardware.camera.any

แอปใช้กล้องของอุปกรณ์หรือกล้องภายนอกที่เชื่อมต่อกับอุปกรณ์ ใช้ฟีเจอร์นี้แทน android.hardware.camera หรือ android.hardware.camera.front หากแอปของคุณไม่กำหนดให้กล้องหันไปทางด้านหลัง (โลก) หรือด้านหน้า (ผู้ใช้) ตามลำดับ

สิทธิ์ CAMERA หมายความว่าแอปของคุณใช้ android.hardware.camera ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศ android.hardware.camera ด้วย android:required="false"

android.hardware.camera

แอปใช้กล้องหลัง (หันออกด้านนอก) ของอุปกรณ์

ข้อควรระวัง: อุปกรณ์อย่าง Chromebook ที่มีกล้องหน้า (หันเข้าหาผู้ใช้) เท่านั้นจะไม่รองรับฟีเจอร์นี้ ใช้ android.hardware.camera.any หากแอปใช้กล้องได้ทุกตัว ไม่ว่าจะหันกล้องไปทางไหนก็ตาม

หมายเหตุ: สิทธิ์ CAMERA บ่งบอกว่ากล้องหลังเป็นฟีเจอร์ที่จำเป็น เพื่อช่วยในการกรองที่เหมาะสมใน Google Play เมื่อไฟล์ Manifest ของแอปมีสิทธิ์ CAMERA ให้ระบุอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์ camera และระบุว่าจำเป็นต้องใช้ฟีเจอร์ดังกล่าวหรือไม่ เช่น
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

แอปใช้กล้องหน้า (หันเข้าหาผู้ใช้) ของอุปกรณ์

สิทธิ์ CAMERA หมายความว่าแอปของคุณใช้ android.hardware.camera ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศ android.hardware.camera ด้วย android:required="false"

ข้อควรระวัง: หากแอปใช้ android.hardware.camera.front แต่ไม่ได้ประกาศ android.hardware.camera อย่างชัดเจนด้วย android.required="false" อุปกรณ์ที่ไม่มีกล้องหลัง (เช่น Chromebook) จะได้รับการกรองโดย Google Play หากแอปรองรับอุปกรณ์ที่มีเฉพาะกล้องหน้า ให้ประกาศ android.hardware.camera ด้วย android.required="false" เพื่อป้องกันไม่ให้กรองโดยไม่จำเป็น

android.hardware.camera.external

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

สิทธิ์ CAMERA หมายความว่าแอปของคุณใช้ android.hardware.camera ด้วย กล้องหลังเป็นฟีเจอร์ที่ต้องระบุ เว้นแต่จะมีการประกาศ android.hardware.camera ด้วย android:required="false"

android.hardware.camera.autofocus

แอปใช้ฟีเจอร์โฟกัสอัตโนมัติที่กล้องของอุปกรณ์รองรับ

หมายเหตุ: สิทธิ์ CAMERA หมายความว่าโฟกัสอัตโนมัติเป็นฟีเจอร์ที่จำเป็น เพื่อช่วยในการกรองที่เหมาะสมใน Google Play เมื่อไฟล์ Manifest ของแอปมีสิทธิ์ CAMERA ให้ระบุอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์โฟกัสอัตโนมัติและระบุว่าจำเป็นต้องใช้ฟีเจอร์ดังกล่าวหรือไม่ เช่น
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

android.hardware.camera.flash

แอปจะใช้ฟีเจอร์แฟลชที่กล้องของอุปกรณ์รองรับ

android.hardware.camera.capability.manual_post_processing

แอปใช้ฟีเจอร์ MANUAL_POST_PROCESSING ที่กล้องของอุปกรณ์รองรับ

ฟีเจอร์นี้ช่วยให้แอปของคุณลบล้างฟังก์ชันการทำงานปรับสมดุลแสงสีขาวอัตโนมัติของกล้องได้ ใช้ android.colorCorrection.transform, android.colorCorrection.gains และ android.colorCorrection.mode ของ TRANSFORM_MATRIX

android.hardware.camera.capability.manual_sensor

แอปใช้ฟีเจอร์ MANUAL_SENSOR ที่กล้องของอุปกรณ์รองรับ

ฟีเจอร์นี้แสดงถึงการรองรับการล็อกการเปิดรับแสงอัตโนมัติ (android.control.aeLock) ซึ่งช่วยให้เวลาการเปิดรับแสงและความไวแสงของกล้องคงที่ตามค่าที่ระบุ

android.hardware.camera.capability.raw

แอปใช้ฟีเจอร์ RAW ที่กล้องของอุปกรณ์รองรับ

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

android.hardware.camera.level.full
แอปใช้การรองรับการจับภาพระดับ FULL ที่กล้องของอุปกรณ์อย่างน้อย 1 ตัวมีให้ การรองรับ FULL ประกอบด้วยความสามารถในการถ่ายภาพแบบต่อเนื่อง การควบคุมต่อเฟรม และการควบคุมหลังการประมวลผลด้วยตนเอง โปรดดู INFO_SUPPORTED_HARDWARE_LEVEL_FULL

ฟีเจอร์ฮาร์ดแวร์ของ UI ของอุปกรณ์

android.hardware.type.automotive

แอปออกแบบมาเพื่อแสดง UI บนชุดหน้าจอภายในยานพาหนะ ผู้ใช้โต้ตอบกับแอปโดยใช้ปุ่มกด การควบคุมด้วยการสัมผัส ตัวควบคุมแบบหมุน และอินเทอร์เฟซที่คล้ายกับเมาส์ โดยปกติแล้วหน้าจอของยานพาหนะจะปรากฏในคอนโซลกลางหรือหน้าปัดของยานพาหนะ

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

android.hardware.type.television

(เลิกใช้งานแล้ว ให้ใช้ android.software.leanback แทน)

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

android.hardware.type.watch
แอปออกแบบมาเพื่อแสดง UI บนนาฬิกา นาฬิกาสวมใส่บนร่างกาย เช่น ข้อมือ ผู้ใช้อยู่ใกล้กับอุปกรณ์มากขณะโต้ตอบกับอุปกรณ์
android.hardware.type.pc

แอปนี้ออกแบบมาเพื่อแสดง UI บน Chromebook ฟีเจอร์นี้จะปิดใช้การจําลองอินพุตสําหรับเมาส์และทัชแพด เนื่องจาก Chromebook ใช้ฮาร์ดแวร์เมาส์และทัชแพด ดูการป้อนข้อมูลด้วยเมาส์

หมายเหตุ: ตั้งค่าเป็น required="false" สำหรับองค์ประกอบนี้ ไม่เช่นนั้น Google Play Store จะทำให้แอปของคุณไม่พร้อมให้บริการในอุปกรณ์ที่ไม่ใช่ Chromebook

ฟีเจอร์ฮาร์ดแวร์ลายนิ้วมือ

android.hardware.fingerprint
แอปจะอ่านลายนิ้วมือโดยใช้ฮาร์ดแวร์ข้อมูลไบโอเมตริกของอุปกรณ์

ฟีเจอร์ฮาร์ดแวร์ของเกมแพด

android.hardware.gamepad
แอปจะบันทึกอินพุตของเกมคอนโทรลเลอร์จากตัวอุปกรณ์เองหรือจากเกมแพดที่เชื่อมต่อ

ฟีเจอร์ฮาร์ดแวร์อินฟราเรด

android.hardware.consumerir
แอปใช้ความสามารถอินฟราเรด (IR) ของอุปกรณ์ โดยปกติแล้วเพื่อสื่อสารกับอุปกรณ์ IR อื่นๆ ของผู้บริโภค

ฟีเจอร์ฮาร์ดแวร์ตำแหน่ง

android.hardware.location
แอปใช้ฟีเจอร์อย่างน้อย 1 รายการในอุปกรณ์เพื่อระบุตำแหน่ง เช่น ตำแหน่ง GPS, ตำแหน่งเครือข่าย หรือตำแหน่งของเซลล์
android.hardware.location.gps

แอปใช้พิกัดตำแหน่งที่แน่นอนซึ่งได้จากเครื่องรับสัญญาณระบบกำหนดตำแหน่งทั่วโลก (GPS) ในอุปกรณ์

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.location ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยแอตทริบิวต์ android:required="false"

android.hardware.location.network

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

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.location ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วยแอตทริบิวต์ android:required="false"

ฟีเจอร์ฮาร์ดแวร์ NFC

android.hardware.nfc
แอปใช้ฟีเจอร์วิทยุ Near-Field Communication (NFC) ของอุปกรณ์
android.hardware.nfc.hce

แอปใช้การจำลองบัตร NFC ที่โฮสต์ในอุปกรณ์

ฟีเจอร์ฮาร์ดแวร์ OpenGL ES

android.hardware.opengles.aep
แอปใช้ OpenGL ES Android Extension Pack ที่ติดตั้งในอุปกรณ์

ฟีเจอร์ฮาร์ดแวร์ของเซ็นเซอร์

android.hardware.sensor.accelerometer
แอปใช้ค่าที่อ่านได้จากการเคลื่อนไหวจากเครื่องวัดความเร่งของอุปกรณ์เพื่อตรวจหาการวางแนวปัจจุบันของอุปกรณ์ เช่น แอปอาจใช้ค่าที่อ่านได้จากตัวตรวจวัดความเร่งเพื่อกำหนดเวลาสลับระหว่างการวางแนวแนวตั้งและแนวนอน
android.hardware.sensor.ambient_temperature
แอปใช้เซ็นเซอร์อุณหภูมิรอบข้าง (สภาพแวดล้อม) ของอุปกรณ์ เช่น แอปสภาพอากาศสามารถรายงานอุณหภูมิในอาคารหรือกลางแจ้ง
android.hardware.sensor.barometer
แอปใช้บารอมิเตอร์ของอุปกรณ์ เช่น แอปสภาพอากาศอาจรายงานความดันอากาศ
android.hardware.sensor.compass
แอปใช้เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก (เข็มทิศ) ของอุปกรณ์ เช่น แอปการนำทางอาจแสดงทิศทางปัจจุบันที่ผู้ใช้หันหน้าไป
android.hardware.sensor.gyroscope
แอปใช้ไจโรสโคปของอุปกรณ์เพื่อตรวจจับการหมุนและการบิด ซึ่งจะสร้างระบบการวางแนว 6 แกน การใช้เซ็นเซอร์นี้ช่วยให้แอปตรวจจับได้อย่างราบรื่นยิ่งขึ้นเมื่อต้องสลับระหว่างการวางแนวตั้งกับแนวนอน
android.hardware.sensor.hifi_sensors
แอปใช้เซ็นเซอร์ความเที่ยงตรงสูง (Hi-Fi) ของอุปกรณ์ เช่น แอปเล่นเกมอาจตรวจจับการเคลื่อนไหวที่แม่นยำสูงของผู้ใช้
android.hardware.sensor.heartrate
แอปใช้เครื่องวัดอัตราการเต้นของหัวใจของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานแนวโน้มอัตราการเต้นของหัวใจของผู้ใช้เมื่อเวลาผ่านไป
android.hardware.sensor.heartrate.ecg
แอปใช้เซ็นเซอร์วัดอัตราการเต้นของหัวใจแบบคลื่นไฟฟ้าหัวใจ (ECG) ของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานข้อมูลอัตราการเต้นของหัวใจของผู้ใช้อย่างละเอียดยิ่งขึ้น
android.hardware.sensor.light
แอปใช้เซ็นเซอร์แสงของอุปกรณ์ เช่น แอปอาจแสดงรูปแบบสี 1 ใน 2 แบบตามสภาพแสงโดยรอบ
android.hardware.sensor.proximity
แอปใช้พร็อกซิมิตีเซ็นเซอร์ของอุปกรณ์ เช่น แอปโทรศัพท์อาจปิดหน้าจอของอุปกรณ์เมื่อแอปตรวจพบว่าผู้ใช้ถืออุปกรณ์ไว้ใกล้กับร่างกาย
android.hardware.sensor.relative_humidity
แอปใช้เซ็นเซอร์ความชื้นสัมพัทธ์ของอุปกรณ์ เช่น แอปสภาพอากาศอาจใช้ความชื้นเพื่อคํานวณและรายงานจุดน้ำค้างปัจจุบัน
android.hardware.sensor.stepcounter
แอปใช้เครื่องนับก้าวของอุปกรณ์ เช่น แอปฟิตเนสอาจรายงานจํานวนก้าวที่ผู้ใช้ต้องเดินเพื่อให้บรรลุเป้าหมายจํานวนก้าวรายวัน
android.hardware.sensor.stepdetector
แอปใช้เครื่องตรวจจับจำนวนก้าวของอุปกรณ์ เช่น แอปฟิตเนสอาจใช้ช่วงเวลาระหว่างการก้าวเพื่ออนุมานประเภทการออกกำลังกายที่ผู้ใช้กําลังทําอยู่

ฟีเจอร์ฮาร์ดแวร์ของหน้าจอ

android.hardware.screen.landscape
android.hardware.screen.portrait

แอปกำหนดให้อุปกรณ์ใช้การวางแนวตั้งหรือแนวนอน หากแอปรองรับทั้ง 2 การวางแนว คุณไม่จําเป็นต้องประกาศฟีเจอร์ใดฟีเจอร์หนึ่ง

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

<uses-feature android:name="android.hardware.screen.portrait" />

ระบบจะถือว่าไม่จำเป็นต้องใช้การวางแนวทั้ง 2 แบบโดยค่าเริ่มต้น เพื่อให้แอปของคุณติดตั้งในอุปกรณ์ที่รองรับการวางแนวอย่างน้อย 1 แบบหรือทั้ง 2 แบบได้ อย่างไรก็ตาม หากกิจกรรมใดขอให้ทำงานในแนวการวางแนวที่เจาะจงโดยใช้แอตทริบิวต์ android:screenOrientation การประกาศนี้จะบอกเป็นนัยว่าแอปของคุณต้องใช้แนวการวางแนวนั้น

ตัวอย่างเช่น หากคุณประกาศ android:screenOrientation ด้วย "landscape", "reverseLandscape" หรือ "sensorLandscape" แอปของคุณจะพร้อมใช้งานในอุปกรณ์ที่รองรับการวางแนวนอนเท่านั้น

แนวทางปฏิบัติแนะนำคือประกาศข้อกำหนดสำหรับการวางแนวนี้โดยใช้องค์ประกอบ <uses-feature> หากคุณประกาศการวางแนวสําหรับกิจกรรมโดยใช้ android:screenOrientation แต่ไม่ได้กําหนดให้ใช้จริง คุณสามารถปิดใช้ข้อกําหนดได้โดยประกาศการวางแนวด้วยองค์ประกอบ <uses-feature> และใส่ android:required="false"

อุปกรณ์ที่ใช้ Android 3.1 (API ระดับ 12) หรือต่ำกว่าจะรองรับทั้งแนวนอนและแนวตั้งเพื่อใช้งานร่วมกันได้

ฟีเจอร์ฮาร์ดแวร์โทรศัพท์

android.hardware.telephony
แอปใช้ฟีเจอร์โทรศัพท์ของอุปกรณ์ เช่น วิทยุโทรศัพท์ที่มีบริการการสื่อสารผ่านข้อมูล
android.hardware.telephony.cdma

แอปใช้ระบบวิทยุโทรศัพท์แบบ Code Division Multiple Access (CDMA)

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.telephony ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

android.hardware.telephony.gsm

แอปใช้ระบบวิทยุโทรศัพท์ Global System for Mobile Communications (GSM)

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.telephony ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

ฟีเจอร์ฮาร์ดแวร์หน้าจอสัมผัส

android.hardware.faketouch

แอปใช้เหตุการณ์การโต้ตอบด้วยการสัมผัสพื้นฐาน เช่น การแตะและการลาก

เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์ดังกล่าวมีหน้าจอสัมผัส "การสัมผัสจำลอง" จำลองหรือมีหน้าจอสัมผัสจริงเท่านั้น

อุปกรณ์ที่มีอินเทอร์เฟซการสัมผัสจำลองมีระบบการป้อนข้อมูลของผู้ใช้ซึ่งจําลองความสามารถบางส่วนของหน้าจอสัมผัส เช่น เมาส์หรือรีโมตคอนโทรลอาจควบคุมเคอร์เซอร์บนหน้าจอ

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

แอปต้องใช้ฟีเจอร์ android.hardware.faketouch โดยค่าเริ่มต้น หากต้องการจำกัดแอปให้ใช้ได้เฉพาะกับอุปกรณ์ที่มีหน้าจอสัมผัสเท่านั้น คุณต้องประกาศอย่างชัดเจนว่าต้องใช้หน้าจอสัมผัส ดังนี้

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

แอปทั้งหมดที่ไม่กำหนดandroid.hardware.touchscreenอย่างชัดเจน ดังที่แสดงในตัวอย่างต่อไปนี้ จะทำงานในอุปกรณ์ที่มี android.hardware.faketouch ได้ด้วย

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

แอปติดตาม "นิ้ว" ที่แตกต่างกันอย่างน้อย 2 นิ้วบนอินเทอร์เฟซการสัมผัสจำลอง ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์ android.hardware.faketouch เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์จำลองการติดตามนิ้วมืออย่างน้อย 2 นิ้วที่แตกต่างกันหรือมีหน้าจอสัมผัสจริง

อุปกรณ์อินพุตที่รองรับมัลติทัชแบบแยกต่างหากด้วยอินเทอร์เฟซการสัมผัสจำลองจะไม่รองรับท่าทางสัมผัสด้วย 2 นิ้วบางท่าทาง ต่างจากมัลติทัชที่ android.hardware.touchscreen.multitouch.distinct กำหนดไว้ เนื่องจากระบบจะเปลี่ยนอินพุตเป็นการเลื่อนเคอร์เซอร์บนหน้าจอ กล่าวคือ ท่าทางสัมผัสด้วยนิ้วเดียวในอุปกรณ์ดังกล่าวจะย้ายเคอร์เซอร์ การปัดด้วย 2 นิ้วจะทริกเกอร์เหตุการณ์การสัมผัสด้วย 1 นิ้ว และท่าทางสัมผัสด้วย 2 นิ้วอื่นๆ จะทริกเกอร์เหตุการณ์การสัมผัสด้วย 2 นิ้วที่เกี่ยวข้อง

อุปกรณ์ที่มีแทร็กแพดแบบใช้ 2 นิ้วเพื่อเลื่อนเคอร์เซอร์จะรองรับฟีเจอร์นี้

android.hardware.faketouch.multitouch.jazzhand

แอปติดตาม "นิ้ว" ที่ต่างกันอย่างน้อย 5 นิ้วบนอินเทอร์เฟซการสัมผัสจำลอง ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์ android.hardware.faketouch เมื่อประกาศเป็น "ต้องระบุ" ฟีเจอร์นี้จะระบุว่าแอปเข้ากันได้กับอุปกรณ์ก็ต่อเมื่ออุปกรณ์จำลองการติดตามนิ้วที่แตกต่างกันตั้งแต่ 5 นิ้วขึ้นไป หรือมีหน้าจอสัมผัสจริง

อุปกรณ์อินพุตที่รองรับมัลติทัชแบบ Jazzhand ด้วยอินเทอร์เฟซการสัมผัสจำลองจะไม่รองรับท่าทางสัมผัสด้วย 5 นิ้วบางท่าทาง ต่างจากมัลติทัชที่ android.hardware.touchscreen.multitouch.jazzhand กำหนดไว้ เนื่องจากระบบจะเปลี่ยนอินพุตเป็นการเคลื่อนที่ของเคอร์เซอร์บนหน้าจอ กล่าวคือ ท่าทางสัมผัสด้วยนิ้วเดียวในอุปกรณ์ดังกล่าวจะย้ายเคอร์เซอร์ ท่าทางสัมผัสด้วยหลายนิ้วจะทริกเกอร์เหตุการณ์การสัมผัสด้วยนิ้วเดียว และท่าทางสัมผัสด้วยหลายนิ้วอื่นๆ จะทริกเกอร์เหตุการณ์การสัมผัสด้วยหลายนิ้วที่เกี่ยวข้อง

อุปกรณ์ที่มีแทร็กแพดแบบสัมผัสด้วย 5 นิ้วสำหรับการเคลื่อนไหวเคอร์เซอร์จะรองรับฟีเจอร์นี้

android.hardware.touchscreen

แอปใช้ความสามารถของหน้าจอสัมผัสของอุปกรณ์สำหรับท่าทางสัมผัสที่โต้ตอบได้มากกว่าเหตุการณ์การสัมผัสพื้นฐาน เช่น การปัด ฟีเจอร์นี้เป็นฟีเจอร์ที่รวมฟีเจอร์ android.hardware.faketouch ไว้ด้วย

โดยค่าเริ่มต้น แอปทั้งหมดต้องใช้ฟีเจอร์นี้ จึงจะใช้กับอุปกรณ์ที่มีเพียงอินเทอร์เฟซ "การแตะจำลอง" เท่านั้นไม่ได้ คุณทำให้แอปพร้อมให้บริการในอุปกรณ์ที่มีอินเทอร์เฟซการสัมผัสจำลอง หรือแม้แต่ในอุปกรณ์ที่มีตัวควบคุม D-pad เท่านั้นได้โดยการประกาศอย่างชัดเจนว่าไม่จำเป็นต้องใช้หน้าจอสัมผัสโดยใช้ android.hardware.touchscreen with android:required="false" เพิ่มประกาศนี้หากแอปใช้อินเทอร์เฟซหน้าจอสัมผัสจริง แต่ไม่จำเป็นต้องใช้ แอปทั้งหมดที่ไม่กำหนดให้ต้องมี android.hardware.touchscreen อย่างชัดแจ้งจะทำงานในอุปกรณ์ที่มี android.hardware.faketouch ได้ด้วย

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

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

android.hardware.touchscreen.multitouch

แอปใช้ความสามารถพื้นฐานของการสัมผัสแบบ 2 จุดของอุปกรณ์ เช่น ท่าทางสัมผัสด้วยการบีบนิ้ว แต่แอปไม่จำเป็นต้องติดตามการสัมผัสแยกต่างหาก ฟีเจอร์นี้เป็นชุดที่รวมฟีเจอร์ android.hardware.touchscreen ไว้ด้วย

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.touchscreen ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

android.hardware.touchscreen.multitouch.distinct

แอปใช้ความสามารถแบบมัลติทัชขั้นสูงของอุปกรณ์เพื่อติดตามจุดตั้งแต่ 2 จุดขึ้นไปอย่างอิสระ ฟีเจอร์นี้รวมฟีเจอร์ android.hardware.touchscreen.multitouch ไว้ด้วย

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.touchscreen.multitouch ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

android.hardware.touchscreen.multitouch.jazzhand

แอปใช้ความสามารถการสัมผัสหลายจุดขั้นสูงของอุปกรณ์เพื่อติดตามจุดอย่างน้อย 5 จุดแยกกัน ฟีเจอร์นี้รวมฟีเจอร์ android.hardware.touchscreen.multitouch ไว้ด้วย

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.hardware.touchscreen.multitouch ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

ฟีเจอร์ฮาร์ดแวร์ USB

android.hardware.usb.accessory
แอปจะทํางานเหมือนอุปกรณ์ USB และเชื่อมต่อกับโฮสต์ USB
android.hardware.usb.host
แอปใช้อุปกรณ์เสริม USB ที่เชื่อมต่อกับอุปกรณ์ อุปกรณ์ทำหน้าที่เป็นโฮสต์ USB

ฟีเจอร์ฮาร์ดแวร์ของ Vulkan

android.hardware.vulkan.compute
แอปใช้ฟีเจอร์การประมวลผลของ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุระดับของฟีเจอร์การประมวลผลที่ไม่บังคับที่แอปต้องใช้นอกเหนือจากข้อกำหนดของ Vulkan 1.0 ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับ Vulkan Compute ระดับ 0 ให้ประกาศฟีเจอร์ต่อไปนี้
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
ดูรายละเอียดเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่ FEATURE_VULKAN_HARDWARE_COMPUTE
android.hardware.vulkan.level
แอปใช้ฟีเจอร์ระดับ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุระดับของฟีเจอร์ฮาร์ดแวร์ที่ไม่บังคับที่แอปต้องใช้ ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับฮาร์ดแวร์ Vulkan ระดับ 0 ให้ประกาศฟีเจอร์ต่อไปนี้
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่ FEATURE_VULKAN_HARDWARE_LEVEL
android.hardware.vulkan.version
แอปใช้ Vulkan ฟีเจอร์นี้บ่งบอกว่าแอปต้องใช้การใช้งาน Vulkan ที่เร่งด้วยฮาร์ดแวร์ เวอร์ชันฟีเจอร์จะระบุเวอร์ชันขั้นต่ำของ Vulkan API ที่แอปรองรับ ตัวอย่างเช่น หากแอปของคุณต้องใช้การรองรับ Vulkan 1.0 ให้ประกาศฟีเจอร์ต่อไปนี้
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
ดูรายละเอียดเพิ่มเติมเกี่ยวกับเวอร์ชันฟีเจอร์ได้ที่ FEATURE_VULKAN_HARDWARE_VERSION

ฟีเจอร์ฮาร์ดแวร์ Wi-Fi

android.hardware.wifi
แอปใช้ฟีเจอร์เครือข่าย 802.11 (Wi-Fi) ในอุปกรณ์
android.hardware.wifi.direct
แอปใช้ฟีเจอร์เครือข่าย Wi-Fi Direct ในอุปกรณ์

ฟีเจอร์ของซอฟต์แวร์

ส่วนนี้จะแสดงฟีเจอร์ซอฟต์แวร์ที่แพลตฟอร์มเวอร์ชันล่าสุดรองรับ หากต้องการระบุว่าแอปใช้หรือต้องใช้ฟีเจอร์ซอฟต์แวร์ ให้ประกาศค่าที่เกี่ยวข้องโดยขึ้นต้นด้วย "android.software" ในแอตทริบิวต์ android:name ทุกครั้งที่คุณประกาศฟีเจอร์ซอฟต์แวร์ ให้ใช้องค์ประกอบ <uses-feature> แยกต่างหาก

ฟีเจอร์ของซอฟต์แวร์การสื่อสาร

android.software.sip
แอปใช้บริการ Session Initiation Protocol (SIP) การใช้ SIP จะทำให้แอปรองรับการดำเนินการทางโทรศัพท์ผ่านอินเทอร์เน็ต เช่น การประชุมทางวิดีโอและการรับส่งข้อความโต้ตอบแบบทันที
android.software.sip.voip

แอปใช้บริการ Voice Over Internet Protocol (VoIP) ที่ใช้ SIP การใช้ VoIP จะช่วยให้แอปรองรับการโทรผ่านอินเทอร์เน็ตแบบเรียลไทม์ เช่น การประชุมทางวิดีโอแบบ 2 ทาง

การใช้ฟีเจอร์นี้หมายความว่าแอปใช้ฟีเจอร์ android.software.sip ด้วย เว้นแต่จะมีการประกาศฟีเจอร์หลักนี้ด้วย android:required="false"

android.software.webview
แอปแสดงเนื้อหาจากอินเทอร์เน็ต

ฟีเจอร์ซอฟต์แวร์อินพุตที่กำหนดเอง

android.software.input_methods
แอปใช้วิธีการป้อนข้อมูลใหม่ซึ่งนักพัฒนาแอปกำหนดไว้ใน InputMethodService

ฟีเจอร์ของซอฟต์แวร์การจัดการอุปกรณ์

android.software.backup
แอปมีตรรกะในการจัดการการดำเนินการสำรองและกู้คืน
android.software.device_admin
แอปใช้ผู้ดูแลระบบอุปกรณ์เพื่อบังคับใช้นโยบายด้านอุปกรณ์
android.software.managed_users
แอปรองรับผู้ใช้รองและโปรไฟล์ที่มีการจัดการ
android.software.securely_removes_users
แอปสามารถนําผู้ใช้และข้อมูลที่เกี่ยวข้องออกอย่างถาวร
android.software.verified_boot
แอปมีตรรกะในการจัดการผลลัพธ์จากฟีเจอร์การบูตที่ได้รับการยืนยันของอุปกรณ์ ซึ่งจะตรวจจับว่าการกำหนดค่าของอุปกรณ์มีการเปลี่ยนแปลงระหว่างการดำเนินการรีสตาร์ทหรือไม่

ฟีเจอร์ของซอฟต์แวร์สื่อ

android.software.midi
แอปเชื่อมต่อกับเครื่องดนตรีหรือส่งออกเสียงโดยใช้โปรโตคอล Musical Instrument Digital Interface (MIDI)
android.software.print
แอปนี้มีคำสั่งสำหรับพิมพ์เอกสารที่แสดงในอุปกรณ์
android.software.leanback
แอปออกแบบมาเพื่อทำงานบนอุปกรณ์ Android TV
android.software.live_tv
แอปสตรีมรายการทีวีสด

ฟีเจอร์ของซอฟต์แวร์อินเทอร์เฟซหน้าจอ

android.software.app_widgets
แอปใช้หรือให้บริการวิดเจ็ตแอปและมีไว้สำหรับอุปกรณ์ที่มีหน้าจอหลักหรือตำแหน่งที่คล้ายกันซึ่งผู้ใช้สามารถฝังวิดเจ็ตแอปได้เท่านั้น
android.software.home_screen
แอปจะทํางานแทนหน้าจอหลักของอุปกรณ์
android.software.live_wallpaper
แอปใช้หรือมีวอลเปเปอร์ที่มีภาพเคลื่อนไหว

สิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์

ตัวแปรคงที่ของฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์บางรายการจะพร้อมใช้งานสำหรับแอปพลิเคชันหลังจาก API ที่เกี่ยวข้อง ด้วยเหตุนี้ แอปบางแอปจึงอาจใช้ API ก่อนที่จะประกาศว่าต้องใช้ API โดยใช้ระบบ <uses-feature>

Google Play จะถือว่าสิทธิ์บางอย่างที่เกี่ยวข้องกับฮาร์ดแวร์บ่งชี้ว่าจำเป็นต้องใช้ฟีเจอร์ฮาร์ดแวร์ที่เกี่ยวข้องโดยค่าเริ่มต้น เพื่อป้องกันไม่ให้แอปเหล่านั้นพร้อมให้บริการโดยไม่ตั้งใจ ตัวอย่างเช่น แอปพลิเคชันที่ใช้บลูทูธต้องขอสิทธิ์ BLUETOOTH ในองค์ประกอบ <uses-permission>

สำหรับแอปเดิม Google Play จะถือว่าการประกาศสิทธิ์หมายความว่าแอปพลิเคชันต้องใช้ฟีเจอร์ android.hardware.bluetooth ที่เกี่ยวข้อง และตั้งค่าการกรองตามฟีเจอร์นั้น ตารางที่ 2 แสดงสิทธิ์ที่บ่งบอกถึงข้อกำหนดของฟีเจอร์ที่เทียบเท่ากับข้อกำหนดที่ประกาศไว้ในองค์ประกอบ <uses-feature>

การประกาศ <uses-feature> รวมถึงแอตทริบิวต์ android:required ที่ประกาศไว้จะมีความสําคัญเหนือกว่าฟีเจอร์ที่สื่อถึงโดยสิทธิ์ในตาราง 2 เสมอ สําหรับสิทธิ์เหล่านี้ คุณปิดใช้การกรองตามฟีเจอร์ที่นัยได้โดยการประกาศฟีเจอร์อย่างชัดเจนในองค์ประกอบ <uses-feature> โดยตั้งค่าแอตทริบิวต์ required เป็น false

ตัวอย่างเช่น หากต้องการปิดใช้การกรองตามสิทธิ์ CAMERA ให้เพิ่มการประกาศ <uses-feature> ต่อไปนี้ลงในไฟล์ Manifest

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

ข้อควรระวัง: หากแอปกำหนดเป้าหมายเป็น Android 5.0 (API ระดับ 21) ขึ้นไปและใช้สิทธิ์ ACCESS_COARSE_LOCATION หรือ ACCESS_FINE_LOCATION เพื่อรับการอัปเดตตำแหน่งจากเครือข่ายหรือ GPS ตามลำดับ คุณต้องประกาศอย่างชัดเจนว่าแอปของคุณใช้ฟีเจอร์ฮาร์ดแวร์ android.hardware.location.network หรือ android.hardware.location.gps

ตาราง 2 สิทธิ์ของอุปกรณ์ที่บ่งบอกถึงการใช้ฮาร์ดแวร์ของอุปกรณ์

หมวดหมู่ สิทธิ์ ข้อกำหนดฟีเจอร์โดยนัย
บลูทูธ BLUETOOTH android.hardware.bluetooth

ดูรายละเอียดได้ที่การจัดการพิเศษสำหรับฟีเจอร์บลูทูธ

BLUETOOTH_ADMIN android.hardware.bluetooth
กล้อง CAMERA android.hardware.camera
android.hardware.camera.autofocus
ตำแหน่ง ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (เฉพาะในกรณีที่ระดับ API เป้าหมายคือ 20 หรือต่ำกว่า)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (เฉพาะในกรณีที่ระดับ API เป้าหมายคือ 20 หรือต่ำกว่า)

ไมโครโฟน RECORD_AUDIO android.hardware.microphone
โทรศัพท์ CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
Wi-Fi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi