Android è progettato per essere eseguito su molti dispositivi diversi, come smartphone, tablet e TV. La gamma di dispositivi offre un enorme potenziale pubblico per la tua app. Per avere successo su tutti i dispositivi, la tua app deve tollerare la variabilità delle funzionalità e fornire un'interfaccia utente flessibile che si adatti a diverse configurazioni dello schermo.
Per favorire la compatibilità dei dispositivi, Android fornisce un framework di app dinamico in cui puoi fornire risorse dell'app specifiche per la configurazione in file statici, ad esempio diversi layout XML per diverse dimensioni dello schermo. Android carica quindi le risorse appropriate in base alla configurazione attuale del dispositivo. Con una pianificazione attenta della progettazione dell'app e risorse aggiuntive, puoi pubblicare un singolo pacchetto dell'applicazione (APK) che ottimizza l'esperienza utente su una varietà di dispositivi.
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 per 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 può eseguire correttamente le app scritte per l'ambiente di esecuzione Android. I dettagli esatti dell'ambiente di esecuzione 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 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, sta utilizzando 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 di 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 questa funzionalità.
Controllare la disponibilità dell'app per i dispositivi
Android supporta una serie di funzionalità che la tua app può sfruttare tramite le API della piattaforma. Alcune funzionalità si basano sull'hardware, ad esempio un sensore per la bussola; altre sul software, ad esempio i widget delle app; altre ancora dipendono dalla versione della piattaforma. Non tutti i dispositivi supportano tutte le funzionalità, quindi potresti dover controllare la disponibilità della tua app per i dispositivi in base alle funzionalità richieste dall'app.
Per raggiungere la base di utenti più ampia 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 configurazioni diverse, ad esempio layout diversi per dimensioni dello schermo diverse. Se necessario, puoi limitare la disponibilità della tua app a determinati dispositivi tramite Google Play Store in base alle seguenti caratteristiche del dispositivo:
Funzionalità del dispositivo
Per gestire la disponibilità della tua app in base alle funzionalità del dispositivo, Android definisce
ID funzionalità per qualsiasi funzionalità hardware o software che potrebbe non essere
disponibile su tutti i dispositivi. Ad esempio, l'ID funzionalità per il sensore della bussola è
FEATURE_SENSOR_COMPASS
,
mentre 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à utilizzando 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 la bussola, puoi dichiarare il sensore per la bussola come requisito con il seguente tag manifest:
<manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest>
Google Play Store confronta le funzionalità richieste dalla tua app con quelle disponibili sul dispositivo di ogni utente per determinare se la tua app è compatibile con ogni 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 verifica la funzionalità del dispositivo in fase di runtime.
Se la funzionalità dell'app non è disponibile sul dispositivo attuale, esegui il downgrade
della funzionalità dell'app corrispondente. Ad esempio, puoi eseguire una query per verificare se una funzionalità è
disponibile 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 relativa ai 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 quale insieme di API è disponibile, ogni versione della piattaforma specifica un livello API. Ad esempio, Android 12 ha il livello API 31 e Android 13 ha 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) ... } }
Groovy
android { defaultConfig { applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdkVersion 30 // Specifies the API level used to test the app. targetSdkVersion 33 ... } }
Per ulteriori informazioni sul file build.gradle
, leggi
Configurare la build.
Ogni versione successiva di Android offre compatibilità per le app create utilizzando le API delle versioni precedenti della piattaforma, quindi la tua app è compatibile con le versioni future di Android utilizzando le API Android documentate.
Tuttavia, se la tua app utilizza API aggiunte in una versione della piattaforma più recente, ma non le richiede per la sua funzionalità principale, controlla il livello API in fase di runtime e riduci gradualmente 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
corrente 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 dello schermo
Android viene eseguito su dispositivi di varie dimensioni, come smartphone, tablet e TV. Per classificare 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ù facili da scegliere come target:
- Quattro taglie generalizzate: piccola, normale, grande ed extra large
- Diverse densità generalizzate: mdpi (media), hdpi (alta), xhdpi (molto alta), xxhdpi (molto molto alta) e altre
Per impostazione predefinita, la tua app è compatibile con tutte le dimensioni e densità dello schermo, perché il sistema apporta le modifiche necessarie al layout dell'interfaccia utente e alle risorse immagine per ogni schermo. Fornisci immagini bitmap ottimizzate per le densità dello schermo più comuni.
Ottimizza l'esperienza utente utilizzando il più possibile layout flessibili. Se sono presenti layout per modifiche di configurazione di grandi dimensioni, ad esempio verticale e orizzontale o dimensioni della finestra grandi e piccole, valuta la possibilità di fornire layout alternativi che siano flessibili a modifiche più piccole della configurazione. In questo modo 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 come limitare l'app a determinate dimensioni dello schermo, se necessario, consulta la panoramica della compatibilità dello schermo e le linee guida per la 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à della tua app per motivi commerciali 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, il filtraggio per motivi non tecnici, come le impostazioni geografiche, viene sempre gestito in Google Play Console.
Altre risorse:
- Panoramica delle risorse dell'app
- Informazioni su come sono strutturate le app per Android per separare le risorse dell'app dal codice dell'app, incluso come fornire risorse alternative per configurazioni specifiche del dispositivo.
- Filtri su Google Play
- Informazioni sui diversi modi in cui il Google Play Store può impedire l'installazione della tua 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 per l'utilizzo di queste API da parte dell'app.