<usa-funzionalità>

Google Play utilizza gli elementi <uses-feature> dichiarati nel file manifest dell'app per filtrare l'app dai dispositivi che non soddisfano i requisiti relativi alle funzionalità hardware e software.

Specificando le funzionalità richieste dalla tua applicazione, consenti a Google Play di presentare l'applicazione solo agli utenti i cui dispositivi soddisfano i requisiti relativi alle funzionalità dell'applicazione, anziché presentare l'applicazione a tutti gli utenti.

Per informazioni importanti sul modo in cui Google Play utilizza le funzionalità come base per l'applicazione di filtri, consulta la sezione Google Play e il filtro basato sulle funzionalità.

:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
contenute in:
<manifest>
description:

Dichiara una singola funzionalità hardware o software utilizzata dall'applicazione.

Lo scopo di una dichiarazione <uses-feature> è informare qualsiasi entità esterna dell'insieme di funzionalità hardware e software da cui la tua applicazione dipende. L'elemento offre un attributo required che consente di specificare se l'applicazione richiede e non può funzionare senza la funzionalità dichiarata o preferisce avere la funzionalità ma può funzionare senza.

Poiché il supporto delle funzionalità può variare nei vari dispositivi Android, l'elemento <uses-feature> svolge un ruolo importante nel consentire a un'applicazione di descrivere le funzionalità delle variabili del dispositivo che utilizza.

L'insieme di funzionalità disponibili dichiarate dalla tua applicazione corrisponde all'insieme di costanti di funzionalità rese disponibili da PackageManager di Android. Le costanti delle funzionalità sono elencate nella sezione Riferimento alle funzionalità di questo documento.

Devi specificare ogni funzionalità in un elemento <uses-feature> separato; di conseguenza, se la tua applicazione richiede più funzionalità, dichiara più elementi <uses-feature>. Ad esempio, un'applicazione che richiede sia funzionalità Bluetooth sia funzionalità fotocamera nel dispositivo dichiara questi due elementi:

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

In generale, dichiara sempre gli elementi <uses-feature> per tutte le funzionalità richieste dalla tua applicazione.

Gli elementi <uses-feature> dichiarati sono solo informativi, il che significa che il sistema Android non verifica il supporto delle funzionalità corrispondenti sul dispositivo prima di installare un'applicazione.

Tuttavia, altri servizi, come Google Play, e le applicazioni possono controllare le dichiarazioni <uses-feature> della tua applicazione nell'ambito della gestione o dell'interazione con l'applicazione. Per questo motivo è molto importante dichiarare tutte le funzionalità utilizzate dall'applicazione.

Per alcune funzionalità, potrebbe essere presente un attributo specifico che ti consente di definire una versione della funzionalità, ad esempio la versione di Open GL utilizzata (dichiarata con glEsVersion). Altre funzionalità che esistono o non esistono per un dispositivo, ad esempio una fotocamera, vengono dichiarate utilizzando l'attributo name.

Sebbene l'elemento <uses-feature> sia attivato solo per i dispositivi che eseguono il livello API 4 o successivo, includi questi elementi per tutte le applicazioni, anche se il valore minSdkVersion è 3 o inferiore. I dispositivi che eseguono versioni precedenti della piattaforma ignorano l'elemento.

Nota: quando dichiari una funzionalità, ricorda che devi anche richiedere le autorizzazioni appropriate. Ad esempio, devi richiedere l'autorizzazione CAMERA prima che la tua applicazione possa accedere all'API Camera. La richiesta dell'autorizzazione concede alla tua applicazione l'accesso all'hardware e al software appropriato. Dichiarare le funzionalità utilizzate dalla tua applicazione aiuta a garantire un'adeguata compatibilità dei dispositivi.

:
android:name
Specifica una singola funzionalità hardware o software utilizzata dall'applicazione come stringa descrittore. I valori degli attributi validi sono elencati nelle sezioni Funzionalità hardware e Funzionalità software. I valori degli attributi sono sensibili alle maiuscole.
android:required
Valore booleano che indica se l'applicazione richiede la funzionalità specificata in android:name.
  • La dichiarazione android:required="true" per una funzionalità indica che l'applicazione non può funzionare o non è progettata per funzionare quando la funzionalità specificata non è presente sul dispositivo.
  • La dichiarazione di android:required="false" per una funzionalità indica che l'applicazione utilizza la funzionalità se presente sul dispositivo, ma che è progettata per funzionare senza la funzionalità specificata, se necessario.

Il valore predefinito per android:required è "true".

android:glEsVersion
La versione OpenGL ES richiesta dall'applicazione. I 16 bit più alti rappresentano il numero maggiore, mentre i 16 bit inferiori rappresentano il numero minore. Ad esempio, per specificare OpenGL ES versione 2.0, devi impostare il valore come "0x00020000" oppure, per specificare OpenGL ES 3.2, devi impostare il valore come "0x00030002".

Un'applicazione specifica al massimo un attributo android:glEsVersion nel file manifest. Se ne specifica più di uno, viene utilizzato il valore android:glEsVersion con il valore numericamente più alto e qualsiasi altro valore viene ignorato.

Se per un'applicazione non viene specificato alcun attributo android:glEsVersion, si presume che l'applicazione richieda solo OpenGL ES 1.0, supportato da tutti i dispositivi Android.

Un'applicazione può presupporre che, se una piattaforma supporta una determinata versione OpenGL ES, supporta anche tutte le versioni OpenGL ES con valori numerici inferiori. Pertanto, per un'applicazione che richiede OpenGL ES 1.0 e OpenGL ES 2.0, specifica che richiede OpenGL ES 2.0.

Per un'applicazione che può funzionare con diverse versioni OpenGL ES, specifica solo la versione numericamente più bassa di OpenGL ES richiesta. Può verificare in fase di runtime se è disponibile un livello superiore di OpenGL ES.

Per ulteriori informazioni sull'utilizzo di OpenGL ES, incluso come verificare la versione OpenGL ES supportata in esecuzione, consulta la guida all'API OpenGL ES.

