Fino a qualche anno fa, più precisamente fino al 2012, per aggiornare un’applicazione Android era necessario scaricare l’intero file APK del software. Poi è stato possibile ridurre il traffico dati tramite il download della parte di codice modificata, con ovvi benefici per l’utente finale. Oggi Google annuncia l’intenzione di effettuare un ulteriore passo in avanti.
Il gruppo di Mountain View si rivolge alla community di sviluppatori per presentare un metodo chiamato File-by-File Patching in grado di ridurre in media del 65% le dimensioni dell’update. Si parta dal presupposto che un APK è sostanzialmente un archivio, compresso tramite il sistema Deflate: di fatto, si tratta di un file in qualche modo paragonabile ad uno ZIP o un RAR. La tabella allegata di seguito mostra come, in alcuni casi, si possa arrivare ad una riduzione che supera il 90%: per un update di Netflix su Android, ad esempio, bisognerà scaricare un pacchetto da 1,2 MB anziché da 7,7 MB come avviene oggi.
Il funzionamento del File-by-File Patching può essere così riassunto: identifica le porzioni di codice modificate mettendo a confronto il file APK della vecchia versione con quello dell’aggiornamento, applica il delta (la differenza) all’archivio non compresso sul dispositivo dell’utente e lo ricomprime, dopodiché si assicura che la release installata sia la stessa presente su Play Store. In altre parole, le differenze vengono identificate all’interno dell’archivio non compresso, dove è più semplice individuarle, anziché su quello compresso, in cui anche una piccola modifica (ad esempio il cambio di una sola voce all’interno dei menu) può comportare la ristrutturazione dell’intero APK, causando un download più pesante.
Un metodo efficace, che presenta però un potenziale svantaggio: essendo l’operazione condotta per intero in locale, potrebbe risultare gravosa o fonte di rallentamenti sui dispositivi più datati o con meno risorse hardware. Consapevole di questo possibile limite, bigG per il momento ha deciso di implementare il metodo solo per gli aggiornamenti che vengono eseguiti in background e che dunque dovrebbero passare del tutto inosservati agli occhi dell’utente.