Google Play menggunakan elemen <uses-feature> yang dideklarasikan dalam manifes aplikasi untuk memfilter aplikasi dari perangkat yang tidak memenuhi persyaratan fitur hardware dan software.

Dengan menentukan fitur yang diperlukan aplikasi, Anda mengaktifkan Google Play untuk menampilkan aplikasi hanya bagi pengguna yang perangkatnya memenuhi persyaratan fitur aplikasi, bukan menampilkannya kepada semua pengguna.

Untuk informasi penting tentang cara Google Play menggunakan fitur sebagai dasar pemfilteran, baca bagian Pemfilteran berbasis fitur dan Google Play.

sintaksis:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
terdapat dalam:
<manifest>
deskripsi:

Mendeklarasikan fitur hardware atau software tunggal yang digunakan aplikasi.

Tujuan deklarasi <uses-feature> adalah menginformasikan entity eksternal apa pun mengenai serangkaian fitur hardware dan software yang diperlukan aplikasi Anda agar berfungsi. Elemen ini menawarkan atribut required yang memungkinkan Anda menentukan apakah aplikasi memerlukan, dan tidak dapat berfungsi tanpa, fitur yang dideklarasikan atau lebih memilih untuk memiliki fitur, tetapi dapat berfungsi tanpanya.

Karena dukungan fitur dapat beragam di seluruh perangkat Android, elemen <uses-feature> memiliki peran penting dalam memungkinkan aplikasi menjelaskan fitur variabel perangkat yang digunakannya.

Rangkaian fitur tersedia yang dideklarasikan aplikasi Anda sesuai dengan rangkaian konstanta fitur yang disediakan oleh PackageManager Android. Konstanta fitur dicantumkan dalam bagian Referensi fitur di dokumen ini.

Anda harus menentukan setiap fitur dalam elemen <uses-feature> terpisah, sehingga jika aplikasi memerlukan beberapa fitur, aplikasi akan mendeklarasikan beberapa elemen <uses-feature>. Misalnya, aplikasi yang memerlukan fitur Bluetooth dan kamera di perangkat mendeklarasikan dua elemen ini:

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

Secara umum, selalu deklarasikan elemen <uses-feature> untuk semua fitur yang diperlukan aplikasi Anda.

Elemen <uses-feature> dideklarasikan hanya sebagai informasi, yang berarti bahwa sistem Android sendiri tidak memeriksa dukungan fitur yang cocok pada perangkat sebelum menginstal aplikasi.

Namun, layanan lainnya, seperti Google Play, dan aplikasi mungkin memeriksa deklarasi <uses-feature> aplikasi Anda sebagai bagian dari penanganan atau interaksi dengan aplikasi. Karena itu, Anda harus mendeklarasikan semua fitur yang digunakan aplikasi.

Untuk beberapa fitur, mungkin ada atribut khusus yang memungkinkan Anda menentukan versi fitur, seperti versi Open GL yang digunakan (dideklarasikan dengan glEsVersion). Fitur lain yang mungkin ada atau tidak ada untuk perangkat, seperti kamera, dideklarasikan menggunakan atribut name.

Meskipun elemen <uses-feature> hanya diaktifkan untuk perangkat yang menjalankan API Level 4 atau yang lebih tinggi, sertakan elemen ini untuk semua aplikasi, bahkan jika minSdkVersion adalah 3 atau lebih rendah. Perangkat yang menjalankan versi platform lama akan mengabaikan elemen tersebut.

Catatan: Ketika mendeklarasikan fitur, ingat bahwa Anda juga harus meminta izin yang sesuai. Misalnya, Anda perlu meminta izin CAMERA sebelum aplikasi Anda dapat mengakses camera API. Meminta izin akan memberi aplikasi Anda akses ke hardware dan software yang tepat. Mendeklarasikan fitur yang digunakan oleh aplikasi akan membantu memastikan kompatibilitas perangkat yang tepat.

atribut:
android:name
Menetapkan fitur hardware dan software tunggal yang digunakan oleh aplikasi sebagai string deskriptor. Nilai atribut yang valid tercantum dalam bagian Fitur hardware dan Fitur software. Nilai atribut ini peka huruf besar.
android:required
Nilai boolean yang menunjukkan bahwa aplikasi memerlukan fitur yang ditetapkan di android:name.
  • Mendeklarasikan android:required="true" untuk sebuah fitur menunjukkan bahwa aplikasi tidak dapat berfungsi, atau tidak dirancang untuk berfungsi, jika fitur yang ditentukan tidak ada di perangkat.
  • Mendeklarasikan android:required="false" untuk sebuah fitur menunjukkan bahwa aplikasi menggunakan fitur tersebut jika ada pada perangkat, tetapi aplikasi dirancang untuk berfungsi tanpa fitur tertentu jika diperlukan.

Nilai default untuk android:required adalah "true".

android:glEsVersion
Versi OpenGL ES yang diperlukan oleh aplikasi. 16 bit yang lebih tinggi mewakili bilangan utama dan 16 bit yang lebih rendah menunjukkan bilangan minor. Misalnya, untuk menentukan OpenGL ES versi 2.0, Anda menyetel nilai sebagai "0x00020000", atau untuk menentukan OpenGL ES 3.2, Anda menyetel nilai sebagai "0x00030002".

Aplikasi menentukan maksimal satu atribut android:glEsVersion dalam manifesnya. Jika aplikasi menentukan lebih dari satu, android:glEsVersion dengan nilai numerik tertinggi yang akan digunakan dan nilai-nilai lain diabaikan.

Jika aplikasi tidak menentukan atribut android:glEsVersion, aplikasi dianggap hanya memerlukan OpenGL ES 1.0, yang didukung oleh semua perangkat Android.

Aplikasi dapat berasumsi bahwa jika platform mendukung versi OpenGL ES yang diberikan, aplikasi juga mendukung semua versi OpenGL ES yang lebih rendah secara numerik. Oleh karena itu, untuk aplikasi yang memerlukan OpenGL ES 1.0 dan OpenGL ES 2.0, tentukan bahwa aplikasi memerlukan OpenGL ES 2.0.

Untuk aplikasi yang dapat bekerja dengan beberapa versi OpenGL ES, hanya tentukan versi OpenGL ES terendah secara numerik yang diperlukannya. Saat runtime, aplikasi dapat memeriksa apakah level OpenGL ES yang lebih tinggi tersedia.)

Untuk informasi penggunaan OpenGL ES lebih lanjut, termasuk cara memeriksa versi OpenGL ES yang didukung saat runtime, lihat Panduan OpenGL ES API.

diperkenalkan di:
API Level 4
lihat juga:

Pemfilteran berbasis-fitur dan Google Play

Google Play memfilter aplikasi yang terlihat oleh pengguna, sehingga pengguna hanya dapat melihat dan mendownload aplikasi yang kompatibel dengan perangkat mereka. Salah satu cara memfilter aplikasi adalah dengan kompatibilitas fitur.

Untuk menentukan kompatibilitas fitur aplikasi dengan perangkat pengguna tertentu, Google Play membandingkan:

  • Fitur yang diperlukan oleh aplikasi, seperti yang dideklarasikan dalam elemen <uses-feature> dalam manifes aplikasi.
  • Fitur yang tersedia di perangkat, dalam hardware atau software, seperti yang dilaporkan menggunakan properti sistem hanya-baca.

Untuk membandingkan fitur secara akurat, Android Package Manager menyediakan rangkaian konstanta fitur bersama yang digunakan aplikasi dan perangkat untuk mendeklarasikan persyaratan dan dukungan fitur. Konstanta fitur yang tersedia dicantumkan di bagian Referensi fitur dalam dokumen ini dan di dokumentasi class untuk PackageManager.

Ketika pengguna meluncurkan Google Play, aplikasi akan melakukan kueri pengelola paket untuk daftar fitur yang tersedia pada perangkat dengan memanggil getSystemAvailableFeatures(). Aplikasi Store kemudian memberikan daftar fitur ke Google Play saat membuat sesi untuk pengguna.

Setiap kali Anda mengupload aplikasi ke Konsol Google Play, Google Play akan memindai file manifes aplikasi. Google Play mencari elemen <uses-feature> dan mengevaluasinya dalam kombinasi dengan elemen lain, dalam beberapa kasus, seperti elemen <uses-sdk> dan <uses-permission>. Setelah membuat rangkaian fitur yang diperlukan aplikasi, Google Play menyimpan daftar tersebut secara internal sebagai metadata yang terkait dengan APK aplikasi dan versi aplikasi.

Ketika pengguna menelusuri atau menjelajahi aplikasi menggunakan aplikasi Google Play, layanan akan membandingkan fitur yang diperlukan oleh setiap aplikasi dengan fitur yang tersedia pada perangkat pengguna. Jika semua fitur yang diperlukan aplikasi terdapat pada perangkat, Google Play akan mengizinkan pengguna melihat aplikasi dan mendownloadnya.

Jika fitur yang diperlukan tidak didukung oleh perangkat, Google Play memfilter aplikasi sehingga tidak terlihat oleh pengguna atau tersedia untuk didownload.

Karena fitur yang Anda deklarasikan dalam elemen <uses-feature> secara langsung memengaruhi cara Google Play memfilter aplikasi Anda, penting untuk memahami cara Google Play mengevaluasi manifes aplikasi dan menentukan rangkaian fitur yang diperlukan. Bagian berikut memberikan informasi selengkapnya.

Pemfilteran berdasarkan fitur yang dideklarasikan secara eksplisit

Fitur yang dideklarasikan secara eksplisit adalah fitur yang dideklarasikan aplikasi Anda dalam elemen <uses-feature>. Deklarasi fitur dapat menyertakan atribut android:required=["true" | "false"] jika Anda melakukan kompilasi terhadap API level 5 atau yang lebih tinggi.

Hal ini memungkinkan Anda menentukan apakah aplikasi memerlukan fitur tersebut dan tidak dapat berfungsi dengan baik tanpanya ("true"), atau menggunakan fitur tersebut jika tersedia, tetapi dirancang untuk berjalan tanpanya ("false").

Google Play menangani fitur yang dideklarasikan secara eksplisit dengan cara ini:

  • Jika fitur dideklarasikan secara eksplisit sebagai diperlukan, seperti ditunjukkan dalam contoh berikut, Google Play akan menambahkan fitur ke dalam daftar fitur yang diperlukan untuk aplikasi. Google Play kemudian memfilter aplikasi dari pengguna pada perangkat yang tidak menyediakan fitur tersebut.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • Jika fitur dideklarasikan secara eksplisit sebagai tidak diperlukan, seperti ditunjukkan dalam contoh berikut, Google Play tidak akan menambahkan fitur tersebut ke daftar fitur yang diperlukan. Karena alasan tersebut, fitur tidak diperlukan yang dideklarasikan secara eksplisit tidak pernah dipertimbangkan saat memfilter aplikasi. Meskipun perangkat tidak menyediakan fitur yang dideklarasikan, Google Play tetap akan mempertimbangkan aplikasi yang kompatibel dengan perangkat dan menampilkannya kepada pengguna, kecuali jika aturan pemfilteran lain berlaku.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • Jika fitur secara eksplisit dideklarasikan, tetapi tanpa atribut android:required, Google Play akan berasumsi bahwa fitur tersebut diperlukan dan menyiapkan pemfilteran di dalamnya.