introdotto in:
Livello API 4
vedi anche:

Google Play e filtri basati sulle funzionalità

Google Play filtra le applicazioni visibili agli utenti in modo che questi possano vedere e scaricare solo le applicazioni compatibili con il loro dispositivo. Uno dei modi in cui filtra le applicazioni è la compatibilità delle funzioni.

Per determinare la compatibilità delle funzionalità di un'applicazione con il dispositivo di un determinato utente, Google Play confronta:

  • Funzionalità richieste dall'applicazione, come dichiarato negli elementi <uses-feature> del manifest dell'applicazione.
  • Funzionalità disponibili sul dispositivo, nell'hardware o nel software, come riportato tramite le proprietà di sistema di sola lettura.

Per confrontare con precisione le funzionalità, Gestione pacchetti Android fornisce un set condiviso di costanti di funzionalità che sia le applicazioni che i dispositivi utilizzano per dichiarare requisiti e assistenza relativi alle funzionalità. Le costanti delle funzionalità disponibili sono elencate nella sezione Riferimento alle funzionalità di questo documento e nella documentazione della classe per PackageManager.

Quando l'utente avvia Google Play, l'applicazione invia al gestore del pacchetto una richiesta per l'elenco delle funzionalità disponibili sul dispositivo chiamando getSystemAvailableFeatures(). L'applicazione dello Store passa quindi l'elenco delle funzionalità a Google Play quando stabilisce la sessione per l'utente.

Ogni volta che carichi un'applicazione in Google Play Console, Google Play analizza il file manifest dell'applicazione. Cerca gli elementi <uses-feature> e li valuta in combinazione con altri elementi, in alcuni casi come gli elementi <uses-sdk> e <uses-permission>. Dopo aver stabilito il set di funzionalità richieste dell'applicazione, lo archivia internamente come metadati associati all'APK e alla versione dell'applicazione.

Quando un utente cerca o sfoglia applicazioni utilizzando l'applicazione Google Play, il servizio confronta le funzionalità richieste da ogni applicazione con quelle disponibili sul dispositivo dell'utente. Se sul dispositivo sono presenti tutte le funzionalità richieste di un'applicazione, Google Play consente all'utente di vedere l'applicazione ed eventualmente scaricarla.

Se una funzionalità richiesta non è supportata dal dispositivo, Google Play filtra l'applicazione in modo che non sia visibile all'utente o non sia disponibile per il download.

Poiché le funzionalità dichiarate negli elementi <uses-feature> influiscono direttamente sul modo in cui Google Play filtra la tua applicazione, è importante capire in che modo Google Play valuta il manifest dell'applicazione e stabilisce l'insieme di funzionalità richieste. Le seguenti sezioni forniscono ulteriori informazioni.

Filtri basati su funzionalità dichiarate esplicitamente

Una funzionalità dichiarata esplicitamente è una che l'applicazione dichiara in un elemento <uses-feature>. La dichiarazione della funzionalità può includere un attributo android:required=["true" | "false"] se stai compilando il livello API 5 o successivo.

Questo ti consente di specificare se l'applicazione richiede la funzionalità e non può funzionare correttamente senza la funzionalità ("true") o se utilizza la funzionalità, se disponibile, ma è progettata per essere eseguita senza di essa ("false").

Google Play gestisce le funzionalità dichiarate esplicitamente nel seguente modo:

  • Se una funzionalità viene dichiarata esplicitamente come obbligatoria, come mostrato nell'esempio che segue, Google Play la aggiunge all'elenco delle funzionalità richieste per l'applicazione. Quindi, filtra l'applicazione dagli utenti che utilizzano dispositivi che non forniscono questa funzionalità.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • Se una funzionalità viene dichiarata esplicitamente come non obbligatoria, come mostrato nell'esempio seguente, Google Play non la aggiunge all'elenco delle funzionalità obbligatorie. Per questo motivo, una funzionalità non obbligatoria dichiarata esplicitamente non viene mai considerata quando filtri l'applicazione. Anche se il dispositivo non fornisce la funzionalità dichiarata, Google Play considera comunque l'applicazione compatibile con il dispositivo e la mostra all'utente, a meno che non vengano applicate altre regole di filtro.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • Se una funzionalità viene dichiarata esplicitamente, ma senza un attributo android:required, Google Play presuppone che sia obbligatoria e configura i filtri per la funzionalità.

In generale, se la tua applicazione è progettata per essere eseguita su Android 1.6 e versioni precedenti, l'attributo android:required non è disponibile nell'API e Google Play presuppone che tutte le dichiarazioni <uses-feature> siano obbligatorie.

Nota: se dichiari una funzionalità in modo esplicito e includi un attributo android:required="false", puoi disattivare effettivamente tutti i filtri per la funzionalità specificata su Google Play.

Filtra in base a funzionalità implicite

Una funzionalità implicita è una funzionalità richiesta da un'applicazione per funzionare correttamente, ma che non viene dichiarata in un elemento <uses-feature> del file manifest. Per rigore, è meglio che ogni applicazione dichiari sempre tutte le funzionalità che utilizza o richiede e l'assenza di una dichiarazione per una funzionalità utilizzata da un'applicazione può essere considerata un errore.

Tuttavia, a tutela di utenti e sviluppatori, Google Play cerca funzionalità implicite in ogni applicazione e imposta filtri per queste funzionalità, come avviene per le funzionalità dichiarate esplicitamente.

Un'applicazione potrebbe richiedere una funzionalità ma non dichiararla per motivi come i seguenti:

  • L'applicazione è stata compilata su una versione precedente della libreria Android (Android 1.5 o versioni precedenti), per la quale l'elemento <uses-feature> non è disponibile.
  • Lo sviluppatore presume erroneamente che la funzionalità sia presente su tutti i dispositivi e che non è necessaria una dichiarazione.
  • Lo sviluppatore omette per errore la dichiarazione della funzionalità.
  • Lo sviluppatore dichiara esplicitamente la funzionalità, ma la dichiarazione non è valida. Ad esempio, un errore ortografico nel nome dell'elemento <uses-feature> o un valore di stringa non riconosciuto per l'attributo android:name rende la dichiarazione della funzionalità non valida.

