File AAB, cosa sono e a cosa servono?

File AAB: cosa sono, in cosa si differenziano dai file APK, quali sono i vantaggi e gli svantaggi di questo nuovo standard?

Avatar di Francesca Fenaroli

a cura di Francesca Fenaroli

Il formato APK (Android App Package) non è più lo standard per i dispositivi Android: già da agosto 2021 il Google Play Store ha confermato per le nuove applicazioni l'obbligo di utilizzo del formato di file AAB (Android App Bundle).

Si tratta senza dubbio di un cambiamento importante nel mondo di Android, con conseguenze a lungo termine che potrebbero cambiare del tutto il modo di rapportarsi a questo sistema operativo, che però non è stato nemmeno notato dalla maggior parte degli utenti finali.

In questo articolo cercheremo quindi di fare chiarezza sui file AAB, sottolineando le differenze con i file APK ed evidenziando vantaggi e svantaggi di questo nuovo standard.

Android App Bundles: cosa sono?

AAB (Android App Bundle) è un formato di packaging modulare per le applicazioni Android presentato da Google nel 2018. Al pari di APK, un pacchetto AAB contiene al proprio interno il codice delle applicazioni Android oltre alle risorse che ne fanno parte, come immagini, audio e altri contenuti multimediali ma anche traduzioni in diverse lingue.

Una volta completato lo sviluppo dell'app, i developer la caricano su Google Play, il quale a sua volta gestisce in-cloud la generazione delle chiavi di firma dei pacchetti. Questi ultimi sono poi scaricati dagli utenti tramite il Play Store in formato APK, proprio come in passato.

Se dunque dal lato dell'utente finale non c'è apparentemente differenza, perché il passaggio allo standard AAB è così rilevante nel mondo di Android e perché svolge un ruolo cruciale nel ridurre la dimensione delle applicazioni scaricate dal Play Store?

AAB vs APK: tutte le differenze

Come già accennato i formati AAB e APK presentano due differenze principali, rispettivamente nella distribuzione delle risorse e nella generazione delle chiavi di firma. Per comprenderle al meglio, prendiamo come esempio un'applicazione che contiene, all'interno delle risorse del pacchetto, i seguenti elementi:

  • Video in FHD e in 4K
  • Lingua italiana e cinese

Supponiamo che l'utente finale che vuole scaricare l'app sia in possesso di uno smartphone che supporta solo la risoluzione FHD e abbia impostato come lingua predefinita l'italiano. Scaricando un APK "classico" l'utente riceverà all'interno del pacchetto tutte e quattro le risorse menzionate, comprese quelle non supportate dal suo dispositivo.

Scaricando un'applicazione caricata sul Play Store in formato AAB, Google restituirà invece solo le risorse necessarie, creando un pacchetto APK ad hoc per le esigenze ogni utente detto split APK. Tornando al nostro esempio, non ci sarà necessità di far lievitare il peso dell'app con contenuti in 4K o file contenenti lingue asiatiche.

Ovviamente, nel caso in cui il nostro ipotetico utente decidesse di imparare il cinese e lo impostasse come lingua predefinita sul suo device, Google Play si occuperà di aggiornare lo split APK dell'applicazione aggiungendo la funzionalità richiesta.

La seconda grande differenza tra AAB e APK riguarda le chiavi di firma, che nel caso degli Android App Bundle sono gestite direttamente dal Play Store. Le chiavi di firma hanno finalità di sicurezza e servono a verificare l'eventuale compromissione o manomissione di un pacchetto da parte di malintenzionati.

Nel caso degli AAB sarà dunque Google stesso, e non più il developer, a firmare il pacchetto di applicazioni scaricato dagli utenti. La sicurezza di queste chiavi di firma è garantita dal sistema Key Management System di Google, una struttura in-cloud sicura e funzionale.

Per configurare la firma dell'app da parte di Google Play gli sviluppatori dovranno:

  1. Creare una chiave di caricamento e firmare il pacchetto app;
  2. Preparare la release e cambiare la chiave di firma nell'app con la chiave generata da Google;
  3. Registrare la chiave di firma dell'app di Google Play con il provider dell'API, se l'applicazione lo prevede.