Secara umum, jika aplikasi Anda dirancang untuk berjalan pada Android 1.6 dan versi yang lebih rendah, atribut android:required tidak akan tersedia di API, dan Google Play berasumsi bahwa semua deklarasi <uses-feature> diperlukan.

Catatan: Dengan mendeklarasikan fitur secara eksplisit dan menyertakan atribut android:required="false", Anda dapat secara efektif menonaktifkan semua pemfilteran di Google Play untuk fitur tertentu.

Filter berdasarkan fitur implisit

Fitur implisit adalah fitur yang diperlukan aplikasi untuk berfungsi dengan baik, tetapi tidak dideklarasikan dalam elemen <uses-feature> di file manifes. Singkatnya, sebaiknya setiap aplikasi selalu mendeklarasikan semua fitur yang digunakan atau diperlukan, dan tidak adanya deklarasi untuk fitur yang digunakan oleh aplikasi dapat dianggap sebagai error.

Namun, sebagai perlindungan bagi pengguna dan developer, Google Play mencari fitur implisit dalam setiap aplikasi dan menyiapkan filter untuk fitur-fitur tersebut, seperti yang dilakukan untuk fitur yang dideklarasikan secara eksplisit.

Aplikasi mungkin memerlukan suatu fitur namun tidak mendeklarasikannya karena alasan seperti berikut:

  • Aplikasi dikompilasi dengan library Android versi lama (Android 1.5 atau sebelumnya), yang mana elemen <uses-feature> tidak tersedia.
  • Developer salah berasumsi bahwa fitur ada di semua perangkat dan deklarasi tidak diperlukan.
  • Developer menghilangkan deklarasi fitur secara tidak sengaja.
  • Developer mendeklarasikan fitur secara eksplisit, tetapi deklarasi tersebut tidak valid. Misalnya, kesalahan ejaan dalam nama elemen <uses-feature> atau nilai string yang tidak diakui untuk atribut android:name akan membatalkan deklarasi fitur.

Untuk menjelaskan hal tersebut, Google Play mencoba untuk menelusuri persyaratan fitur tersirat suatu aplikasi dengan memeriksa elemen lain yang dideklarasikan pada file manifes, khususnya elemen <uses-permission>.

Jika aplikasi meminta izin terkait hardware, Google Play akan menganggap aplikasi tersebut menggunakan fitur hardware pokok, sehingga memerlukan fitur tersebut, meskipun mungkin tidak ada deklarasi <uses-feature> terkait. Untuk izin semacam ini, Google Play menambahkan fitur hardware pokok ke metadata yang disimpannya untuk aplikasi dan menyiapkan filter untuk fitur tersebut.

Misalnya, jika aplikasi meminta izin CAMERA, Google Play menganggap aplikasi tersebut memerlukan kamera belakang (menghadap dunia) meskipun aplikasi tidak mendeklarasikan elemen <uses-feature> untuk android.hardware.camera. Akibatnya, Google Play akan memfilter perangkat yang tidak memiliki kamera belakang.

Jika Anda tidak ingin Google Play memfilter berdasarkan fitur implisit tertentu, deklarasikan secara eksplisit fitur dalam elemen <uses-feature> dan sertakan atribut android:required="false". Misalnya, untuk menonaktifkan pemfilteran implisit oleh izin CAMERA, deklarasikan fitur berikut:

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

Perhatian: Izin yang Anda minta dalam elemen <uses-permission> dapat langsung memengaruhi cara Google Play memfilter aplikasi Anda. Bagian Izin yang menyiratkan persyaratan fitur berisi daftar rangkaian lengkap izin yang menyiratkan persyaratan fitur sehingga memicu pemfilteran.

Penanganan khusus untuk fitur Bluetooth

Google Play menerapkan aturan yang sedikit berbeda dari yang dijelaskan dalam contoh sebelumnya ketika menentukan pemfilteran untuk Bluetooth.

Jika aplikasi mendeklarasikan izin Bluetooth dalam elemen <uses-permission>, tapi tidak secara eksplisit mendeklarasikan fitur Bluetooth dalam elemen <uses-feature>, Google Play akan memeriksa versi platform Android, tempat aplikasi ini dirancang untuk dijalankan, sebagaimana diatur dalam elemen <uses-sdk>.

Seperti ditunjukkan dalam tabel berikut, Google Play mengaktifkan pemfilteran untuk fitur Bluetooth hanya jika aplikasi mendeklarasikan platform terendah atau platform yang ditargetkan seperti Android 2.0 (API level 5) atau yang lebih tinggi. Namun, perhatikan bahwa Google Play menerapkan aturan normal pemfilteran jika aplikasi secara eksplisit mendeklarasikan fitur Bluetooth dalam elemen <uses-feature>.

Tabel 1. Cara Google Play menentukan persyaratan fitur Bluetooth untuk aplikasi yang meminta izin Bluetooth tetapi tidak mendeklarasikan fitur Bluetooth dalam elemen <uses-feature>.

Jika minSdkVersion adalah ... dan targetSdkVersion adalah Hasil
<=4, atau <uses-sdk> tidak dideklarasikan <=4 Google Play tidak memfilter aplikasi dari setiap perangkat berdasarkan dukungan yang dilaporkannya untuk fitur android.hardware.bluetooth.
<=4 >=5 Google Play memfilter aplikasi dari setiap perangkat yang tidak mendukung fitur android.hardware.bluetooth (termasuk rilis sebelumnya).
>=5 >=5

Contoh berikut menggambarkan efek pemfilteran yang berbeda berdasarkan cara Google Play menangani fitur Bluetooth.