Per tenere conto di questi casi, Google Play cerca di rilevare i requisiti relativi alle funzionalità implicite di un'applicazione esaminando gli altri elementi dichiarati nel file manifest, in particolare gli elementi <uses-permission>.

Se un'applicazione richiede autorizzazioni relative all'hardware, Google Play presuppone che l'applicazione utilizzi le funzionalità hardware sottostanti, pertanto richiede queste funzionalità, anche se non sono presenti dichiarazioni <uses-feature> corrispondenti. Per tali autorizzazioni, Google Play aggiunge le funzionalità hardware sottostanti ai metadati che memorizza per l'applicazione e imposta i filtri corrispondenti.

Ad esempio, se un'applicazione richiede l'autorizzazione CAMERA, Google Play presuppone che l'applicazione richieda una fotocamera posteriore (rivolta verso il mondo) anche se l'app non dichiara un elemento <uses-feature> per android.hardware.camera. Di conseguenza, Google Play filtra i dispositivi che non hanno una fotocamera posteriore.

Se non vuoi che Google Play filtri in base a una specifica funzionalità implicita, dichiara esplicitamente la funzionalità in un elemento <uses-feature> e includi l'attributo android:required="false". Ad esempio, per disattivare i filtri impliciti nell'autorizzazione CAMERA, dichiara le seguenti funzionalità:

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

Attenzione: le autorizzazioni richieste negli elementi <uses-permission> possono influire direttamente sul modo in cui Google Play filtra la tua applicazione. La sezione Autorizzazioni che implicano requisiti per le funzionalità elenca l'insieme completo di autorizzazioni che implicano requisiti per le funzionalità e pertanto attivano l'applicazione di filtri.

Gestione speciale della funzionalità Bluetooth

Per determinare i filtri per il Bluetooth, Google Play applica regole leggermente diverse rispetto a quelle descritte nell'esempio precedente.

Se un'applicazione dichiara un'autorizzazione Bluetooth in un elemento <uses-permission> ma non dichiara esplicitamente la funzionalità Bluetooth in un elemento <uses-feature>, Google Play controlla la versione o le versioni della piattaforma Android su cui è progettata per essere eseguita l'applicazione, come specificato nell'elemento <uses-sdk>.

Come mostrato nella tabella che segue, Google Play attiva l'applicazione di filtri per la funzionalità Bluetooth solo se l'applicazione dichiara la piattaforma più bassa o target come Android 2.0 (livello API 5) o versioni successive. Tuttavia, tieni presente che Google Play applica le normali regole per l'applicazione di filtri quando l'applicazione dichiara esplicitamente la funzionalità Bluetooth in un elemento <uses-feature>.

Tabella 1. Il modo in cui Google Play determina il requisito delle funzionalità Bluetooth per un'applicazione che richiede un'autorizzazione Bluetooth ma non dichiara la funzionalità Bluetooth in un elemento <uses-feature>.

Se minSdkVersion è ... e targetSdkVersion è Risultato
<=4 o <uses-sdk> non è stato dichiarato <=4 Google Play non filtra l'applicazione per nessun dispositivo in base al supporto segnalato per la funzionalità android.hardware.bluetooth.
<=4 >=5 Google Play filtra l'applicazione per escludere i dispositivi che non supportano la funzionalità android.hardware.bluetooth (incluse le release precedenti).
>=5 >=5

I seguenti esempi illustrano i diversi effetti di filtro in base al modo in cui Google Play gestisce la funzionalità Bluetooth.

Nel primo esempio, un'applicazione progettata per l'esecuzione su livelli API precedenti dichiara un'autorizzazione Bluetooth, ma non dichiara la funzionalità Bluetooth in un elemento <uses-feature>.
Risultato: Google Play non filtra l'applicazione da nessun dispositivo.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
Nel secondo esempio, la stessa applicazione dichiara anche un livello API target "5".
Risultato: ora Google Play presume che la funzionalità sia obbligatoria e filtra l'applicazione da tutti i dispositivi che non segnalano il supporto del Bluetooth, inclusi i dispositivi che eseguono versioni precedenti della piattaforma.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
In questo caso, la stessa applicazione ora dichiara specificamente la funzionalità Bluetooth.
Risultato: identico all'esempio precedente: viene applicato il filtro.
<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>
Infine, nel caso seguente, la stessa applicazione aggiunge un attributo android:required="false".
Risultato: Google Play disattiva i filtri in base al supporto delle funzionalità Bluetooth per tutti i dispositivi.
<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>

Testa le funzionalità richieste dalla tua applicazione

Puoi utilizzare lo strumento aapt2, incluso nell'SDK Android, per determinare in che modo Google Play filtra la tua applicazione in base alle funzionalità e alle autorizzazioni dichiarate. Per farlo, esegui aapt2 con il comando dump badging. Questo fa sì che aapt2 analizzi il manifest della tua applicazione e applichi le stesse regole utilizzate da Google Play per determinare le funzionalità richieste dall'applicazione.

Per utilizzare lo strumento, procedi nel seguente modo:

  1. Crea ed esporta la tua applicazione come APK non firmato. Se stai sviluppando in Android Studio, crea la tua applicazione con Gradle come segue:
    1. Apri il progetto e seleziona Esegui > Modifica configurazioni.
    2. Seleziona il segno più nell'angolo in alto a sinistra della finestra Esegui/debug configurazioni.
    3. Seleziona Gradle.
    4. Inserisci "APK non firmato" in Nome.
    5. Scegli il modulo dalla sezione Progetto Gradle.
    6. Inserisci "assembla" in Attività.
    7. Seleziona OK per completare la nuova configurazione.
    8. Assicurati che nella barra degli strumenti sia selezionata la configurazione di esecuzione APK non firmato, quindi seleziona Esegui > Esegui "APK non firmato".
    Puoi trovare l'APK non firmato nella directory <ProjectName>/app/build/outputs/apk/.
  2. Individua lo strumento aapt2, se non è già presente nel tuo PERCORSO. Se utilizzi SDK Tools r8 o versioni successive, puoi trovare aapt2 nella directory <SDK>/build-tools/<tools version number>.

    Nota: devi utilizzare la versione di aapt2 fornita per il componente Build-Tools più recente disponibile. Se non disponi del componente più recente Build-Tools, scaricalo utilizzando Android SDK Manager.

  3. Esegui aapt2 utilizzando questa sintassi:
$ aapt2 dump badging <path_to_exported_.apk>

Ecco un esempio dell'output comando per il secondo esempio Bluetooth mostrato in precedenza:

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

Informazioni sulle funzionalità

Le seguenti sezioni forniscono informazioni di riferimento su funzionalità hardware, funzionalità software e serie di autorizzazioni che implicano requisiti specifici per le funzionalità.

Funzionalità hardware

Questa sezione illustra le funzionalità hardware supportate dalla release della piattaforma più recente. Per indicare che la tua app utilizza o richiede una funzionalità hardware, dichiara il valore corrispondente, che inizia con "android.hardware", in un attributo android:name. Ogni volta che dichiari una funzionalità hardware, utilizza un elemento <uses-feature> separato.

Funzionalità hardware audio

android.hardware.audio.low_latency
L'app utilizza la pipeline audio a bassa latenza del dispositivo, che riduce i ritardi e i ritardi durante l'elaborazione dell'ingresso o dell'uscita audio.
android.hardware.audio.output
L'app trasmette l'audio utilizzando gli altoparlanti, il jack audio, le funzionalità di streaming Bluetooth o un meccanismo simile del dispositivo.
android.hardware.audio.pro
L'app utilizza la funzionalità audio di fascia alta e le prestazioni prestazionali del dispositivo.
android.hardware.microphone
L'app registra l'audio utilizzando il microfono del dispositivo.

Funzionalità hardware Bluetooth

android.hardware.bluetooth
L'app utilizza le funzionalità Bluetooth del dispositivo, in genere per comunicare con altri dispositivi dotati di Bluetooth.
android.hardware.bluetooth_le
L'app utilizza le funzionalità radio Bluetooth Low Energy del dispositivo.

Funzionalità hardware della fotocamera

Nota: per evitare di filtrare inutilmente la tua app da Google Play, aggiungi android:required="false" a qualsiasi funzionalità della fotocamera senza la quale la tua app può funzionare. In caso contrario, Google Play presume che la funzionalità sia obbligatoria e impedisce ai dispositivi che non la supportano di accedere alla tua app.

Supporto per schermi di grandi dimensioni

Alcuni dispositivi con schermi di grandi dimensioni non supportano tutte le funzionalità della fotocamera. In genere i Chromebook non sono dotati di fotocamere posteriori, messa a fuoco automatica o flash. Tuttavia, i Chromebook hanno una fotocamera anteriore (rivolta all'utente) e sono spesso collegati a fotocamere esterne.

Per offrire il supporto di base della fotocamera e rendere disponibile la tua app per il maggior numero possibile di dispositivi, aggiungi le seguenti impostazioni delle funzionalità della fotocamera al file manifest dell'app:

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

Regola le impostazioni delle funzionalità per supportare i casi d'uso della tua app. Tuttavia, per rendere la tua app disponibile per il maggior numero di dispositivi, includi sempre l'attributo required per specificare esplicitamente se una funzionalità è obbligatoria.

Elenco delle funzionalità
android.hardware.camera.any

L'app utilizza una delle fotocamere del dispositivo o una fotocamera esterna collegata al dispositivo. Usa questa funzionalità invece di android.hardware.camera o android.hardware.camera.front se la tua app non richiede che la fotocamera sia rivolta rispettivamente indietro (mondo) o anteriore (per l'utente).

L'autorizzazione CAMERA implica che anche la tua app usa android.hardware.camera. La fotocamera posteriore è una funzionalità obbligatoria, a meno che android.hardware.camera non sia dichiarato con android:required="false".

android.hardware.camera

L'app utilizza la fotocamera posteriore del dispositivo (rivolta verso il mondo).

Attenzione: i dispositivi come i Chromebook che dispongono solo di una fotocamera anteriore (rivolto all'utente) non supportano questa funzionalità. Utilizza android.hardware.camera.any se la tua app può usare qualsiasi videocamera, indipendentemente dalla direzione in cui è rivolta la videocamera.

Nota: l'autorizzazione CAMERA implica che la funzionalità posteriore sia una funzionalità obbligatoria. Per garantire il corretto filtro su Google Play quando il file manifest dell'app include l'autorizzazione CAMERA, specifica esplicitamente che la tua app utilizza la funzionalità camera e indica se è obbligatoria, ad esempio:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

L'app utilizza la fotocamera anteriore del dispositivo (rivolta all'utente).

L'autorizzazione CAMERA implica che anche la tua app usa android.hardware.camera. La fotocamera posteriore è una funzionalità obbligatoria, a meno che android.hardware.camera non sia dichiarato con android:required="false".

Attenzione: se la tua app utilizza android.hardware.camera.front ma non dichiara esplicitamente android.hardware.camera con android.required="false", i dispositivi che non hanno una fotocamera posteriore (come i Chromebook) vengono filtrati da Google Play. Se la tua app supporta dispositivi solo con fotocamere anteriori, dichiara android.hardware.camera con android.required="false" per evitare filtri non necessari.

android.hardware.camera.external

L'app comunica con una fotocamera esterna che l'utente connette al dispositivo. Questa funzionalità non garantisce che la tua app possa utilizzare una fotocamera esterna.

L'autorizzazione CAMERA implica che anche la tua app usa android.hardware.camera. La fotocamera posteriore è una funzionalità obbligatoria, a meno che android.hardware.camera non sia dichiarato con android:required="false".

android.hardware.camera.autofocus

L'app utilizza la funzionalità di messa a fuoco automatica supportata dalla fotocamera del dispositivo.

