Android è progettato per funzionare su diversi tipi di dispositivi, dai telefoni ai tablet e ai televisori. In qualità di sviluppatore, la gamma di dispositivi offre un enorme potenziale di pubblico per la tua app. Affinché la tua app funzioni su tutti questi dispositivi, essa dovrebbe tollerare una certa variabilità nelle funzionalità e fornire un’interfaccia utente flessibile che si adatti a diverse configurazioni dello schermo.
Per facilitare tale obiettivo, Android fornisce un framework di app dinamico in cui puoi fornire risorse specifiche per la configurazione di file statici (come diversi layout XML per schermi di dimensioni diverse). Android quindi carica le risorse appropriate in base alla configurazione del dispositivo corrente. Quindi, con alcuni accorgimenti per quanto riguarda il design e alcune risorse aggiuntive per l’app, puoi pubblicare un singolo pacchetto dell’applicazione (APK) che fornisce un’esperienza utente ottimizzata su una varietà di dispositivi.
Se necessario, tuttavia, puoi specificare i requisiti della tua app e controllare quali tipi di dispositivi possono installare la tua app da Google Play Store.
Cosa significa “compatibilità”?
Man mano che leggi di più sullo sviluppo di Android, probabilmente incontrerai il termine “compatibilità” in varie situazioni. Esistono due tipi di compatibilità: compatibilità del dispositivo 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 app scritte per l’ ambiente di esecuzione Android . I dettagli esatti dell’ambiente di esecuzione di Android sono definiti dal programma di compatibilità Android e ogni dispositivo deve superare la Compatibility Test Suite (CTS) per essere considerato compatibile.
In qualità di sviluppatore di app, non devi preoccuparti se un dispositivo è compatibile con Android, perché solo i dispositivi compatibili con Android includono il Google Play Store. In questo modo puoi essere certo che gli utenti che installano la tua app da Google Play Store utilizzano un dispositivo compatibile con Android.
Tuttavia, devi considerare se la tua app è compatibile con ogni potenziale configurazione del dispositivo. Poiché Android funziona 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 bussola. Se la funzionalità principale della tua app richiede l’uso di un sensore bussola, la tua app è compatibile solo con i dispositivi che includono un sensore bussola.
Controllo della disponibilità della tua app sui dispositivi
Android supporta una varietà di funzionalità che la tua app può sfruttare tramite le API della piattaforma. Alcune funzionalità sono basate su hardware (come un sensore bussola), alcune sono basate su software (come i widget delle app) e alcune dipendono dalla versione della piattaforma. Non tutti i dispositivi supportano tutte le funzionalità, quindi potrebbe essere necessario controllare la disponibilità della tua app sui dispositivi in base alle funzionalità richieste dalla tua app.
Per ottenere il più ampio numero di utenti possibile per la tua app, dovresti cercare di supportare il maggior numero possibile di configurazioni di dispositivi utilizzando un singolo APK. Nella maggior parte delle situazioni, è possibile farlo disabilitando le funzionalità opzionali in fase di esecuzione e fornendo risorse dell’app con alternative per diverse configurazioni (come layout diversi per dimensioni dello schermo diverse). Se necessario, tuttavia, puoi limitare la disponibilità della tua app ai dispositivi tramite Google Play Store in base alle seguenti caratteristiche del dispositivo:
- Caratteristiche del dispositivo
- Versione piattaforma
- Configurazione dello schermo
Caratteristiche del dispositivo
Per poter gestire la disponibilità della tua app in base alle funzionalità del dispositivo, Android definisce gli ID delle funzionalità per qualsiasi funzionalità hardware o software che potrebbe non essere disponibile su tutti i dispositivi. Ad esempio, l’ID della funzione per il sensore della bussola è FEATURE_SENSOR_COMPASSe l’ID della funzione per i widget dell’app è FEATURE_APP_WIDGETS.
Se necessario, puoi impedire agli utenti di installare la tua app quando i loro dispositivi non forniscono una determinata funzionalità dichiarandola con un <uses-feature> elemento nel file manifest della tua app .
Ad esempio, se la tua app viene eseguita su un dispositivo che non dispone di un sensore della bussola, puoi dichiarare il sensore della bussola 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 le funzionalità disponibili sul dispositivo di ogni utente per determinare se la tua app è compatibile con ogni dispositivo. Se il dispositivo non fornisce tutte le funzionalità richieste dall’app, l’utente non può installare l’app.
Tuttavia, se la funzionalità principale dell’app non richiede una funzionalità del dispositivo, è necessario impostare l’attributo l’ required su “false” e verificare la funzionalità del dispositivo in fase di esecuzione. Se la funzionalità dell’app non è disponibile sul dispositivo corrente, riduci gradualmente la funzionalità dell’app corrispondente.
Ad esempio, puoi chiedere se una funzione è disponibile chiamando in hasSystemFeature()questo modo:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// Running on something older than API level 11, so disable
// the drag/drop features that use <code><a href=”/reference/android/content/ClipboardManager.html”>ClipboardManager</a></code> APIs
disableDragAndDrop();
}
Versione piattaforma
Dispositivi diversi possono eseguire versioni diverse della piattaforma Android, come Android 4.0 o Android 4.4. Ogni versione successiva della piattaforma spesso aggiunge nuove API non disponibili nella versione precedente. Per indicare quale set di API è disponibile, ogni versione della piattaforma specifica un livello di API . Ad esempio, Android 1.0 è il livello API 1 e Android 4.4 è il livello API 19.
Il livello API ti consente di dichiarare la versione minima con cui la tua app è compatibile, utilizzando il <uses-sdk>tag manifest e il suo minSdkVersion attributo. Ad esempio, le API del provider di calendari sono state aggiunte in Android 4.0 (livello API 14). Se la tua app non può funzionare senza queste API, devi dichiarare il livello API 14 come versione minima supportata della tua app.
L’ minSdkVersion attributo dichiara la versione minima con cui la tua app è compatibile e l’ targetSdkVersion attributo dichiara la versione più alta su cui hai ottimizzato la tua app.
Tuttavia, fai attenzione che gli attributi <uses-sdk> nell’elemento vengono sovrascritti dalle proprietà corrispondenti nel build.gradle file. Quindi, se stai utilizzando Android Studio, devi specificare i valori minSdkVersione targetSdkVersion lì invece:
android {
defaultConfig {
applicationId ‘com.example.myapp’
// Definisci API level minimo richiesto per eseguire l’app.
minSdkVersion 15
// Specifica lì API level usato per testare l’app.
targetSdkVersion 28
…
}
}
…
}
Ogni versione successiva di Android fornisce la compatibilità per le app che sono state create utilizzando le API delle versioni precedenti della piattaforma, quindi la tua app dovrebbe essere sempre compatibile con le versioni future di Android durante l’utilizzo delle API Androi.
Tuttavia, se la tua app utilizza API aggiunte in una versione più recente della piattaforma, ma non le richiede per la sua funzionalità principale, dovresti controllare il livello API in fase di runtime e degradare con garbo le funzionalità corrispondenti quando il livello API è troppo basso. In questo caso, imposta il minSdkVersion al valore più basso possibile per la funzionalità principale della tua app, quindi confronta la versione del sistema corrente SDK_INT, con una delle costanti del nome in codice Build.VERSION_CODES che corrisponde al livello API che desideri controllare. Per esempio:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
// Se eseguito su api level piu’ vecchio di API level 11, viene disabilitato
href=”/reference/android/content/ClipboardManager.html”>ClipboardManager</a></code> APIs
disableDragAndDrop();
}
}
Configurazione dello schermo
Android funziona su dispositivi di varie dimensioni, dai telefoni ai tablet e ai televisori. Al fine di classificare i dispositivi in base al tipo di schermo, Android definisce due caratteristiche per ciascun dispositivo: dimensione dello schermo (la dimensione fisica dello schermo) e densità dello schermo (la densità dei pixel sullo schermo, nota come DPI ). Per semplificare le diverse configurazioni, Android divide queste varianti in gruppi che ne semplificano il targeting:
- Quattro dimensioni dello schermo: piccolo, normale, grande e xlarge.
- E diverse densità: mdpi (media), hdpi (alta), xhdpi (extra alta), xxhdpi (extra-extra alta) e altre.
Per impostazione predefinita, l’app è compatibile con tutte le dimensioni e densità dello schermo, perché il sistema apporta le regolazioni appropriate al layout dell’interfaccia utente e alle risorse d’immagine come necessario per ogni schermata. Tuttavia, è necessario ottimizzare l’esperienza utente per ciascuna configurazione dello schermo aggiungendo layout specifici per diverse dimensioni dello schermo e immagini bitmap ottimizzate per densità dello schermo piu’ comuni.
Controllo della disponibilità della tua app per motivi di lavoro
Oltre a limitare la disponibilità della tua app in base alle caratteristiche del dispositivo, è possibile che tu debba limitare la disponibilità della tua app per motivi legali o aziendali. Ad esempio, è improbabile che un’app che mostri gli orari dei treni per la metropolitana di Londra sia utile per gli utenti al di fuori del Regno Unito. Per questo tipo di situazione, Google Play Store fornisce opzioni di filtro nella Play Console che ti consentono di controllare la disponibilità della tua app per motivi non tecnici come la lingua dell’utente o il gestore telefonico.
Il filtro per la compatibilità tecnica (come i componenti hardware richiesti) si basa sempre sulle informazioni contenute nel file APK. Tuttavia, il filtraggio per motivi non tecnici (come le impostazioni internazionali geografiche) viene sempre gestito in Google Play Console.