Tips and tricks: velocizzare gradle e ridurre gli apk parte 2

Posted by on Ott 16, 2015 in Tutte | 0 comments

Tips and tricks: velocizzare gradle e ridurre gli apk parte 2

Nella prima parte dell’ articolo vi ho parlato di proguard, un tool che oltre ad “obscurare” il codice può ridurre un apk anche del 35% o più. In questa seconda parte vi elencherò altre tecniche per mettere a dieta l’ apk.
Da pochi giorni Google ha aumentato il peso massimo di un apk per il Play Store portandolo a  100mb, ma è importante che la nostra applicazione non sia molto pesante perchè può essere un deterrente al download e ai successivi aggiornamenti.

Lint

Uno strumento che ci permette di ottimizzare il codice è senza dubbio Lint. Lint è un tool che analizza il codice sia java che xml e crea un report con:

  • risorse non utilizzate
  • tag xml non utilizzati e non chiusi correttamente
  • variabili non utilizzate
  • import di package non utilizzati

L’ elenco è molto vasto e soprattutto l’ individuazione delle risorse non utilizzate ci permette di risparmiare kb inutili. Il sistema di building di Android non prevede il filtro delle risorse non utilizzate. Se in un nostro progetto inseriamo in una delle cartelle drawable o in asset un’ immagine di 10 mb anche se nè da xml nè da codice la utilizziamo  il file  apk conterrà ugualmente l’ immagine facendo aumentare il peso finale.
E’ normale che durante lo sviluppo il designer (o il project manager) cambi idea su icone, layout  e spesso non si ha il tempo ne l’ opportunità di cancellare le vecchie risorse. Font, icone, png di background, layout, tutte risorse che incrementano i kb della release finale.

Lint è facile da usare. E’ già attivo durante lo sviluppo, Android Studio per esempio ci mostra sempre se una variabile o una classe non sono utilizzate. Per avere una visione di insieme possiamo utilizzare Lint da interfaccia: Analyze-> Inspect Code

inspect

Nella successiva schermata possiamo scegliere il modulo app cosi che Lint analizzi solo il nostro codice e non il codice di altri moduli, librerie.

moduloapp

Il risultato è visibile in basso e basta cliccare sulla voce per aprire il file e modificare come consiglia Lint.

report

Possiamo utilizzare Lint anche da riga di comando se preferite:

E’ possibile creare anche un report in formato html:

Gradle shrinking

Lint è utile ma crea degli alert e un report, poi è compito dello sviluppatore sistemare secondo indicazione o eliminare le risorse non utilizzate.
Gradle  permette, con poche istruzioni, di ridurre il nostro apk in automatico. Aggiungiamo e settiamo a true la proprietà shrinkResources

Con una sola riga, in automatico, saranno eliminate le risorse non utilizzate. La proprietà shrinkResources richiede soltanto che proguard sia attivato con minifyEnabled true
Uno dei problemi dell’ eliminazione delle risorse inutilizzate in automatico è che il tool potrebbe rimuovere risorse che vengono usate in maniera dinamica. Per prevenire questo possiamo definire un’ eccezione. Creiamo un file xml nella cartella res/raw. Il nome del file deve essere keep.xml. Il contenuto:

Quando usate proguard e/o shrinkResources è importante ricontrollare il funzionamento dell’ applicazione. I tool automatici fanno miracoli ma è sempre meglio controllare e testare prima della pubblicazione sul play store.

Possiamo ridurre il nostro apk anche “manualmente” cioè configurando Gradle in modo tale da eliminare quello che non ci serve o che non ci serve per quella release.

Per esempio possiamo mantenere solo alcune lingue o solo alcune risoluzioni:

In questo caso se avessimo più lingue, magari lingue asiatiche come il cinese, con resConfigs manteniamo solo le lingue inglese ed italiano. Anche per le varianti di risoluzioni/densità possiamo mantenerne solo alcune.

Un accorgimento semplice ma molto utile può essere usato nelle dipendenze. Per esempio invece di  inserire la dipendenza di tutto il  play service:

 importiamo solo i servizi che ci servono; per esempio

L’ import delle dipendenze è  selettivo; importeremo solo maps e wearable: cosi da escludere gli altri servizi di google non necessari al nostro progetto.

Non esiste la ricetta magica ma con un po di configurazioni, ottimizzazioni e prove possiamo ridurre il peso dell’ apk. Oltre a Proguard, Lint, Gradle è importante utilizzare immagini già ottimizzate e immagini in formato png. Utilizzate anche le 9-patches per sfondi e pulsanti, riducono di tanto l’ utilizzo di grosse png “ripetitive”.

 

No Comments

Trackbacks/Pingbacks

  1. Tips and tricks: velocizzare gradle e ridurre gli apk parte 1 | Giuseppe Sorce – Android Developer - […] seconda parte di questo articolo vi mostrerò alcune tecniche per ridurre il peso dell’ apk […]

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *