Panoramica della compatibilità dei dispositivi

Android è progettato per essere eseguito su molti dispositivi diversi, come telefoni, tablet e televisori. La gamma di dispositivi offre un enorme potenziale pubblico per la tua app. Affinché l'app abbia successo su tutti i dispositivi, deve tollerare la variabilità delle funzionalità e fornire un'interfaccia utente flessibile che si adatti alle diverse configurazioni dello schermo.

Per garantire la compatibilità con i dispositivi, Android fornisce un framework dinamico dell'app in cui puoi fornire risorse per app specifiche per la configurazione in file statici, ad esempio layout XML diversi per schermi di diverse dimensioni. Android carica quindi le risorse appropriate in base all'attuale configurazione del dispositivo. Tenendo in considerazione il design della tua app e le risorse aggiuntive per le app, puoi pubblicare un singolo pacchetto di applicazioni (APK) che ottimizza l'esperienza utente su una varietà di dispositivi.

Tuttavia, se necessario, puoi specificare i requisiti delle funzionalità della tua app e controllare quali tipi di dispositivi possono installare la tua app dal Google Play Store. Questo documento spiega come controllare quali dispositivi hanno accesso alle tue app e come prepararle per raggiungere il pubblico giusto.

Che cosa significa "compatibilità"?

Per quanto riguarda lo sviluppo di Android, esistono due tipi di compatibilità: compatibilità dei dispositivi e compatibilità delle app.

Poiché Android è un progetto open source, qualsiasi produttore di hardware può creare un dispositivo che esegue il sistema operativo Android. Tuttavia, un dispositivo è "compatibile con Android" solo se è in grado di eseguire correttamente app scritte per l'ambiente di esecuzione Android. I dettagli esatti dell'ambiente di esecuzione di Android sono definiti dal programma di compatibilità Android. Per essere considerato compatibile, ogni dispositivo deve superare il Compatibility Test Suite (CTS).

In qualità di sviluppatore di app, non devi preoccuparti di sapere se un dispositivo è compatibile con Android, perché solo i dispositivi compatibili con Android includono Google Play Store. Pertanto, se un utente installa la tua app dal Google Play Store, utilizza un dispositivo compatibile con Android.

Tuttavia, devi valutare se la tua app è compatibile con ogni potenziale configurazione del dispositivo. Poiché Android viene eseguito su un'ampia gamma di configurazioni dei dispositivi, alcune funzionalità non sono disponibili su tutti i dispositivi. Ad esempio, alcuni dispositivi potrebbero non includere un sensore per la bussola. Se la funzionalità di base dell'app richiede un sensore per la bussola, l'app è compatibile solo con i dispositivi che includono tale funzionalità.

Controllare la disponibilità dell'app per i dispositivi

Android supporta una serie di funzionalità che la tua app può sfruttare tramite API della piattaforma. Alcune funzionalità sono basate sull'hardware, ad esempio un sensore per la bussola, mentre altre sono basate su software, come i widget delle app, e altre dipendono dalla versione della piattaforma. Non tutti i dispositivi supportano tutte le funzionalità, quindi potresti dover controllare la disponibilità dell'app sui dispositivi in base alle funzionalità richieste.

Per ottenere la più ampia base utenti possibile per la tua app, supporta il maggior numero possibile di configurazioni di dispositivi utilizzando un singolo APK o AAB. Nella maggior parte dei casi, puoi farlo disattivando le funzionalità facoltative in fase di runtime e fornendo risorse dell'app con alternative per diverse configurazioni, ad esempio layout diversi per schermi di dimensioni differenti. Se necessario, puoi limitare la disponibilità della tua app a determinati dispositivi tramite il Google Play Store in base alle seguenti caratteristiche dei dispositivi:

Funzionalità del dispositivo

Per gestire la disponibilità della tua app in base alle funzionalità del dispositivo, Android definisce gli ID funzionalità per tutte le funzionalità hardware o software che potrebbero non essere disponibili su tutti i dispositivi. Ad esempio, l'ID funzionalità del sensore della bussola è FEATURE_SENSOR_COMPASS e l'ID funzionalità per i widget delle app è FEATURE_APP_WIDGETS.

Se necessario, puoi impedire agli utenti di installare la tua app quando i loro dispositivi non forniscono una funzionalità necessaria dichiarando la funzionalità tramite un elemento <uses-feature> nel file manifest dell'app.

Ad esempio, se la tua app non ha senso su un dispositivo privo di sensore per bussola, puoi dichiararlo come requisito con il seguente tag manifest:

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

Il Google Play Store confronta le funzionalità richieste dalla tua app con le funzionalità disponibili sul dispositivo di ciascun utente per determinare se la tua app è compatibile con ciascun dispositivo. Se il dispositivo non dispone di tutte le funzionalità richieste dalla tua app, l'utente non può installarla.

