Includi i simboli nativi nella build di release

Per impostazione predefinita, le librerie di codice nativo vengono rimosse nelle build di release dell'app. Questa rimozione consiste nell'eliminazione della tabella dei simboli e delle informazioni di debug contenute in qualsiasi libreria nativa utilizzata dall'app. La rimozione delle librerie di codice nativo consente di risparmiare notevolmente spazio; tuttavia, è impossibile diagnosticare gli arresti anomali su Google Play Console a causa delle informazioni mancanti (ad esempio nomi di classi e funzioni). Per eseguire il debug degli arresti anomali, devi includere un file di simboli di debug con la tua app in Play Console.

Caricare un file di simboli

Google Play Console segnala gli arresti anomali nativi in Android Vitals. Con pochi passaggi, puoi generare e caricare un file di simboli di debug nativi per la tua app. Questo file consente di visualizzare stack trace degli arresti anomali nativi simbolizzati (che includono nomi di classi e funzioni) in Android vitals per aiutarti a eseguire il debug della tua app in produzione. Questi passaggi variano a seconda della versione del plug-in Android Gradle utilizzata nel progetto e se utilizzi un Android App Bundle (consigliato) o un APK.

Plug-in Android per Gradle versione 4.1 o successive

Se il tuo progetto crea un Android App Bundle (AAB), puoi configurare la build in modo da includere automaticamente il file dei simboli di debug nativi nell'AAB, in modo che venga caricato su Play Console quando pubblichi l'app. Per includere questo file nelle build di rilascio, aggiungi quanto segue al file build.gradle.kts dell'app:

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

Seleziona il livello del simbolo di debug tra i seguenti:

  • Utilizza SYMBOL_TABLE per ottenere i nomi delle funzioni nelle analisi dello stack simbolizzate di Play Console. Questo livello supporta i segnali di eliminazione.
  • Utilizza FULL per ottenere nomi di funzioni, file e numeri di riga nelle analisi dello stack con simboli di Play Console.

Se il tuo progetto crea un APK, utilizza l'impostazione android.buildTypes.release.ndk.debugSymbolLevel mostrata in precedenza per generare separatamente il file dei simboli di debug nativi. Carica manualmente il file dei simboli di debug nativi in Google Play Console (la procedura è simile al caricamento di un file di mapping per deoffuscare le analisi dello stack). 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/<var>variant-name</var>/native-debug-symbols.zip

Se le tue dipendenze contengono librerie native, è probabile che le informazioni di debug vengano rimosse per ridurre le dimensioni. Puoi verificarlo eseguendo una build con il info livello di log e l'impostazione debugSymbolLevel = { SYMBOL_TABLE | FULL }. Quindi, cerca la seguente riga nell'output della build:

Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.

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

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

app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── arm64-v8a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── x86/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
└── x86_64/
    ├── libgameengine.so
    ├── libothercode.so
    └── libvideocodec.so
  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 Google Play Console.