Pada contoh pertama, aplikasi yang didesain untuk berjalan pada API level yang lebih lama mendeklarasikan izin Bluetooth, tetapi tidak mendeklarasikan fitur Bluetooth dalam elemen <uses-feature>.
Hasil: Google Play tidak memfilter aplikasi dari perangkat apa pun.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
Pada contoh kedua, aplikasi yang sama juga mendeklarasikan API level target "5".
Hasil: Google Play sekarang beranggapan bahwa fitur tersebut diperlukan dan memfilter aplikasi dari semua perangkat yang tidak melaporkan dukungan Bluetooth, termasuk perangkat yang menjalankan versi lama platform ini.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
Berikutnya, aplikasi yang sama sekarang secara khusus mendeklarasikan fitur Bluetooth.
Hasil: Sama dengan contoh sebelumnya: pemfilteran diterapkan.
<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>
Terakhir, dalam kasus berikut, aplikasi yang sama menambahkan atribut android:required="false".
Hasil: Google Play menonaktifkan pemfilteran berdasarkan dukungan fitur Bluetooth untuk semua perangkat.
<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>

Menguji fitur yang dibutuhkan oleh aplikasi Anda

Anda dapat menggunakan alat aapt, termasuk dalam Android SDK, untuk menentukan cara Google Play memfilter aplikasi Anda berdasarkan fitur dan izin yang dideklarasikannya. Untuk melakukannya, jalankan aapt dengan perintah dump badging. Hal ini menyebabkan aapt menguraikan manifes aplikasi Anda dan menerapkan aturan yang sama dengan yang digunakan Google Play untuk menentukan fitur yang diperlukan aplikasi.

Untuk menggunakan alat ini, ikuti langkah-langkah berikut:

  1. Build dan ekspor aplikasi sebagai APK yang tidak ditandatangani. Jika Anda mengembangkan aplikasi pada Android Studio, build aplikasi Anda dengan Gradle, sebagai berikut:
    1. Buka project dan pilih Run > Edit Configurations.
    2. Pilih tanda plus di dekat sudut kiri atas jendela Run/Debug Configurations.
    3. Pilih Gradle.
    4. Ketikkan "Unsigned APK" di bagian Name.
    5. Pilih modul Anda dari bagian Gradle project.
    6. Masukkan "assemble" di Tasks.
    7. Pilih OK untuk menyelesaikan konfigurasi baru.
    8. Pastikan konfigurasi Unsigned APK dipilih pada toolbar, lalu pilih Run > Run 'Unsigned APK'.
    Anda dapat menemukan APK yang tidak ditandatangani dalam direktori <ProjectName>/app/build/outputs/apk/.
  2. Temukan alat aapt, jika belum ada dalam PATH Anda. Jika menggunakan SDK Tools r8 atau yang lebih tinggi, Anda dapat menemukan aapt dalam direktori <SDK>/build-tools/<tools version number>.

    Catatan: Anda harus menggunakan versi aapt yang disediakan untuk komponen Build-Tools terbaru yang tersedia. Jika Anda belum memiliki komponen Build-Tools terbaru, download menggunakan Android SDK Manager.

  3. Jalankan aapt menggunakan sintaksis ini:
$ aapt dump badging <path_to_exported_.apk>

Berikut ini contoh output perintah untuk contoh Bluetooth kedua yang ditampilkan sebelumnya:

$ ./aapt 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'

Referensi fitur

Bagian berikut ini menyediakan informasi referensi tentang fitur hardware, fitur software, dan sekumpulan izin yang menunjukkan persyaratan fitur tertentu.

Fitur hardware

Bagian ini menampilkan fitur hardware yang didukung oleh rilis platform yang paling baru. Untuk menunjukkan bahwa aplikasi Anda menggunakan atau memerlukan fitur hardware, deklarasikan nilai yang sesuai, diawali dengan "android.hardware", dalam atribut android:name. Setiap kali Anda mendeklarasikan fitur hardware, gunakan elemen <uses-feature> terpisah.

Fitur hardware audio

android.hardware.audio.low_latency
Aplikasi ini menggunakan pipeline audio latensi rendah dari perangkat, yang mengurangi lag dan menunda saat memproses input atau output suara.
android.hardware.audio.output
Aplikasi ini mentransmisikan suara menggunakan speaker, colokan audio, kemampuan streaming Bluetooth atau mekanisme yang sama dari perangkat.
android.hardware.audio.pro
Aplikasi ini menggunakan fungsionalitas audio canggih dan kemampuan performa dari perangkat.
android.hardware.microphone
Aplikasi merekam audio menggunakan mikrofon perangkat.

Fitur hardware Bluetooth

android.hardware.bluetooth
Aplikasi menggunakan fitur Bluetooth perangkat, biasanya untuk berkomunikasi dengan perangkat Bluetooth-aktif lainnya.
android.hardware.bluetooth_le
Aplikasi menggunakan fitur radio Bluetooth Hemat Energi perangkat.

Fitur hardware kamera

Catatan: Untuk mencegah pemfilteran aplikasi yang tidak perlu oleh Google Play, tambahkan android:required="false" ke fitur kamera apa pun yang dapat berfungsi tanpa aplikasi Anda. Jika tidak, Google Play akan menganggap fitur tersebut diperlukan dan mencegah perangkat yang tidak mendukung fitur tersebut mengakses aplikasi Anda.

Dukungan perangkat layar besar

Beberapa perangkat layar besar hanya mendukung sebagian fitur kamera. Chromebook biasanya tidak memiliki kamera belakang (menghadap dunia), fokus otomatis, atau flash. Namun, Chromebook memiliki kamera depan (menghadap pengguna) dan sering terhubung ke kamera eksternal.

Untuk memberikan dukungan kamera dasar dan menyediakan aplikasi ke sebanyak mungkin perangkat, tambahkan setelan fitur kamera berikut ke manifes aplikasi Anda:

<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" />