Nota: l'autorizzazione CAMERA implica che la messa a fuoco automatica è una funzionalità obbligatoria. Per garantire il corretto filtraggio su Google Play quando il file manifest dell'app include l'autorizzazione CAMERA, specifica esplicitamente che la tua app utilizza la funzionalità di messa a fuoco automatica e indica se è obbligatoria o meno, ad esempio:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />.

android.hardware.camera.flash

L'app utilizza la funzione flash supportata dalla fotocamera del dispositivo.

android.hardware.camera.capability.manual_post_processing

L'app utilizza la funzionalità MANUAL_POST_PROCESSING supportata dalla fotocamera del dispositivo.

Questa funzionalità consente all'app di ignorare la funzionalità di bilanciamento del bianco automatico della fotocamera. Utilizza android.colorCorrection.transform, android.colorCorrection.gains e android.colorCorrection.mode di TRANSFORM_MATRIX.

android.hardware.camera.capability.manual_sensor

L'app utilizza la funzionalità MANUAL_SENSOR supportata dalla fotocamera del dispositivo.

Questa funzionalità implica il supporto del blocco automatico dell'esposizione (android.control.aeLock), che consente al tempo di esposizione e alla sensibilità della fotocamera di rimanere fissi su valori specifici.

android.hardware.camera.capability.raw

L'app utilizza la funzionalità RAW supportata dalla fotocamera del dispositivo.

Questa funzionalità implica che il dispositivo possa salvare file DNG (non elaborati). La fotocamera del dispositivo fornisce i metadati relativi a DNG necessari affinché la tua app elabori direttamente le immagini non elaborate.

android.hardware.camera.level.full
L'app utilizza il livello FULL di supporto dell'acquisizione di immagini fornito da almeno una delle fotocamere del dispositivo. Il supporto di FULL include funzionalità di acquisizione a raffica, controllo per frame e controllo manuale di post-elaborazione. Consulta il sito INFO_SUPPORTED_HARDWARE_LEVEL_FULL.

Funzionalità hardware dell'interfaccia utente del dispositivo

android.hardware.type.automotive

L'app è progettata per mostrare la sua UI su una serie di schermate all'interno di un veicolo. L'utente interagisce con l'app utilizzando tasti fisici, touch, controller rotativi e interfacce simili a un mouse. Gli schermi del veicolo di solito appaiono nella console centrale o sul quadro strumenti di un veicolo. Questi schermi di solito hanno dimensioni e risoluzione limitate.

Nota: dal momento che l'utente sta guidando mentre utilizza questo tipo di UI dell'app, quest'ultima deve ridurre al minimo le distrazioni alla guida.

android.hardware.type.television

(Deprecato; utilizza android.software.leanback.)

L'app è progettata per mostrare la sua UI su un televisore. Questa funzionalità definisce "televisione" come una tipica esperienza televisiva in salotto: l'app visualizzata su uno schermo di grandi dimensioni, l'utente seduto lontano e la forma di input prevalente è qualcosa come un D-pad, anziché un mouse, un puntatore o un dispositivo touch.

android.hardware.type.watch
L'app è progettata per mostrare la sua UI su uno smartwatch. Lo smartwatch viene indossato sul corpo, ad esempio al polso. L'utente è molto vicino al dispositivo mentre interagisce con quest'ultimo.
android.hardware.type.pc

L'app è stata progettata per mostrare la sua UI sui Chromebook. Questa funzionalità disattiva l'emulazione dell'input per mouse e touchpad, poiché i Chromebook utilizzano l'hardware di mouse e touchpad. Vedi Input del mouse.

Nota: imposta required="false" per questo elemento; in caso contrario, il Google Play Store rende la tua app non disponibile su dispositivi diversi dai Chromebook.

Funzionalità hardware per l'uso delle impronte

android.hardware.fingerprint
L'app legge le impronte utilizzando l'hardware biometrico del dispositivo.

Funzionalità hardware del Gamepad

android.hardware.gamepad
L'app acquisisce l'input del controller di gioco, dal dispositivo stesso o da un gamepad collegato.

Funzionalità hardware a infrarossi

android.hardware.consumerir
L'app utilizza le funzionalità a infrarossi (IR) del dispositivo, in genere per comunicare con altri dispositivi IR consumer.

Funzionalità hardware di geolocalizzazione

android.hardware.location
L'app utilizza una o più funzionalità sul dispositivo per determinare la posizione, ad esempio posizione GPS, posizione di rete o posizione della cella.
android.hardware.location.gps

L'app utilizza coordinate di posizione precise ottenute da un ricevitore GPS sul dispositivo.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.location, a meno che questa funzionalità principale non venga dichiarata con l'attributo android:required="false".

android.hardware.location.network

L'app utilizza coordinate di posizione approssimativa ottenute da un sistema di geolocalizzazione basato su rete supportato sul dispositivo.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.location, a meno che questa funzionalità principale non venga dichiarata con l'attributo android:required="false".

Funzionalità hardware NFC

android.hardware.nfc
L'app utilizza le funzionalità radio della tecnologia Near Field Communication (NFC) del dispositivo.
android.hardware.nfc.hce

L'app utilizza l'emulazione della carta NFC ospitata sul dispositivo.

Caratteristiche hardware OpenGL ES

android.hardware.opengles.aep
L'app utilizza OpenGL ES Android Extension Pack installato sul dispositivo.

Funzionalità hardware del sensore