Vantaggi e svantaggi dei file AAB

Il vantaggio più evidente per gli utenti finali nell'utilizzo del formato AAB è la riduzione delle dimensioni dei pacchetti delle app, anche se non sembra esserci una stima concorde sull'impatto effettivo di questo nuovo formato.

Nel 2018 Dom Elliott, Product Manager presso Google Play, aveva stimato in un articolo di Medium una riduzione del 35% nelle dimensioni dei pacchetti app grazie al formato AAB, studiato appositamente per risolvere il problema del peso eccessivo delle app, che ha un impatto negativo sulle statistiche di download e di utilizzo da parte dell'utenza.

In un post del 2021 Google abbassa invece questa stima al 15%. In ogni caso il passaggio a un sistema dinamico e modulare di download delle risorse legate a un'app rappresenta un vantaggio a favore dei file AAB, anche se più contenuto rispetto alle aspettative iniziali.

Questo nuovo formato garantisce anche ai developer aggiornamenti più veloci delle applicazioni, dal momento che specifiche funzionalità possono essere destinate a categorie diverse di dispositivi, riducendo così anche il rischio di errori e incompatibilità interne. Proprio per facilitare ulteriormente questo processo Google ha di recente introdotto il sistema delle classi di prestazione per i dispositivi Android.

Al posto di caricare sul Play Store versioni Pro e Lite dello stesso prodotto, oppure applicazioni separate in base alla lingua di destinazione, gli sviluppatori potranno caricare un singolo file AAB contenente tutte le risorse tramite Android Studio o la riga di comando. La Play Console permetterà l'upload di pacchetti fino a 150MB, con possibilità di estensione fino a diversi GB via asset pack per i giochi.

Ci sono però alcuni svantaggi nell'utilizzo dei file AAB, principalmente dovuti alla natura stessa di Android come sistema aperto all'installazione di contenuti da terze parti. I cambiamenti introdotti nelle chiavi di firma rendono incompatibili tra loro app del Play Store e aggiornamenti provenienti da altri store, firmati dal developer e non da Google.

Il fatto che sia Google a detenere ora le chiavi di firma delle app solleva anche alcuni dubbi dal punto di vista della sicurezza. Il codice di trasparenza della società di Mountain View è sufficiente a non sollevare allarmi, riporta XDA Developers, ma in ogni caso esiste un potenziale, anche se bassissimo, rischio di data breach o manomissione dei permessi:

Nel modello tradizionale di distribuzione delle app via APK, Google non può modificare le app senza cambiare la firma. [...] Con gli App Bundles e la firma delle app, Google potrebbe iniettare silenziosamente il proprio codice nelle app prima di distribuirle. La firma non cambierebbe perché sarebbe sempre Google a possedere la chiave di firma.

Occorre specificare che quest'ultima possibilità è estremamente remota: come dimostrano le recenti scelte intraprese dall'azienda in Russia, è più probabile che Google si ritiri del tutto da un mercato dove le condizioni di trasparenza non sono rispettate piuttosto che autorizzare questo tipo di manomissione.

Il futuro di Android: la fine del sideloading?

Come già accennato, l'utilizzo dei file AAB complica le procedure di sideloading nel caso di aggiornamenti o versioni beta di app del Play Store. Pensando alle prospettive a lungo termine di Android, questo progressivo accentramento però potrebbe mettere in pericolo l'attività del sideloading in toto.

Se da una parte Google non sembra intenzionata a porre fine al sideloading allo stesso modo di Apple, che ostacola questa pratica in ogni modo possibile, dall'altra la progressiva sostituzione del formato APK con AAB rende senza dubbio più difficile trovare e scaricare pacchetti app in questo nuovo formato fuori dal Play Store.

Esistono però fonti di terze parti come APKMirror e APKPure che hanno trovato un modo per aggirare questo problema, creando formati di packaging alternativi come APKM e XAPK, contenenti anch'essi file APK base e pacchetti extra di risorse, installabili per mezzo di applicazioni come Split APKs Installer.