Sesuaikan setelan fitur untuk mendukung kasus penggunaan aplikasi Anda. Namun, agar aplikasi Anda tersedia untuk sebagian besar perangkat, selalu sertakan atribut required untuk menentukan secara eksplisit apakah suatu fitur harus dimiliki.

Daftar fitur
android.hardware.camera.any

Aplikasi menggunakan salah satu kamera perangkat atau kamera eksternal yang terhubung ke perangkat. Gunakan fitur ini sebagai ganti android.hardware.camera atau android.hardware.camera.front jika aplikasi Anda tidak memerlukan kamera yang menghadap ke belakang (dunia) atau menghadap ke depan (pengguna), secara berurutan.

Izin CAMERA menyiratkan bahwa aplikasi Anda juga menggunakan android.hardware.camera. Kamera belakang adalah fitur yang diperlukan kecuali jika android.hardware.camera dideklarasikan dengan android:required="false".

android.hardware.camera

Aplikasi menggunakan kamera belakang (menghadap dunia) perangkat.

Perhatian: Perangkat seperti Chromebook yang hanya memiliki kamera depan (menghadap pengguna) tidak mendukung fitur ini. Gunakan android.hardware.camera.any jika aplikasi Anda dapat menggunakan kamera apa pun, ke mana pun arah hadap kamera.

Catatan: Izin CAMERA menyiratkan bahwa kamera belakang merupakan fitur yang diperlukan. Untuk membantu memastikan pemfilteran yang tepat di Google Play saat manifes aplikasi Anda menyertakan izin CAMERA, tentukan secara eksplisit bahwa aplikasi Anda menggunakan fitur camera dan tunjukkan apakah fitur tersebut diperlukan, seperti:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

Aplikasi menggunakan kamera depan (menghadap pengguna) perangkat.

Izin CAMERA menyiratkan bahwa aplikasi Anda juga menggunakan android.hardware.camera. Kamera belakang adalah fitur yang diperlukan kecuali jika android.hardware.camera dideklarasikan dengan android:required="false".

Perhatian: Jika aplikasi Anda menggunakan android.hardware.camera.front tetapi tidak secara eksplisit mendeklarasikan android.hardware.camera dengan android.required="false", perangkat yang tidak memiliki kamera belakang (seperti Chromebook) difilter oleh Google Play. Jika aplikasi Anda mendukung perangkat dengan kamera depan saja, deklarasikan android.hardware.camera dengan android.required="false" untuk mencegah pemfilteran yang tidak perlu.

android.hardware.camera.external

Aplikasi berkomunikasi dengan kamera eksternal yang dihubungkan pengguna ke perangkat. Fitur ini tidak menjamin bahwa kamera eksternal dapat digunakan oleh aplikasi Anda.

Izin CAMERA menyiratkan bahwa aplikasi Anda juga menggunakan android.hardware.camera. Kamera belakang adalah fitur yang diperlukan kecuali jika android.hardware.camera dideklarasikan dengan android:required="false".

android.hardware.camera.autofocus

Aplikasi menggunakan fitur fokus otomatis yang didukung oleh kamera perangkat.

Catatan: Izin CAMERA menyiratkan bahwa fokus otomatis adalah fitur yang diperlukan. Untuk membantu memastikan pemfilteran yang tepat di Google Play saat manifes aplikasi Anda menyertakan izin CAMERA, tentukan secara eksplisit bahwa aplikasi Anda menggunakan fitur fokus otomatis dan tunjukkan apakah fitur tersebut diperlukan atau tidak, seperti:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />.

android.hardware.camera.flash

Aplikasi menggunakan fitur flash yang didukung oleh kamera perangkat.

android.hardware.camera.capability.manual_post_processing

Aplikasi menggunakan fitur MANUAL_POST_PROCESSING yang didukung oleh kamera perangkat.

Fitur ini memungkinkan aplikasi untuk mengganti fungsi white balance otomatis pada kamera. Gunakan android.colorCorrection.transform, android.colorCorrection.gains, dan android.colorCorrection.mode dari TRANSFORM_MATRIX.

android.hardware.camera.capability.manual_sensor

Aplikasi menggunakan fitur MANUAL_SENSOR yang didukung oleh kamera perangkat.

Fitur ini menyiratkan dukungan penguncian eksposur otomatis (android.control.aeLock), yang memungkinkan waktu dan sensitivitas eksposur kamera selalu tetap pada nilai tertentu.

android.hardware.camera.capability.raw

Aplikasi menggunakan fitur RAW yang didukung oleh kamera perangkat.

Fitur ini menyiratkan bahwa perangkat dapat menyimpan file DNG (raw). Kamera perangkat menyediakan metadata terkait DNG yang diperlukan untuk aplikasi Anda guna memproses gambar raw secara langsung.

android.hardware.camera.level.full
Aplikasi menggunakan dukungan pengambilan gambar level FULL yang disediakan oleh setidaknya salah satu kamera perangkat. Dukungan FULL mencakup kemampuan burst-capture, kontrol per frame, dan kontrol pascapemrosesan manual. Lihat INFO_SUPPORTED_HARDWARE_LEVEL_FULL.

Fitur hardware UI perangkat

android.hardware.type.automotive

Aplikasi ini dirancang untuk menampilkan UI pada set layar di dalam kendaraan. Pengguna berinteraksi dengan aplikasi menggunakan tombol, sentuh, pengontrol rotasi, dan antarmuka seperti mouse. Layar pada kendaraan biasanya berada di konsol tengah atau kluster instrumen kendaraan. Layar ini biasanya memiliki ukuran dan resolusi yang terbatas.

Catatan: Karena pengguna sedang mengemudi saat menggunakan jenis UI aplikasi ini, aplikasi harus meminimalkan gangguan bagi pengemudi.

