Non è mai due volte la stessa app

Android multifronte

di

thumbnail

12

gen

2015

Sicuri di avere installato la stessa applicazione che avete visto proprio qualche secondo fa sul dispositivo del vostro amico?

Una applicazione Android consiste oggi in un artefatto astratto disponibile in un negozio online (Play Store) che, a sua volta, si presenta come una applicazione per installare tutte le altre. Abbastanza ricorsivo come concetto, non trovate?

Infatti il processo che avviene nel momento in cui si seleziona e si installa una nuova applicazione tramite il Play Store non è così scontato, né intuitivo. Tra tutte le caratteristiche di questo procedimento, una in particolare potrebbe turbare la vostra quiete: il titolo dell’applicazione selezionata non contraddistingue formalmente il programma fisicamente installato nella memoria del dispositivo Android. Strano, ma vero.

Procediamo sul pratico e vediamo passo per passo cosa accade quando installiamo una nuova applicazione. Questo accade sul lato utente:

  • si accede a Play Store (tramite l’applicazione o tramite sito web)
  • si cerca e si seleziona una particolare applicazione
  • si seleziona il pulsante Installa
  • vari permessi vengono richiesti all’utente, che li concede (oppure no)
  • in caso positivo, inizia il download del pacchetto applicazione APK (Android Package) da Play Store
  • in coda al download inizia automaticamente la fase di installazione
  • l’applicazione è ora installata e i servizi connessi sono stati avviati
  • l’utente può ora aprire l’applicazione (se presenta un front-end)

 
Questa è la situazione sul lato Play Store:

  • un utente U è connesso ai servizi Google (tramite account con cui ha eseguito l’accesso sul dispositivo Android o tramite login via web)
  • l’utente U cerca e seleziona una app A nel catalogo
  • perviene una richiesta di installazione dell’applicazione A per l’utente U sul terminale T (T sarà implicito nel caso di installazione tramite applicazione Play Store su dispositivo)
  • lo store presenta ad U le condizioni (permessi) necessari per procedere all’installazione di A
  • U accetta le condizioni
  • lo store seleziona la versione di A adatta al terminale T secondo i canoni preferiti dal produttore dell’applicazione
  • lo store invia a T l’indirizzo dell’APK selezionato, tramite il quale viene immediatamente richiesto il download

 

Veniamo al punto: l’APK inviato dal Play Store al dispositivo può essere diverso a seconda delle volontà del produttore dell’applicazione stessa. Due utenti diversi – con dispositivi diversi – che scelgono di installare la stessa applicazione dal Play Store in realtà potrebbero scaricare ed installare due archivi diversi.

Terribile! A che scopo? Come funziona? Perché? La risposta tecnica più esauriente la potete trovare nella documentazione ufficiale alla dicitura Multiple APK Support, ma vogliamo spiegare nella pratica quanto c’è da sapere su questo punto.

Multiple APK Support è una feature che Google offre ai produttori di applicazioni per facilitare la creazione e la distribuzione di logiche cross-dispositivo. Questa esigenza nasce per agevolare i lavori all’interno della vasta e diversa galassia dei dispositivi Android. Ho già parlato in precedenti articoli di quante e diverse risoluzioni ed aspect ratio è necessario considerare durante la progettazione dell’app e di quante e diverse compressioni texture possono essere coinvolte nello sviluppo.

In diversi casi diventa sconveniente incorporare in un singolo APK tutti gli asset necessari a garantire l’esecuzione su tutti i dispositivi considerati. Pur supportando i Multiple APK, infatti, la documentazione ufficiale ne sconsiglia l’uso o, con parole loro, incoraggia lo sviluppo e la pubblicazione di un singolo APK.

Quali sono gli usi tipici del Multiple APK Support? Sempre dalla documentazione ufficiale:

  • supportare più formati di compressione texture OpenGL in ogni APK
  • supportare schermi di diversa grandezza/densità in ogni APK
  • supportare un diverso sottoinsieme di dispositivi dentro l’APK
  • supportare diverse piattaforme o versioni dell’app in ogni APK
  • supportare diverse architetture di CPU in ogni APK (come ARM, x86, MIPS e quando si fa uso di Android NDK)

La selezione dell’APK avviene tramite un meccanismo di filtraggio che si avvale degli stessi meccanismi utili a definire i requisiti di un singolo APK, più un codice incrementale chiamato VersionCode. Ogni APK che un produttore vorrà pubblicare sul Play Store dovrà contenere, all’interno di un file chiamato Manifest, una serie di regole che definiscono – tra le altre cose – quali caratteristiche fisiche del dispositivo sono necessarie per eseguire l’applicazione contenuta.

Play Store nasconderà questa applicazione ai dispositivi che non rientrano nei requisiti espressi dal Manifest. Utilizzando Multiple APK Support, il produttore potrà scrivere più Manifest, uno per ogni APK, per sommare tutti i singoli insiemi dei dispositivi compatibili in un aggregato finale. Con ogni probabilità ci saranno sovrapposizioni tra i singoli insiemi e in questi casi verrà selezionato l’APK il cui Manifest ha il VersionCode più alto.

Contrariamente all’App Store Apple, il Play Store Google si preoccupa quindi di consigliare quale versione dell’applicazione sia la migliore per il dispositivo che ne fa richiesta. Di conseguenza il semplice possesso dell’APK di installazione non garantisce il funzionamento corretto dell’app su un tuo dispositivo; tuttavia potrebbe essere adatto a quello del tuo amico. Ma noi non abbiamo mai scaricato un APK fuori dallo store e quindi questi casi non si verificheranno, giusto?




Giacomo Cappellini (@Arkanoid) è da cinque anni analista programmatore e tool-maker di applicazioni per smartphone e tablet, da dieci anni deviato nel multidisciplinare mondo dello sviluppo di videogiochi cross-platform. Nonostante una grave e particolare forma di ossessione verso lo how-it’s-done, trova ancora tempo e modo per parlarne.

Letto 4.628 volte | Tag: , , , , , , , , , , , ,

Lascia il tuo commento