Eventi e programmi

Utilizza R8 per ridurre, ottimizzare e accelerare la tua app

Lettura di 5 minuti
Ben Weiss
Developer Relations Engineer

Utilizzare R8 per ridurre, ottimizzare e accelerare la tua app

Ti diamo il benvenuto al primo giorno della settimana dedicata alle prestazioni di Android.

Iniziamo con la modifica più efficace e semplice che puoi apportare per migliorare il rendimento della tua app: l'attivazione dell'ottimizzatore R8 in modalità completa.

Probabilmente conosci già R8 come strumento per ridurre le dimensioni della tua app. Svolge un ottimo lavoro di rimozione del codice e delle risorse inutilizzati, riducendo le dimensioni dell'app. Ma il suo vero potere, quello in cui è davvero g-R8, è quello di ottimizzatore.

Quando attivi la modalità completa e consenti le ottimizzazioni, R8 esegue ottimizzazioni approfondite dell'intero programma, riscrivendo il codice in modo che sia fondamentalmente più efficiente. Non si tratta solo di una piccola modifica.

Dopo aver letto questo articolo, guarda l'introduzione della Performance Spotlight Week all'ottimizzatore R8 su YouTube.

In che modo R8 migliora il rendimento della tua app

image.png

Vediamo nel dettaglio i passaggi più importanti eseguiti dall'ottimizzatore R8 per migliorare le prestazioni delle app.

Il tree shaking è il passaggio più importante per ridurre le dimensioni dell'app. Durante questa fase, l'ottimizzatore R8 rimuove il codice inutilizzato dalle librerie da cui dipende la tua app, nonché il codice inutilizzato dal tuo codebase.

L'inlining dei metodi sostituisce una chiamata al metodo con il codice effettivo, il che migliora le prestazioni di runtime.

Unione delle classi e altre strategie vengono applicate per rendere il codice più compatto. Tutte le tue bellissime astrazioni, come interfacce e gerarchie di classi, non contano in questo momento e probabilmente verranno rimosse.

La minimizzazione del codice viene utilizzata per modificare i nomi di classi, campi e metodi in nomi più brevi e senza significato. Quindi, anziché MyDataModel, potresti ritrovarti con un corso chiamato a. Questo è ciò che causa la maggior parte della confusione durante la lettura delle analisi dello stack di un'app ottimizzata con R8. Tieni presente che abbiamo migliorato questo aspetto in AGP 9.0.

La riduzione delle risorse riduce ulteriormente le dimensioni di un'app rimuovendo le risorse inutilizzate, come i file XML e le risorse disegnabili.

Applicando questi passaggi, l'ottimizzatore R8 migliora i tempi di avvio delle app, consente un rendering dell'interfaccia utente più fluido, con meno frame lenti e bloccati, e migliora l'utilizzo complessivo delle risorse sul dispositivo.

Case study: miglioramenti delle prestazioni di Reddit con R8

Come esempio dei miglioramenti delle prestazioni che R8 può apportare, diamo un'occhiata a un esempio di Reddit. Dopo aver attivato R8 in modalità completa, l'app Reddit per Android ha registrato miglioramenti significativi delle prestazioni in varie aree.

image.png

Sottotitolo: In che modo R8 ha migliorato le prestazioni dell'app Reddit

Il team ha osservato un avvio a freddo più rapido del 40% , una riduzione del 30% degli errori "L'applicazione non risponde" (ANR), un miglioramento del 25% nel rendering dei frame e una riduzione del 14% delle dimensioni dell'app.

Questi miglioramenti sono fondamentali per la soddisfazione degli utenti. Un avvio più rapido significa meno attesa e accesso più rapido ai contenuti. Un numero inferiore di errori ANR porta a un'app più stabile e affidabile, riducendo la frustrazione degli utenti. Il rendering dei frame più fluido elimina i problemi dell'interfaccia utente, rendendo lo scorrimento e le animazioni fluidi e reattivi. Questo impatto tecnico positivo era chiaramente visibile anche nel sentiment degli utenti.

Puoi scoprire di più sui miglioramenti sul nostro blog.

Effetti collaterali non tecnici dell'utilizzo di R8

Durante la nostra collaborazione con i partner, abbiamo notato che questi miglioramenti tecnici hanno un impatto diretto sulla soddisfazione degli utenti e possono riflettersi sulla fidelizzazione degli utenti, sul coinvolgimento e sulla durata della sessione. Anche la user stickiness, che può essere misurata con gli utenti attivi giornalieri, settimanali o mensili, è stata influenzata positivamente dai miglioramenti delle prestazioni tecniche. Inoltre, abbiamo notato un aumento delle valutazioni delle app sul Play Store in correlazione con l'adozione di R8. Condividere queste informazioni con i proprietari dei prodotti, i CTO e i responsabili delle decisioni può contribuire ad accelerare le prestazioni della tua app.

image.png

Quindi chiamiamola con il suo nome: l'ottimizzazione deliberata del rendimento è una virtù.

Guida per un'app più performante

Abbiamo ricevuto feedback secondo cui le nostre indicazioni per gli sviluppatori per R8 dovevano essere migliorate. Quindi ci siamo messi al lavoro. Le indicazioni per gli sviluppatori per l'ottimizzatore R8 ora sono molto più pratiche e forniscono indicazioni complete per abilitare ed eseguire il debug di R8.

