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 ProGuardPer deoffuscare le analisi dello stack Java, devi prima generare un file di mapping ProGuard. Per sapere come fare, consulta il sito Google Developers.
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.
- Comprimi i contenuti di questa directory:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- 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 ConsolePer caricare un file di deoffuscamento o di simbolizzazione:
- Apri Play Console.
- Seleziona un'app.
- Nel menu a sinistra, seleziona
Testa e rilascia
> Explorer per app bundle. - Utilizzando il selettore nell'angolo in alto a destra, scegli l'elemento pertinente.
- Seleziona la scheda Download e scorri verso il basso fino alla sezione "Asset".
- 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.
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.
- Apri Play Console.
- Seleziona un'app.
- Nel menu a sinistra, seleziona Monitora e migliora > Android vitals > Arresti anomali e ANR.
- Seleziona un arresto anomalo.
- 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.
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.
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.
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.
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.
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:
- Apri Play Console.
- Seleziona un'app.
- Nel menu a sinistra, seleziona
Testa e rilascia
> Explorer per app bundle. - Utilizzando il selettore nell'angolo in alto a destra, scegli l'elemento pertinente.
- Seleziona la scheda Download e scorri verso il basso fino alla sezione "Asset".
- Fai clic sull'icona di eliminazione accanto al file di deoffuscamento o di simbolizzazione non corretto.
- 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.
Visita il sito Android Developers per iniziare.
Sì.
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.