android.hardware.type.television

(Tidak digunakan lagi; gunakan android.software.leanback sebagai gantinya.)

Aplikasi ini dirancang untuk menampilkan UI pada televisi. Fitur ini menentukan "televisi" sebagai pengalaman televisi yang biasa di ruang tamu: aplikasi yang menampilkan layar TV, pengguna yang duduk jauh dari layar, dan bentuk input yang banyak dipakai adalah sesuatu seperti D-pad, bukan mouse, pointer, atau perangkat sentuh.

android.hardware.type.watch
Aplikasi ini dirancang untuk menampilkan UI pada jam. Jam dipakai pada badan, seperti di pergelangan tangan. Pengguna berada sangat dekat dengan perangkat saat berinteraksi dengannya.

Fitur hardware sidik jari

android.hardware.fingerprint
Aplikasi ini membaca sidik jari menggunakan hardware biometrik perangkat.

Fitur hardware gamepad

android.hardware.gamepad
Aplikasi ini menangkap input pengontrol game, baik dari perangkat itu sendiri atau gamepad yang terhubung.

Fitur hardware inframerah

android.hardware.consumerir
Aplikasi ini menggunakan kemampuan inframerah (IR) perangkat, biasanya untuk berkomunikasi dengan perangkat IR pengguna yang lain.

Fitur hardware lokasi

android.hardware.location
Aplikasi ini menggunakan satu atau beberapa fitur pada perangkat untuk menentukan lokasi, seperti lokasi GPS, lokasi jaringan, atau lokasi seluler.
android.hardware.location.gps

Aplikasi ini menggunakan koordinat lokasi akurat yang diperoleh dari penerima Sistem Pemosisi Global (GPS) pada perangkat.

Dengan menggunakan fitur ini, aplikasi menegaskan bahwa aplikasi juga menggunakan fitur android.hardware.location, kecuali jika fitur induk ini dideklarasikan dengan atribut android:required="false".

android.hardware.location.network

Aplikasi menggunakan koordinat lokasi sementara yang diperoleh dari sistem geolokasi berbasis jaringan yang didukung pada perangkat.

Dengan menggunakan fitur ini, aplikasi menegaskan bahwa aplikasi juga menggunakan fitur android.hardware.location, kecuali jika fitur induk ini dideklarasikan dengan atribut android:required="false".

Fitur hardware NFC

android.hardware.nfc
Aplikasi menggunakan fitur radio Komunikasi Nirkabel Jarak Dekat (NFC) perangkat.
android.hardware.nfc.hce

Aplikasi menggunakan emulasi kartu NFC yang di-host pada perangkat.

Fitur hardware OpenGL ES

android.hardware.opengles.aep
Aplikasi menggunakan OpenGL ES Android Extension Pack yang diinstal pada perangkat.

Fitur hardware Sensor

android.hardware.sensor.accelerometer
Aplikasi ini menggunakan pembacaan gerak akselerometer perangkat untuk mendeteksi orientasi perangkat saat ini. Misalnya, aplikasi mungkin menggunakan pembacaan akselerometer untuk menentukan kapan beralih antara orientasi potret dan lanskap.
android.hardware.sensor.ambient_temperature
Aplikasi ini menggunakan sensor suhu ambien (lingkungan) sekitar perangkat. Misalnya, aplikasi cuaca dapat melaporkan suhu ruangan atau suhu di luar ruangan.
android.hardware.sensor.barometer
Aplikasi menggunakan barometer perangkat. Misalnya, aplikasi cuaca mungkin melaporkan tekanan udara.
android.hardware.sensor.compass
Aplikasi menggunakan magnetometer (kompas) perangkat. Misalnya, aplikasi navigasi mungkin menunjukkan arah hadap pengguna saat ini.
android.hardware.sensor.gyroscope
Aplikasi menggunakan giroskop perangkat untuk mendeteksi rotasi dan putaran, membuat sistem orientasi enam sumbu. Dengan menggunakan sensor ini, aplikasi dapat mendeteksi secara lebih halus apakah perlu beralih antara orientasi potret dan lanskap.
android.hardware.sensor.hifi_sensors
Aplikasi menggunakan sensor high fidelity (Hi-Fi) perangkat. Misalnya, suatu aplikasi game mungkin mendeteksi gerakan presisi tinggi dari pengguna.
android.hardware.sensor.heartrate
Aplikasi menggunakan pemantau detak jantung dari perangkat. Misalnya, aplikasi kebugaran mungkin melaporkan kecenderungan detak jantung pengguna dari waktu ke waktu.
android.hardware.sensor.heartrate.ecg
Aplikasi menggunakan sensor detak jantung elektrokardiogram (ECG) di perangkat. Misalnya, aplikasi kebugaran mungkin melaporkan informasi lebih mendetail tentang detak jantung pengguna.
android.hardware.sensor.light
Aplikasi menggunakan sensor cahaya perangkat. Misalnya, aplikasi mungkin menampilkan satu dari dua skema warna berdasarkan kondisi pencahayaan di sekitarnya.
android.hardware.sensor.proximity
Aplikasi menggunakan sensor kedekatan perangkat. Misalnya, aplikasi telepon mungkin mematikan layar perangkat saat aplikasi mendeteksi bahwa pengguna sedang memegang perangkat dekat ke badan mereka.
android.hardware.sensor.relative_humidity
Aplikasi menggunakan sensor kelembapan relatif perangkat. Misalnya, aplikasi cuaca mungkin menggunakan kelembapan untuk menghitung dan melaporkan titik embun saat ini.
android.hardware.sensor.stepcounter
Aplikasi menggunakan penghitung langkah perangkat. Misalnya, aplikasi kebugaran mungkin melaporkan jumlah langkah yang diperlukan pengguna untuk mencapai sasaran jumlah langkah harian mereka.
android.hardware.sensor.stepdetector
Aplikasi menggunakan detektor langkah perangkat. Misalnya, aplikasi kebugaran mungkin menggunakan interval waktu antara langkah untuk menyimpulkan jenis olahraga yang dilakukan pengguna.