android.hardware.sensor.accelerometer
L'app utilizza le letture dei movimenti dell'accelerometro del dispositivo per rilevare l'orientamento attuale del dispositivo. Ad esempio, un'app potrebbe utilizzare le letture dell'accelerometro per determinare quando passare dall'orientamento verticale a quello orizzontale e viceversa.
android.hardware.sensor.ambient_temperature
L'app utilizza il sensore di temperatura ambientale (ambiente) del dispositivo. Ad esempio, un'app meteo può segnalare la temperatura interna o esterna.
android.hardware.sensor.barometer
L'app utilizza il barometro del dispositivo. Ad esempio, un'app meteo potrebbe segnalare la pressione atmosferica.
android.hardware.sensor.compass
L'app utilizza il magnetometro (bussola) del dispositivo. Ad esempio, un'app di navigazione potrebbe mostrare la direzione corrente in cui è rivolto un utente.
android.hardware.sensor.gyroscope
L'app utilizza il giroscopio del dispositivo per rilevare la rotazione e la rotazione, creando un sistema di orientamento a sei assi. Grazie all'utilizzo di questo sensore, un'app può rilevare più facilmente quando è necessario passare dall'orientamento verticale a quello orizzontale e viceversa.
android.hardware.sensor.hifi_sensors
L'app utilizza i sensori ad alta fedeltà (Hi-Fi) del dispositivo. Ad esempio, un'app di gioco potrebbe rilevare i movimenti ad alta precisione dell'utente.
android.hardware.sensor.heartrate
L'app utilizza il cardiofrequenzimetro del dispositivo. Ad esempio, un'app per l'attività fisica potrebbe segnalare le tendenze del battito cardiaco di un utente nel tempo.
android.hardware.sensor.heartrate.ecg
L'app usa il sensore per la rilevazione del battito cardiaco tramite elettrocardiogramma (ECG) del dispositivo. Ad esempio, un'app per l'attività fisica potrebbe segnalare informazioni più dettagliate sulla frequenza cardiaca di un utente.
android.hardware.sensor.light
L'app utilizza il sensore di luce del dispositivo. Ad esempio, un'app potrebbe mostrare una delle due combinazioni di colori a seconda delle condizioni di illuminazione dell'ambiente.
android.hardware.sensor.proximity
L'app usa il sensore di prossimità del dispositivo. Ad esempio, un'app di telefonia potrebbe disattivare lo schermo del dispositivo quando rileva che l'utente lo tiene vicino al corpo.
android.hardware.sensor.relative_humidity
L'app usa il sensore di umidità relativa del dispositivo. Ad esempio, un'app meteo potrebbe usare l'umidità per calcolare e segnalare il punto di rugiada attuale.
android.hardware.sensor.stepcounter
L'app utilizza il contapassi del dispositivo. Ad esempio, un'app per l'attività fisica potrebbe segnalare il numero di passi che un utente deve fare per raggiungere l'obiettivo di conteggio di passi giornaliero.
android.hardware.sensor.stepdetector
L'app utilizza il rilevatore di passi del dispositivo. Ad esempio, un'app per l'attività fisica potrebbe utilizzare l'intervallo di tempo tra i passi per dedurre il tipo di allenamento che l'utente sta facendo.

Funzionalità hardware dello schermo

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

L'app richiede che il dispositivo utilizzi l'orientamento verticale o orizzontale. Se la tua app supporta entrambi gli orientamenti, non è necessario dichiarare alcuna funzionalità.

Ad esempio, se la tua app richiede l'orientamento verticale, dichiara la seguente funzionalità in modo che solo i dispositivi che supportano l'orientamento verticale, sempre o per scelta dell'utente, possano eseguire l'app:

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

Per impostazione predefinita, si presume che entrambi gli orientamenti non siano obbligatori, quindi l'app può essere installata su dispositivi che supportano uno o entrambi gli orientamenti. Tuttavia, se una delle tue attività richiede l'esecuzione in un orientamento specifico, utilizzando l'attributo android:screenOrientation, questa dichiarazione implica che la tua app richiede questo orientamento.

Ad esempio, se dichiari android:screenOrientation con "landscape", "reverseLandscape" o "sensorLandscape", la tua app è disponibile solo sui dispositivi che supportano l'orientamento orizzontale.

Come best practice, dichiara i tuoi requisiti per questo orientamento utilizzando un elemento <uses-feature>. Se dichiari un orientamento per la tua attività utilizzando android:screenOrientation, ma in realtà non lo richiedi, puoi disabilitare il requisito dichiarando l'orientamento con un elemento <uses-feature> e includere android:required="false".

Per garantire la compatibilità con le versioni precedenti, qualsiasi dispositivo con Android 3.1 (livello API 12) o versioni precedenti supporta sia l'orientamento orizzontale che quello verticale.

Funzionalità hardware della telefonia

android.hardware.telephony
L'app utilizza le funzionalità di telefonia del dispositivo, ad esempio la telefonia via radio con servizi di comunicazione dati.
android.hardware.telephony.cdma

L'app utilizza il sistema radio di telefonia CDMA (Code Division Multiple Access).

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.telephony, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

android.hardware.telephony.gsm

L'app utilizza il sistema radio di telefonia GSM (Global System for Mobile Communications).

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.telephony, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

Funzionalità hardware del touchscreen

android.hardware.faketouch

L'app utilizza eventi di interazione tocco di base, come il tocco e il trascinamento.

Se dichiarata come richiesto, questa funzionalità indica che l'app è compatibile con un dispositivo solo se quest'ultimo dispone di un touchscreen "fake touch" emulato o di un touchscreen effettivo.

Un dispositivo che offre un'interfaccia touch finta fornisce un sistema di input utente che emula un sottoinsieme delle funzionalità di un touchscreen. Ad esempio, un mouse o un telecomando potrebbe azionare un cursore sullo schermo.

Se l'app richiede l'interazione di base con clic e punta e non funziona solo con un controller D-pad, dichiara questa funzionalità. Poiché questo è il livello minimo di interazione touch, puoi utilizzare anche un'app che dichiara questa funzionalità sui dispositivi che offrono interfacce touch più complesse.

Le app richiedono la funzionalità android.hardware.faketouch per impostazione predefinita. Se vuoi che la tua app sia limitata ai dispositivi che dispongono solo di un touchscreen, devi dichiarare esplicitamente che il touchscreen è richiesto come segue:

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

Tutte le app che non richiedono esplicitamente android.hardware.touchscreen, come mostrato nell'esempio seguente, funzionano anche sui dispositivi con android.hardware.faketouch.

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