Tuttavia, se la funzionalità principale dell'app non richiede una funzionalità del dispositivo, imposta l'attributo required su "false" e controlla la funzionalità del dispositivo in fase di runtime. Se la funzionalità dell'app non è disponibile sul dispositivo attuale, riduci temporaneamente la funzionalità dell'app corrispondente. Ad esempio, puoi eseguire query sulla disponibilità di una funzionalità chiamando hasSystemFeature() in questo modo:

Kotlin

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

Java

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

Per informazioni su tutti i filtri che puoi utilizzare per controllare la disponibilità della tua app tramite il Google Play Store, consulta la documentazione sui filtri su Google Play.

Versione piattaforma

Dispositivi diversi potrebbero eseguire versioni diverse della piattaforma Android, ad esempio Android 12 o Android 13. Ogni versione successiva della piattaforma spesso aggiunge API non disponibili nella versione precedente. Per indicare il set di API disponibile, ogni versione della piattaforma specifica un livello API. Ad esempio, Android 12 è il livello API 31, mentre Android 13 è il livello API 33.

Devi specificare i valori minSdkVersion e targetSdkVersion nel file build.gradle:

Kotlin

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

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

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

Alla moda

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

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

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

Per maggiori informazioni sul file build.gradle, consulta Configurare la build.

Ogni versione successiva di Android fornisce compatibilità per le app create utilizzando le API di versioni precedenti della piattaforma, in modo che la tua app sia compatibile con le versioni future di Android mentre utilizzi le API Android documentate.

Tuttavia, se l'app utilizza API aggiunte in una versione più recente della piattaforma, ma non le richiede per la funzionalità principale, controlla il livello API in fase di runtime e riduci delicatamente le funzionalità corrispondenti quando il livello API è troppo basso. In questo caso, imposta minSdkVersion sul valore più basso possibile per la funzionalità principale della tua app, quindi confronta la versione attuale del sistema, SDK_INT, con la costante del nome in codice in Build.VERSION_CODES che corrisponde al livello API che vuoi controllare, come mostrato nell'esempio seguente:

Kotlin

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

Java

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

Configurazione schermo

Android funziona su dispositivi di varie dimensioni, come telefoni, tablet e TV. Per categorizzare i dispositivi in base al tipo di schermo, Android definisce due caratteristiche per ogni dispositivo: dimensioni dello schermo (le dimensioni fisiche dello schermo) e densità dello schermo (la densità fisica dei pixel sullo schermo, nota come DPI). Per semplificare le diverse configurazioni, Android generalizza queste varianti in gruppi che le rendono più semplici da scegliere come target:

  • Quattro dimensioni generalizzate: piccolo, normale, grande e xlarge
  • Varie densità generalizzate: mdpi (media), hdpi (alta), xhdpi (molto elevata), xxhdpi (molto elevata) e altre

Per impostazione predefinita, l'app è compatibile con tutte le dimensioni e densità dello schermo, perché il sistema apporta modifiche al layout dell'interfaccia utente e alle risorse delle immagini in base alle necessità per ogni schermo. Fornisci immagini bitmap ottimizzate per comune densità dello schermo.

Ottimizza l'esperienza utente utilizzando il più possibile layout flessibili. Nel caso in cui siano disponibili layout per modifiche di grande entità alla configurazione, ad esempio verticali e orizzontali, o di finestre di dimensioni grandi o ridotte, valuta la possibilità di fornire layout alternativi che siano flessibili per modifiche di configurazione minori. Ciò migliora l'esperienza utente su fattori di forma come tablet, smartphone e pieghevoli. È utile anche quando le dimensioni delle finestre cambiano in modalità multi-finestra.

Per informazioni su come creare risorse alternative per schermi diversi e su come limitare l'app a determinate dimensioni dello schermo, se necessario, leggi la panoramica sulla compatibilità degli schermi e consulta le norme sulla qualità delle app per schermi di grandi dimensioni.

Controllare la disponibilità dell'app per motivi commerciali

Oltre a limitare la disponibilità della tua app in base alle caratteristiche del dispositivo, potresti dover limitare la disponibilità dell'app per motivi aziendali o legali. Per questo tipo di situazione, il Google Play Store fornisce opzioni di filtro in Play Console che ti consentono di controllare la disponibilità della tua app per motivi non tecnici, come le impostazioni internazionali dell'utente o l'operatore wireless.

Il filtro per la compatibilità tecnica (ad esempio i componenti hardware richiesti) si basa sempre sulle informazioni contenute nel file APK o AAB. Tuttavia, l'applicazione di filtri per motivi non tecnici, ad esempio l'area geografica, viene sempre gestita in Google Play Console.

Altre risorse:

Panoramica delle risorse per app
Informazioni su come le app per Android sono strutturate in modo da separare le risorse delle app dal codice dell'app, incluso il modo in cui puoi fornire risorse alternative per configurazioni specifiche del dispositivo.
Filtri su Google Play
Informazioni sui diversi modi in cui Google Play Store può impedire l'installazione dell'app su dispositivi diversi.
Autorizzazioni su Android
In che modo Android limita l'accesso delle app a determinate API con un sistema di autorizzazioni che richiede il consenso dell'utente affinché la tua app utilizzi queste API.