Deoffuscare o simbolizzare le analisi dello stack 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 nella sorgente.

Se la tua app o il tuo gioco sono stati sviluppati con Java e utilizzi ProGuard per ottimizzare e offuscare i file APK, puoi caricare un file di mapping ProGuard per ogni versione dell'app in Play Console. Se la tua app o il tuo gioco sono stati sviluppati utilizzando il codice nativo, come C++, puoi caricare un file dei simboli di debug per ogni versione dell'app in Play Console. Ciò semplifica l'analisi e la correzione degli arresti anomali e degli 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 dell'app per una versione della stessa, 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: esiste un limite di 300 MB per il file dei simboli di debug. 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 APK o di un Android App Bundle, il plug-in Android per Gradle conserva una copia delle raccolte 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 raccolte contenenti informazioni di debug in una directory con la struttura richiesta sopra riportata.

  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.

Esiste un limite di 300 MB per il file dei simboli di debug. 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 dell'app per una versione della stessa, 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 Android 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 di arresto anomalo deoffuscate. Puoi trovare ulteriori informazioni sugli app bundle sul sito Android Developers.

Caricare file utilizzando 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 > Dispositivi e versioni> 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 "Risorse".
  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 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 di Play Console e utilizzare offline lo strumento appropriato per simbolizzarli. Tuttavia, questo processo deve essere eseguito manualmente per ogni stack di arresto anomalo, ciò lo rende lento e dispendioso in termini di tempo. Fornendo i tuoi file di deoffuscamento, Play Console si occuperà di tutto.

Ho caricato il file di deoffuscamento/simbolizzazione, quindi perché i miei arresti anomali e ANR sono ancora offuscati?

Dopo aver caricato un file di mapping ProGuard o un file dei 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 come 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 dei 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 come deoffuscati nella 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 > Dispositivi e versioni> 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 "Risorse".
  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 mapping ProGuard o dei 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 come deoffuscati nella 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ì.

È stato utile?
Come possiamo migliorare l'articolo?

Hai bisogno di ulteriore assistenza?

Accedi per scoprire altre opzioni di assistenza che ti consentiranno di risolvere rapidamente il tuo problema