L'app monitora due o più "dita" distinte su un'interfaccia touch falsa. Questo è un soprainsieme della funzionalità android.hardware.faketouch. Se dichiarata come richiesto, questa funzionalità indica che l'app è compatibile con un dispositivo solo se quest'ultimo emula il tracciamento distinto di due o più dita o dispone di un touchscreen effettivo.

A differenza del multitouch distinto definito da android.hardware.touchscreen.multitouch.distinct, i dispositivi di input che supportano il multitouch distinto con un'interfaccia touch falsa non supportano tutti i gesti con due dita, perché l'input viene trasformato in movimento del cursore sullo schermo. In altre parole, i gesti con un dito su un dispositivo di questo tipo muovono un cursore, gli scorrimenti con due dita generano eventi di tocco con un solo dito e altri gesti con due dita attivano gli eventi di tocco con due dita corrispondenti.

Un dispositivo che offre un trackpad touch con due dita per il movimento del cursore può supportare questa funzionalità.

android.hardware.faketouch.multitouch.jazzhand

L'app monitora cinque o più "dita" distinte su un'interfaccia touch falsa. Questo è un soprainsieme della funzionalità android.hardware.faketouch. Se dichiarata come richiesto, questa funzionalità indica che l'app è compatibile con un dispositivo solo se quest'ultimo emula il tracciamento distinto di cinque o più dita o dispone di un touchscreen effettivo.

A differenza del multitouch distinto definito da android.hardware.touchscreen.multitouch.jazzhand, i dispositivi di input che supportano il multitouch jazzhand con un'interfaccia touch finta non supportano tutti i gesti con cinque dita, perché l'input viene trasformato in movimento del cursore sullo schermo. In altre parole, i gesti con un dito su un dispositivo di questo tipo muovono un cursore, i gesti con più dita causano il verificarsi di eventi di tocco con un dito e altri gesti con più dita attivano gli eventi di tocco con più dita corrispondenti.

Un dispositivo che offre un trackpad touch con cinque dita per il movimento del cursore può supportare questa funzionalità.

android.hardware.touchscreen

L'app utilizza le funzionalità touchscreen del dispositivo per gesti più interattivi rispetto agli eventi tocco di base, ad esempio un'avventura. Questo è un soprainsieme della funzionalità android.hardware.faketouch.

Per impostazione predefinita, tutte le app richiedono questa funzionalità e, pertanto, non sono disponibili per i dispositivi che forniscono solo un'interfaccia di "tocco falso" emulata. Puoi rendere disponibile la tua app sui dispositivi che forniscono un'interfaccia touch falsa o anche su quelli che forniscono solo un controller D-pad, dichiarando esplicitamente che non è necessario un touchscreen utilizzando android.hardware.touchscreen con android:required="false". Aggiungi questa dichiarazione se la tua app utilizza, ma non richiede, un'interfaccia touchscreen reale. Tutte le app che non richiedono esplicitamente android.hardware.touchscreen funzionano anche sui dispositivi con android.hardware.faketouch.

Se la tua app richiede in effetti un'interfaccia touch, ad esempio per eseguire gesti tattili più avanzati come i tocchi, non è necessario dichiarare alcuna funzionalità dell'interfaccia touch, perché è obbligatoria per impostazione predefinita. Tuttavia, è meglio dichiarare esplicitamente tutte le funzionalità utilizzate dalla tua app.

Se hai bisogno di interazioni touch più complesse, ad esempio gesti con più dita, dichiara che la tua app utilizza funzionalità touchscreen avanzate.

android.hardware.touchscreen.multitouch

L'app utilizza le funzionalità multitouch a due punti di base del dispositivo, ad esempio i gesti di pizzicatura, ma non è necessario che l'app rilevi i tocchi separatamente. Questo è un soprainsieme della funzionalità android.hardware.touchscreen.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.touchscreen, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

android.hardware.touchscreen.multitouch.distinct

L'app utilizza le funzionalità multitouch avanzate del dispositivo per rilevare due o più punti in modo indipendente. Questa funzionalità è un soprainsieme della funzionalità android.hardware.touchscreen.multitouch.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.touchscreen.multitouch, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

android.hardware.touchscreen.multitouch.jazzhand

L'app utilizza le funzionalità multitouch avanzate del dispositivo per rilevare in modo indipendente cinque o più punti. Questa funzionalità è un soprainsieme della funzionalità android.hardware.touchscreen.multitouch.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.hardware.touchscreen.multitouch, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

Funzionalità hardware USB

android.hardware.usb.accessory
L'app si comporta come un dispositivo USB e si connette a host USB.
android.hardware.usb.host
L'app utilizza gli accessori USB collegati al dispositivo. Il dispositivo funge da host USB.

Funzionalità hardware Vulkan

android.hardware.vulkan.compute
L'app utilizza le funzionalità di computing di Vulkan. Questa funzionalità indica che l'app richiede l'implementazione Vulkan con accelerazione hardware. La versione della funzionalità indica il livello di funzionalità di calcolo facoltative richiesto dall'app oltre i requisiti di Vulkan 1.0. Ad esempio, se la tua app richiede il supporto del livello di computing 0 di Vulkan, dichiara la seguente funzionalità:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
Per maggiori dettagli sulla versione della funzionalità, consulta FEATURE_VULKAN_HARDWARE_COMPUTE.
android.hardware.vulkan.level
L'app utilizza le funzionalità di livello Vulkan. Questa funzionalità indica che l'app richiede l'implementazione Vulkan con accelerazione hardware. La versione della funzionalità indica il livello di funzionalità hardware facoltative richiesto dall'app. Ad esempio, se la tua app richiede il supporto di livello hardware 0 di Vulkan, dichiara la seguente funzionalità:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
Per saperne di più sulla versione della funzionalità, consulta FEATURE_VULKAN_HARDWARE_LEVEL.
android.hardware.vulkan.version
L'app utilizza Vulkan. Questa funzionalità indica che l'app richiede l'implementazione Vulkan con accelerazione hardware. La versione della funzionalità indica la versione minima del supporto dell'API Vulkan richiesta dall'app. Ad esempio, se la tua app richiede il supporto di Vulkan 1.0, dichiara la seguente funzionalità:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
Per maggiori dettagli sulla versione della funzionalità, consulta FEATURE_VULKAN_HARDWARE_VERSION.