Fitur hardware layar

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

Aplikasi mengharuskan perangkat untuk menggunakan orientasi potret atau lanskap. Jika aplikasi mendukung kedua orientasi, Anda tidak perlu mendeklarasikan tiap-tiap fitur.

Misalnya, jika aplikasi Anda memerlukan orientasi potret, deklarasikan fitur berikut sehingga hanya perangkat yang mendukung orientasi potret (selalu atau dengan pilihan pengguna) yang dapat menjalankan aplikasi Anda:

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

Kedua orientasi dianggap tidak diperlukan secara default, sehingga aplikasi dapat diinstal di perangkat yang mendukung salah satu atau kedua orientasi. Namun, jika ada aktivitas yang meminta agar aplikasi berjalan dalam orientasi tertentu, dengan menggunakan atribut android:screenOrientation, deklarasi ini menegaskan bahwa aplikasi Anda memerlukan orientasi tersebut.

Misalnya, jika Anda mendeklarasikan android:screenOrientation dengan "landscape", "reverseLandscape", atau "sensorLandscape", aplikasi Anda hanya akan tersedia pada perangkat yang mendukung orientasi lanskap.

Sebagai praktik terbaik, deklarasikan persyaratan Anda untuk orientasi ini menggunakan elemen <uses-feature>. Jika Anda mendeklarasikan orientasi untuk aktivitas Anda menggunakan android:screenOrientation but don't actually require it, you can disable the requirement by declaring the orientation with a <uses-feature> element and include android:required="false".

For backward compatibility, any device running Android 3.1 (API level 12) or lower supports both landscape and portrait orientations.

Telephony hardware features

android.hardware.telephony
The app uses the device's telephony features, such as telephony radio with data communication services.
android.hardware.telephony.cdma

The app uses the Code Division Multiple Access (CDMA) telephony radio system.

By using this feature, an app implies that it also uses the android.hardware.telephony feature, unless this parent feature is declared with android:required="false".

android.hardware.telephony.gsm

The app uses the Global System for Mobile Communications (GSM) telephony radio system.

By using this feature, an app implies that it also uses the android.hardware.telephony feature, unless this parent feature is declared with android:required="false".

Touchscreen hardware features

android.hardware.faketouch

The app uses basic touch interaction events, such as tapping and dragging.

When declared as required, this feature indicates that the app is compatible with a device only if that device has an emulated "fake touch" touchscreen or has an actual touchscreen.

A device that offers a fake touch interface provides a user input system that emulates a subset of a touchscreen's capabilities. For example, a mouse or remote control might drive an on-screen cursor.

If your app requires basic point and click interaction and doesn't work with only a D-pad controller, declare this feature. Because this is the minimum level of touch interaction, you can also use an app that declares this feature on devices that offer more complex touch interfaces.

Apps require the android.hardware.faketouch feature by default. If you want your app to be limited to devices that only have a touchscreen, you must explicitly declare that touchscreen is required as follows:

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

All apps that don't explicitly require android.hardware.touchscreen, as shown in the following example, also work on devices with android.hardware.faketouch.

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

The app tracks two or more distinct "fingers" on a fake touch interface. This is a superset of the android.hardware.faketouch feature. When declared as required, this feature indicates that the app is compatible with a device only if that device emulates distinct tracking of two or more fingers or has an actual touchscreen.

Unlike the distinct multitouch defined by android.hardware.touchscreen.multitouch.distinct, input devices that support distinct multitouch with a fake touch interface don't support all two-finger gestures, because the input is transformed to cursor movement on the screen. That is, single-finger gestures on such a device move a cursor, two-finger swipes cause single-finger touch events to occur, and other two-finger gestures trigger the corresponding two-finger touch events.

A device that provides a two-finger touch trackpad for cursor movement can support this feature.

android.hardware.faketouch.multitouch.jazzhand

The app tracks five or more distinct "fingers" on a fake touch interface. This is a superset of the android.hardware.faketouch feature. When declared as required, this feature indicates that the app is compatible with a device only if that device emulates distinct tracking of five or more fingers or has an actual touchscreen.

Unlike the distinct multitouch defined by android.hardware.touchscreen.multitouch.jazzhand, input devices that support jazzhand multitouch with a fake touch interface don't support all five-finger gestures, because the input is transformed to cursor movement on the screen. That is, single-finger gestures on such a device move a cursor, multi-finger gestures cause single-finger touch events to occur, and other multi-finger gestures trigger the corresponding multi-finger touch events.

A device that provides a five-finger touch trackpad for cursor movement can support this feature.

android.hardware.touchscreen

The app uses the device's touchscreen capabilities for gestures that are more interactive than basic touch events, such as a fling. This is a superset of the android.hardware.faketouch feature.

By default, all apps require this feature and therefore aren't available to devices that provide only an emulated "fake touch" interface. You can make your app available on devices that provide a fake touch interface, or even on devices that provide only a D-pad controller, by explicitly declaring that a touchscreen is not required using android.hardware.touchscreen with android:required="false". Add this declaration if your app uses, but doesn't require, a real touchscreen interface. All apps that don't explicitly require android.hardware.touchscreen also work on devices with android.hardware.faketouch.

If your app in fact requires a touch interface, such as to perform more advanced touch gestures like flings, then you don't need to declare any touch interface features, because they're required by default. However, it's best if you explicitly declare all features that your app uses.

If you require more complex touch interaction, such as multi-finger gestures, declare that your app uses advanced touchscreen features.

