Testare e risolvere i problemi di ottimizzazione

Dopo aver attivato l'ottimizzazione dell'app, controlla che l'app funzioni come previsto e che la configurazione R8 funzioni come previsto. I passaggi generali sono i seguenti:

  1. Testa i percorsi utente critici (CUJ) della tua app: ad esempio, assicurati che gli utenti possano accedere ed eseguire altre attività importanti.
  2. Misura i miglioramenti del rendimento utilizzando i benchmark: esegui un benchmark della tua app prima e dopo aver attivato l'ottimizzazione dell'app.

Se riscontri problemi, R8 fornisce strumenti per aiutarti a risolverli. Se non riesci a risolvere un problema con R8, segnala un bug.

Suggerimenti generali

I problemi relativi a R8 sono spesso specifici della tua app, ma di seguito sono riportati alcuni suggerimenti generali per semplificare il debug:

  • Disattiva temporaneamente l'offuscamento:R8 offusca il codice nell'ambito del processo di ottimizzazione. L'oscuramento in genere non è la causa degli errori, ma lo rende più difficile da eseguire il debug. Aggiungi i flag ‑dontobfuscate e ‑dontoptimize al file delle regole keep per individuare il codice problematico.
  • Controlla la riflessione: se riscontri un'eccezione no such element (Nessun elemento di questo tipo) come

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

    in genere, l'eccezione indica che il campo in questione viene utilizzato tramite la riflessione e devi aggiungere una regola di mantenimento.

  • Esamina il bytecode:la maggior parte dei problemi di R8 richiede l'ispezione del bytecode, che puoi eseguire con strumenti come APK Analyzer.

Controllare quali regole vengono applicate

Per generare un report completo di tutte le regole applicate da R8 durante la compilazione del progetto, includi quanto segue nel file proguard‑rules.pro del modulo dell'app:

-printconfiguration <output-dir>/<report-name>.txt

Puoi specificare qualsiasi percorso e nome file. Se non specifichi un percorso o un nome file, R8 genera il report sulle regole in <module-name>/build/outputs/mapping/<build-type>/configuration.txt.

Capire perché il codice è stato mantenuto

Se vedi codice mantenuto che pensavi fosse stato rimosso, utilizza l'opzione di configurazione ‑whyareyoukeeping per capire perché è stato mantenuto. R8 genera un percorso dal codice mantenuto a uno dei punti di accesso della tua app. Per ulteriori informazioni, consulta la documentazione di ‑whyareyoukeeping nel manuale di Proguard.

Recuperare l'analisi dello stack originale

Il codice elaborato da R8 viene modificato in vari modi in modo che la traccia dello stack non si riferisca più al codice originale. Ad esempio, i numeri di riga e i nomi di classi e metodi possono cambiare. Per recuperare la traccia dello stack originale, R8 fornisce lo strumento a riga di comando retrace, incluso nel pacchetto degli strumenti a riga di comando.

Per utilizzare ReTrace, fornisci un file di mapping e un file di analisi dello stack. Il file di mappatura, denominato mapping.txt, viene incluso automaticamente nel tuo Android App Bundle (AAB). Per maggiori dettagli, consulta la documentazione relativa al ricostruttore e l'articolo del Centro assistenza Play Console su come deobfuscare le tracce dello stack degli arresti anomali.