Deoffuscare o simbolizzare le analisi dello stack in caso di arresto anomalo

Arresti anomali e ANR su Android generano un'analisi dello stack, ovvero un'istantanea della sequenza di funzioni nidificate chiamate nel programma fino al momento in cui si è verificato l'arresto anomalo. Queste istantanee possono aiutarti a identificare e risolvere eventuali problemi nel codice sorgente.

Se la tua app o il tuo gioco sono stati sviluppati con Java e utilizzi ProGuard per ottimizzare e offuscare l'app, puoi caricare un file di mapping ProGuard per ogni versione dell'app o del gioco in Play Console. Se la tua app o il tuo gioco sono stati sviluppati utilizzando codice nativo, come C++, puoi caricare un file di simboli di debug per ogni versione dell'app o del gioco in Play Console. In questo modo è più semplice analizzare e risolvere i problemi relativi ad arresti anomali e ANR.

Importante: sono supportati solo i file di mapping compatibili con ReTrace per il deoffuscamento delle app compilate in Java. Si tratta dello stesso formato utilizzato da ProGuard o R8.

Passaggio 1: genera un file di deoffuscamento o di simbolizzazione

Per deoffuscare o simbolizzare gli arresti anomali e gli ANR per una versione della tua app, devi prima generare i file richiesti per quella versione dell'app. Devi generare e caricare un file per ogni nuova versione della tua app affinché il deoffuscamento o la simbolizzazione funzionino.

Java: generare un file di mapping ProGuard

Per deoffuscare le analisi dello stack Java, devi prima generare un file di mapping ProGuard. Per sapere come fare, consulta il sito Google Developers.

Nativo: generare un file dei simboli di debug

Plug-in Android per Gradle versione 4.1 e successive

Se il tuo progetto crea un Android App Bundle, puoi includere automaticamente il file dei simboli di debug al suo interno. Per includere questo file, aggiungi quanto segue al file build.gradle dell'app:

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Nota: il limite per il file di simboli di debug è 800 MB. Se la dimensione dei simboli di debug è troppo grande, utilizza SYMBOL_TABLE anziché FULL per ridurre le dimensioni del file.

Se il tuo progetto crea un APK, utilizza l'impostazione di build build.grade in alto per generare il file dei simboli di debug separatamente. Carica manualmente il file dei simboli di debug in Google Play Console come descritto di seguito nel Passaggio 2: carica un file di deoffuscamento o di simbolizzazione. Durante il processo di compilazione, il plug-in Android per Gradle genera questo file nella seguente posizione del progetto:

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Plug-in Android per Gradle versione 4.0 e precedenti (e altri sistemi di compilazione)

Come parte del processo di compilazione di un app bundle o di un APK, il plug-in Android per Gradle conserva una copia delle librerie contenenti informazioni di debug in una directory di progetto. Questa directory segue una struttura simile alla seguente:

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Nota: se utilizzi un sistema di compilazione diverso, puoi modificarlo per archiviare le librerie contenenti informazioni di debug in una directory con la struttura richiesta, riportata qui sopra.

  1. Comprimi i contenuti di questa directory:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Carica manualmente il file symbols.zip in Play Console come descritto di seguito nel Passaggio 2: carica un file di deoffuscamento o di simbolizzazione.

Il limite per il file di simboli di debug è 800 MB. Se il file è troppo grande, è probabile che i file .so contengano una tabella di simboli (nomi di funzioni) e anche informazioni di debug in DWARF (nomi di file e righe di codice). Questi simboli non sono necessari per simbolizzare il codice e possono essere rimossi eseguendo questo comando:

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Nota: $OBJCOPY rimanda alla versione specifica dell'ABI che stai rimuovendo, ad esempio:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Passaggio 2: carica un file di deoffuscamento o di simbolizzazione

Per deoffuscare o simbolizzare gli arresti anomali e gli ANR per una versione della tua app, devi caricare i file di deoffuscamento o di simbolizzazione per ogni versione dell'app.