android.hardware.touchscreen.multitouch

The app uses the device's basic two-point multitouch capabilities, such as for pinch gestures, but the app doesn't need to track touches independently. This is a superset of the android.hardware.touchscreen feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen feature, unless this parent feature is declared with android:required="false".

android.hardware.touchscreen.multitouch.distinct

The app uses the device's advanced multitouch capabilities for tracking two or more points independently. This feature is a superset of the android.hardware.touchscreen.multitouch feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen.multitouch feature, unless this parent feature is declared with android:required="false".

android.hardware.touchscreen.multitouch.jazzhand

The app uses the device's advanced multitouch capabilities for tracking five or more points independently. This feature is a superset of the android.hardware.touchscreen.multitouch feature.

By using this feature, an app implies that it also uses the android.hardware.touchscreen.multitouch feature, unless this parent feature is declared with android:required="false".

USB hardware features

android.hardware.usb.accessory
The app behaves as a USB device and connects to USB hosts.
android.hardware.usb.host
The app uses the USB accessories that are connected to the device. The device serves as the USB host.

Vulkan hardware features

android.hardware.vulkan.compute
The app uses Vulkan compute features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional compute features the app requires beyond the Vulkan 1.0 requirements. For example, if your app requires Vulkan compute level 0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
For more details about the feature version, see FEATURE_VULKAN_HARDWARE_COMPUTE.
android.hardware.vulkan.level
The app uses Vulkan level features. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates which level of optional hardware features the app requires. For example, if your app requires Vulkan hardware level 0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
For more information about the feature version, see FEATURE_VULKAN_HARDWARE_LEVEL.
android.hardware.vulkan.version
The app uses Vulkan. This feature indicates that the app requires the hardware-accelerated Vulkan implementation. The feature version indicates the minimum version of Vulkan API support the app requires. For example, if your app requires Vulkan 1.0 support, declare the following feature:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
For more details about the feature version, see FEATURE_VULKAN_HARDWARE_VERSION.

Wi-Fi hardware features

android.hardware.wifi
The app uses 802.11 networking (Wi-Fi) features on the device.
android.hardware.wifi.direct
The app uses the Wi-Fi Direct networking features on the device.

Software features

This section presents the software features supported by the most current platform release. To indicate that your app uses or requires a software feature, declare the corresponding value, beginning with "android.software", in an android:name attribute. Each time you declare a software feature, use a separate <uses-feature> element.

Communication software features

android.software.sip
The app uses Session Initiation Protocol (SIP) services. By using SIP, the app can support internet telephony operations, such as video conferencing and instant messaging.
android.software.sip.voip

The app uses SIP-based Voice Over Internet Protocol (VoIP) services. By using VoIP, the app can support real-time internet telephony operations, such as two-way video conferencing.

By using this feature, an app implies that it also uses the android.software.sip feature, unless this parent feature is declared with android:required="false".

android.software.webview
The app displays content from the internet.

Custom input software features

android.software.input_methods
The app uses a new input method, which the developer defines in an InputMethodService.

Device management software features

android.software.backup
The app includes logic to handle a backup and restore operation.
android.software.device_admin
The app uses device administrators to enforce a device policy.
android.software.managed_users
The app supports secondary users and managed profiles.
android.software.securely_removes_users
The app can permanently remove users and their associated data.
android.software.verified_boot
The app includes logic to handle results from the device's verified boot feature, which detects whether the device's configuration changes during a restart operation.

Media software features

android.software.midi
The app connects to musical instruments or outputs sound using the Musical Instrument Digital Interface (MIDI) protocol.
android.software.print
The app includes commands for printing documents displayed on the device.
android.software.leanback
The app is designed to run on Android TV devices.
android.software.live_tv
The app streams live television programs.

Screen interface software features

android.software.app_widgets
The app uses or provides App Widgets and is intended only for devices that include a Home screen or similar location where users can embed App Widgets.
android.software.home_screen
The app behaves as a replacement to the device's Home screen.
android.software.live_wallpaper
The app uses or provides wallpapers that include animation.

Permissions that imply feature requirements

Some hardware and software feature constants are made available to applications after the corresponding API. Because of this, some apps might use the API before they can declare that they require the API using the <uses-feature> system.

To prevent those apps from being made available unintentionally, Google Play assumes that certain hardware-related permissions indicate that the underlying hardware features are required by default. For instance, applications that use Bluetooth must request the BLUETOOTH permission in a <uses-permission> element.

For legacy apps, Google Play assumes that the permission declaration means that the underlying android.hardware.bluetooth feature is required by the application and sets up filtering based on that feature. Table 2 lists permissions that imply feature requirements equivalent to those declared in <uses-feature> elements.

<uses-feature> declarations, including any declared android:required attribute, always take precedence over features implied by the permissions in table 2. For any of these permissions, you can disable filtering based on the implied feature by explicitly declaring the feature in a <uses-feature> element with the required attribute set to false.

For example, to disable filtering based on the CAMERA permission, add the following <uses-feature> declarations to the manifest file:

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

Caution: If your app targets Android 5.0 (API level 21) or higher and uses the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to receive location updates from the network or a GPS, respectively, you must also explicitly declare that your app uses the android.hardware.location.network or android.hardware.location.gps hardware features.

Table 2. Device permissions that imply device hardware use.

Category Permission Implied feature requirement
Bluetooth BLUETOOTH android.hardware.bluetooth

See Special handling for Bluetooth feature for details.

BLUETOOTH_ADMIN android.hardware.bluetooth
Camera CAMERA android.hardware.camera
android.hardware.camera.autofocus
Location 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 (Only when target API level is 20 or lower.)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (Only when target API level is 20 or lower.)

Microphone RECORD_AUDIO android.hardware.microphone
Telephony 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