La documentazione fornisce indicazioni sulla strategia di adozione di alto livello, sottolineando l'importanza di scegliere librerie ottimizzate e, soprattutto, di adottare le funzionalità di R8 in modo incrementale per garantire la stabilità. Questo approccio graduale ti consente di sfruttare in sicurezza i vantaggi di R8, fornendoti al contempo indicazioni sui problemi difficili da eseguire il debug.

Abbiamo ampliato in modo significativo le nostre indicazioni sulle regole di conservazione, che sono il meccanismo principale per controllare l'ottimizzatore R8. Ora forniamo una sezione su cosa sono le regole di conservazione, come applicarle e ti guidiamo con le best practice per scriverle e mantenerle. Forniamo inoltre casi d'uso ed esempi pratici e attuabili, per aiutarti a capire come impedire correttamente a R8 di rimuovere il codice necessario in fase di runtime, ad esempio il codice a cui si accede tramite reflection o l'utilizzo dell'interfaccia nativa JNI.

La documentazione ora copre anche i passaggi di follow-up essenziali e gli scenari avanzati. Abbiamo aggiunto una sezione su test e risoluzione dei problemi, in modo da poter verificare i miglioramenti delle prestazioni e risolvere eventuali problemi potenziali. La sezione Configurazioni avanzate spiega come scegliere come target varianti di build specifiche, personalizzare le risorse da conservare o rimuovere e offre istruzioni speciali di ottimizzazione per gli autori di librerie, garantendo la possibilità di fornire un pacchetto ottimizzato e compatibile con R8 da utilizzare per altri sviluppatori.

Sfruttare appieno il potenziale dell'ottimizzatore R8

A partire dalla versione 8.0 del plug-in Android per Gradle, lo strumento di ottimizzazione R8 utilizza la "modalità completa" per impostazione predefinita. Se il tuo progetto è stato sviluppato nel corso di molti anni, potrebbe ancora includere un flag legacy per disattivarlo. Controlla il file gradle.properties per questa riga e rimuovila.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Ora controlla se hai attivato R8 nel file build.gradle.kts dell'app per la variante di rilascio. Viene attivata impostando isMinifyEnabled e isShrinkResources su true. In questo passaggio puoi anche passare file di configurazione predefiniti e personalizzati.

release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

Case study: miglioramenti delle prestazioni di Disney+

Gli ingegneri di Disney+ investono nelle prestazioni dell'app e ne ottimizzano l'esperienza utente. A volte anche cambiamenti apparentemente piccoli possono avere un impatto enorme. Durante l'ispezione della configurazione R8, il team ha scoperto che veniva utilizzato il flag -dontoptimize. È stato introdotto da un file di configurazione predefinito, ancora oggi utilizzato in molte app.

Dopo aver sostituito proguard-android.txt con proguard-android-optimize.txt, il team di Disney+ ha riscontrato miglioramenti significativi nelle prestazioni della propria app.

image.png

Dopo l'implementazione di una nuova versione dell'app contenente questa modifica per gli utenti, Disney+ ha registrato un avvio dell'app più rapido del 30% e il 25% in meno di errori ANR percepiti dall'utente. 

Oggi molte app utilizzano ancora il file proguard-android.txt che contiene il flag -dontoptimize. Ed è qui che entrano in gioco i miglioramenti ai nostri strumenti.

Supporto degli strumenti

A partire dal rilascio di funzionalità Android Studio Narwhal 3, vedrai un avviso lint quando utilizzi proguard-android.txt

image.png

A partire da AGP 9.0, non supporteremo più il file. Ciò significa che dovrai eseguire la migrazione a proguard-android-optimize.txt.

Abbiamo anche investito in nuove funzionalità di Android Studio per semplificare il debug del codice ottimizzato per R8. A partire da AGP 9.0, ora puoi eseguire automaticamente la deoffuscamento delle analisi dello stack all'interno di Logcat di Android Studio per le build elaborate con R8, il che ti aiuta a individuare la riga di codice esatta che causa un problema, anche in un'app completamente ottimizzata. Questo argomento verrà trattato in modo più approfondito nel post del blog di domani su questa settimana di Android Performance Spotlight.

Passaggi successivi

Guarda l'introduzione della settimana di approfondimento sul rendimento dell'ottimizzatore R8 su YouTube.

📣 Partecipa alla sfida del rendimento.

È ora di scoprire i vantaggi per te.

Ti invitiamo ad attivare la modalità completa R8 per la tua app oggi stesso.

  1. Per iniziare, segui le nostre guide per gli sviluppatori: Attivare l'ottimizzazione delle app.
  2. Controlla se utilizzi ancora proguard-android.txt e sostituiscilo con proguard-android-optimize.txt.
  3. Poi, misura l'impatto. Non limitarti a sentire la differenza, verificala. Misura i miglioramenti delle prestazioni adattando il codice della nostra  app di esempio Macrobenchmark su GitHub per misurare i tempi di avvio prima e dopo.

Siamo certi che noterai un miglioramento significativo delle prestazioni della tua app. Utilizza #optimizationEnabled per qualsiasi domanda sull'attivazione o la risoluzione dei problemi di R8. Siamo a tua disposizione.

Porta le tue domande per la sessione Chiedi ad Android di venerdì

Utilizza l'hashtag #AskAndroid per porre domande sul rendimento. Durante la settimana monitoriamo le tue domande e risponderemo a diverse di queste nella sessione Chiedi ad Android sul rendimento di venerdì 21 novembre.Continua a seguirci domani, quando approfondiremo ulteriormente il debug e la risoluzione dei problemi. Per il momento, inizia a utilizzare R8 e metti la tua app sulla corsia preferenziale.

Scritto da:

Continua a leggere