Funzionalità hardware del Wi-Fi

android.hardware.wifi
L'app utilizza funzionalità di rete 802.11 (Wi-Fi) sul dispositivo.
android.hardware.wifi.direct
L'app utilizza le funzionalità di rete Wi-Fi Direct del dispositivo.

Funzionalità software

Questa sezione illustra le funzionalità software supportate dalla release della piattaforma più recente. Per indicare che la tua app utilizza o richiede una funzionalità software, dichiara il valore corrispondente, che inizia con "android.software", in un attributo android:name. Ogni volta che dichiari una funzionalità software, utilizza un elemento <uses-feature> separato.

Funzionalità software di comunicazione

android.software.sip
L'app utilizza i servizi SIP (Session Initiation Protocol). Utilizzando SIP, l'app può supportare le operazioni di telefonia via internet, come le videoconferenze e la messaggistica immediata.
android.software.sip.voip

L'app utilizza servizi Voice Over Internet Protocol (VoIP) basati su SIP. Grazie al VoIP, l'app può supportare operazioni di telefonia via internet in tempo reale, ad esempio le videoconferenze bidirezionali.

Se utilizzi questa funzionalità, un'app implica che utilizza anche la funzionalità android.software.sip, a meno che questa funzionalità principale non sia dichiarata con android:required="false".

android.software.webview
L'app mostra contenuti provenienti da Internet.

Funzionalità software di input personalizzati

android.software.input_methods
L'app utilizza un nuovo metodo di inserimento, che lo sviluppatore definisce in un elemento InputMethodService.

Funzionalità software di gestione dei dispositivi

android.software.backup
L'app include la logica per gestire un'operazione di backup e ripristino.
android.software.device_admin
L'app utilizza gli amministratori del dispositivo per applicare i criteri relativi ai dispositivi.
android.software.managed_users
L'app supporta utenti secondari e profili gestiti.
android.software.securely_removes_users
L'app può rimuovere in modo definitivo gli utenti e i dati associati.
android.software.verified_boot
L'app include la logica per gestire i risultati della funzionalità di avvio verificato del dispositivo, che rileva se la configurazione del dispositivo cambia durante un'operazione di riavvio.

Funzionalità software multimediali

android.software.midi
L'app si connette a strumenti musicali o emette suoni tramite il protocollo MIDI (Musical Instrument Digital Interface).
android.software.print
L'app include comandi per la stampa dei documenti visualizzati sul dispositivo.
android.software.leanback
L'app è progettata per essere eseguita su dispositivi Android TV.
android.software.live_tv
L'app trasmette in streaming programmi televisivi in diretta.

Funzionalità software dell'interfaccia dello schermo

android.software.app_widgets
L'app utilizza o fornisce widget delle app ed è destinata esclusivamente ai dispositivi che includono una schermata Home o una posizione simile in cui gli utenti possono incorporarli.
android.software.home_screen
L'app sostituisce la schermata Home del dispositivo.
android.software.live_wallpaper
L'app utilizza o fornisce sfondi che includono animazioni.

Autorizzazioni che implicano requisiti per le funzionalità

Alcune costanti di funzionalità hardware e software vengono rese disponibili alle applicazioni dopo l'API corrispondente. Per questo motivo, alcune app potrebbero utilizzare l'API prima di poter dichiarare che richiedono l'API mediante il sistema <uses-feature>.

Per evitare che queste app vengano rese disponibili involontariamente, Google Play presuppone che determinate autorizzazioni correlate all'hardware indichino che le funzionalità hardware sottostanti sono richieste per impostazione predefinita. Ad esempio, le applicazioni che utilizzano il Bluetooth devono richiedere l'autorizzazione BLUETOOTH in un elemento <uses-permission>.

Per le app legacy, Google Play presuppone che la dichiarazione delle autorizzazioni indichi che la funzionalità android.hardware.bluetooth sottostante sia richiesta dall'applicazione e configura i filtri in base a questa funzionalità. La tabella 2 elenca le autorizzazioni che implicano requisiti per le funzionalità equivalenti a quelli dichiarati negli elementi <uses-feature>.

Le dichiarazioni <uses-feature>, inclusi qualsiasi attributo android:required dichiarato, hanno sempre la precedenza sulle funzionalità implicite nelle autorizzazioni nella tabella 2. Per una qualsiasi di queste autorizzazioni, puoi disattivare i filtri in base alla funzionalità implicita dichiarando esplicitamente la funzionalità in un elemento <uses-feature> con l'attributo required impostato su false.

Ad esempio, per disabilitare il filtro in base all'autorizzazione CAMERA, aggiungi le seguenti dichiarazioni <uses-feature> al file manifest:

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

Attenzione: se la tua app ha come target Android 5.0 (livello API 21) o versioni successive e utilizza l'autorizzazione ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION per ricevere rispettivamente gli aggiornamenti della posizione dalla rete o da un GPS, devi anche dichiarare esplicitamente che la tua app usa le funzionalità hardware android.hardware.location.network o android.hardware.location.gps.

Tabella 2. Autorizzazioni del dispositivo che implicano l'utilizzo dell'hardware del dispositivo.

Categoria Autorizzazione Requisito per le funzionalità implicite
Bluetooth BLUETOOTH android.hardware.bluetooth

Per informazioni dettagliate, consulta Gestione speciale della funzionalità Bluetooth.

BLUETOOTH_ADMIN android.hardware.bluetooth
Fotocamera CAMERA android.hardware.camera
android.hardware.camera.autofocus
Posizione 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 (solo se il livello API target è 20 o inferiore).

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (solo se il livello API target è 20 o inferiore).

Microfono RECORD_AUDIO android.hardware.microphone
Telefonia 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