Importante: questo passaggio è obbligatorio solo per gli sviluppatori che utilizzano APK. Se utilizzi un app bundle e un plug-in Android per Gradle versione 4.1 o successive, non devi fare nulla. Il file di deoffuscamento viene recuperato automaticamente dal bundle e puoi passare al Passaggio 3: visualizza le analisi dello stack in caso di arresto anomalo deoffuscate. Puoi saperne di più sugli app bundle sul sito per sviluppatori Android.

Caricare file usando Play Console

Per caricare un file di deoffuscamento o di simbolizzazione:

  1. Apri Play Console.
  2. Seleziona un'app.
  3. Nel menu a sinistra, seleziona Release > Explorer per app bundle.
  4. Utilizzando il selettore nell'angolo in alto a destra, scegli l'elemento pertinente.
  5. Seleziona la scheda Download e scorri verso il basso fino alla sezione "Asset".
  6. Fai clic sulla freccia di caricamento relativa al file di mapping o a quello dei simboli di debug, a seconda del caso, per caricare il file di deoffuscamento o di simbolizzazione per la versione dell'app.
Caricare file utilizzando l'API Google Play Developer

Per caricare file utilizzando l'API Google Play Developer, visita il sito Google Developers.

Passaggio 3: visualizza le analisi dello stack in caso di arresto anomalo deoffuscate

Dopo aver caricato un file di mapping ProGuard o un file dei simboli di debug per una versione dell'app, gli arresti anomali e gli ANR che si verificano successivamente verranno deoffuscati. Puoi esaminare le analisi dello stack deoffuscate relative a singoli arresti anomali e ANR nella pagina Arresti anomali e ANR dell'app.

  1. Apri Play Console.
  2. Seleziona un'app.
  3. Nel menu a sinistra, seleziona Qualità > Android vitals > Arresti anomali e ANR.
  4. Seleziona un arresto anomalo.
  5. Nella sezione "Analisi dello stack", vedrai le analisi dello stack deoffuscate e simbolizzate.

Importante: dopo aver caricato un file di mapping per una versione dell'app, verranno deoffuscati solo i futuri arresti anomali e ANR per quella versione. Arresti anomali e ANR relativi a una versione dell'app che si verificano prima del caricamento del rispettivo file di mapping non verranno deoffuscati.

Domande frequenti

Non voglio utilizzare il deoffuscamento/la simbolizzazione di Play Console. Posso farlo offline?

Play Console utilizza ndk-stack per simbolizzare le analisi dello stack per le app native e ReTrace per gli arresti anomali di Java. Se decidi di non condividere i file di deoffuscamento, puoi copiare gli stack di arresto anomalo offuscati da Play Console e utilizzare offline lo strumento appropriato per simbolizzarli. Questa procedura deve essere svolta manualmente per ogni stack di arresto anomalo, pertanto diventa lenta e lunga. Se fornisci i file di deoffuscamento, Play Console si occuperà di tutto.

Ho caricato il file di deoffuscamento/simbolizzazione. Perché i miei arresti anomali e ANR sono ancora offuscati?

Dopo aver caricato un file di mapping ProGuard o un file di simboli di debug per una versione dell'app, solo gli arresti anomali e gli ANR che si verificano successivamente verranno deoffuscati. Dovrai attendere che i dispositivi degli utenti segnalino nuovi arresti anomali e ANR prima di vederli deoffuscati in Play Console.

Dopo aver caricato il file di deoffuscamento/simbolizzazione, perché gli arresti anomali e gli ANR vengono deoffuscati solo parzialmente?

Ciò è dovuto al caricamento di un file di deoffuscamento/simbolizzazione incompleto. Assicurati di includere i file di simbolizzazione per l'intera app, soprattutto se utilizzi un processo di compilazione complesso o a più fasi. Uno dei motivi più comuni per il deoffuscamento parziale è l'utilizzo di una raccolta di terze parti. In questo caso, potresti riuscire a ottenere i file di deoffuscamento dal fornitore della raccolta.

Dopo aver caricato il file di deoffuscamento/simbolizzazione, perché sembra che si verifichino arresti anomali e ANR meno frequenti ma più gravi?

Senza i file di deoffuscamento, lo stesso arresto anomalo o ANR su un dispositivo a 32 e 64 bit oppure su un dispositivo ARM o Intel verrà visualizzato separatamente. Fornendo i file di deoffuscamento, possiamo raggruppare questi arresti anomali, offrendoti una migliore prospettiva degli arresti anomali e degli ANR di maggiore impatto per la tua app.

Che cosa succede se dimentico di caricare il file?

Se dimentichi di caricare il file per una nuova versione dell'app, gli arresti anomali e gli ANR torneranno a essere offuscati. Segui le istruzioni riportate sopra per caricarlo ora. Dopo aver caricato un file di mapping ProGuard o un file di simboli di debug per una versione dell'app, solo gli arresti anomali e gli ANR che si verificano successivamente verranno deoffuscati. Dovrai attendere che i dispositivi degli utenti segnalino nuovi arresti anomali e ANR prima di vederli deoffuscati in Play Console.

Per evitare il rischio di dimenticare di caricare il file, prendi in considerazione la possibilità di modificare il processo di compilazione per utilizzare app bundle con il plug-in Android per Gradle versione 4.1 o successiva. In questo caso, puoi includere automaticamente il file dei simboli di debug nell'app bundle seguendo le istruzioni sul sito Android Developers.

Che cosa succede se carico il file sbagliato?

Se carichi il file sbagliato per una versione dell'app, gli arresti anomali e gli ANR torneranno a essere offuscati. Per caricare una versione corretta:

  1. Apri Play Console.
  2. Seleziona un'app.
  3. Nel menu a sinistra, seleziona Release > Explorer per app bundle
  4. Utilizzando il selettore nell'angolo in alto a destra, scegli l'elemento pertinente.
  5. Seleziona la scheda Download e scorri verso il basso fino alla sezione "Asset".
  6. Fai clic sull'icona di eliminazione accanto al file di deoffuscamento o di simbolizzazione non corretto.
  7. Una volta eliminata la versione non corretta, fai clic sull'icona di caricamento e carica il file corretto per la versione dell'app.

Dopo aver caricato il corretto file di mappin ProGuard o un file di simboli di debug per una versione dell'app, solo gli arresti anomali e gli ANR che si verificano successivamente verranno deoffuscati. Dovrai attendere che i dispositivi degli utenti segnalino nuovi arresti anomali e ANR prima di vederli deoffuscati in Play Console.

Suggerimento: per evitare il rischio di caricare la versione non corretta del file, prendi in considerazione la possibilità di modificare il processo di compilazione per utilizzare app bundle con il plug-in Android per Gradle versione 4.1 o successiva. In questo caso, puoi includere automaticamente il file dei simboli di debug nell'app bundle seguendo le istruzioni sul sito Android Developers.

Al momento utilizzo APK. Come faccio a passare all'utilizzo di app bundle?

Visita il sito Android Developers per iniziare.

La mia app contiene codice nativo e Java. Posso caricare sia un file di simbolizzazione nativo sia un file di deoffuscamento Java?

Sì.

Perché alcuni ANR non mostrano un'analisi dello stack?

A volte il sistema rileva un ANR, ma non è in grado di raccogliere l'analisi dello stack. In questo caso viene mostrato l'ANR per offrirti una visione più completa della stabilità dell'app, ma l'analisi dello stack non può essere visualizzata. Gli errori ANR senza analisi dello stack vengono raggruppati per tipo e attività, pertanto il controllo e la risoluzione di ANR simili potrebbe contribuire a ridurre il numero di ANR senza analisi dello stack.

È stato utile?

Come possiamo migliorare l'articolo?

Hai bisogno di ulteriore assistenza?

Prova i passaggi successivi indicati di seguito:

Ricerca
Cancella ricerca
Chiudi ricerca
Menu principale
18159897594701971799
true
Cerca nel Centro assistenza
true
true
true
true
true
92637
false
false