Analisi dei crash delle app Android con i file di mappatura del codice sorgente

È possibile visualizzare i dettagli relativi agli arresti anomali delle app Android all'indirizzo Instana. I dettagli includono tracce di stack per tutti i thread attivi della tua app mobile. Queste tracce di stack contengono l'indirizzo di memoria e il nome della funzione non elaborata. È possibile utilizzare Instana per tradurre la traccia dello stack in informazioni significative.

Se il codice della tua app Android è offuscato, capire la traccia di stack è difficile. Se utilizzi un compilatore come ProGuard,, DexGuard, o R8 per ottimizzare e offuscare il codice, Instana può deoffuscare la traccia dello stack. Instana decodifica la traccia dello stack utilizzando il mapping.txt file del tuo progetto. Il file di associazione associa la classe, il metodo e i campi originali ai nomi offuscati che rendono leggibili le tracce di stack.

Per tradurre la traccia dello stack, carica il mapping.txt file su Instana. È possibile caricare un file di mappatura effettuando chiamate all' REST API. Una volta caricato il file di mappatura, nell'interfaccia utente di Instana vengono visualizzati ulteriori dettagli relativi al crash. Per visualizzare i dettagli, fare clic su Thread bloccati nella scheda Arresti anomali . Per ulteriori informazioni, consultare Arresti anomali.

Nota: Instana non supporta la conversione retroattiva dei crash. Instana traduce solo gli errori che si verificano dopo che le mappe sorgente sono state correttamente caricate e salvate.

Caricamento dei file di mappatura

Assicurarsi che i seguenti prerequisiti siano soddisfatti prima di caricare un file di associazione:

  • Viene creato un token API con i permessi di configurazione abilitati per il monitoraggio delle app mobili. Per ulteriori informazioni, consultare la pagina " API : i token".
  • I file delle mappe sorgente vengono archiviati per l'edizione personalizzata self-hosted ( Kubernetes o Red Hat OpenShift Container Platform ). Per ulteriori informazioni, consultare la sezione "Configurazione dell'archiviazione esterna".

Per caricare un file di mappatura su Instana, segui questi passaggi:

  1. Nell'interfaccia utente di Instana, creare una configurazione per caricare il file di mappatura:

    1. Go Vai a Siti web e app mobili > App mobili.

    2. Fare clic su un'app mobile. Viene visualizzato il dashboard dell'applicazione mobile.

    3. Fare clic su Configurazione > Conversione della traccia di stack.

      Figura 1. Visualizzazione delle configurazioni di caricamento dei file di mappatura
      Schermata che mostra la vista delle configurazioni di caricamento del file di associazione
    4. Fare clic su Aggiungi configurazione. Viene visualizzata la finestra di dialogo Nuova configurazione di caricamento file simbolo.

    5. Nel campo Descrizione , immettere una descrizione per il caricamento.

    6. Fai clic su Crea. Viene visualizzata la finestra di dialogo Modifica configurazione caricamento file simbolo. Utilizza le API REST web visualizzate nella finestra di dialogo per caricare il file di associazione. Fare riferimento al punto 3.

    7. Fare clic su Salva. La configurazione viene salvata.

    Nota: è possibile caricare fino a 1.024 configurazioni di mappe sorgente per ogni app mobile. Lo spazio massimo di archiviazione per le configurazioni delle mappe sorgente per ogni app mobile è di 2.048 MB. Per aumentare questo limite, contatta l'assistenza di Instana.
  2. Comprimi il tuo file di mappatura ( mapping.txt ) in un .tgz file:

       tar czf <archive name>.tgz <mapping_file>
     

    Un esempio del comando viene mostrato nel seguente frammento:

       tar czf your_app.mapping.tgz your_app.mapping.txt
     
  3. Se la dimensione del file compresso supera i 10 MB, suddividere il file .tgz in più blob (ogni 9 MB):

       split -b 9m <archive name>.tgz <file>.tgz_blob_
     

    Un esempio del comando viene mostrato nel seguente frammento:

       split -b 9m your_mapping_file.tgz your_mapping_file.tgz_blob_
     
  4. Carica il file utilizzando l' REST API web Instana. Completare una delle seguenti procedure:

    • Se il caricamento contiene più blob, eseguire:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"' \
               -F 'blobIndex=1' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
       
      Nota: l' blobIndex e parte da 1, non da 0. Per ogni blob successivo, aumenta l' blobIndex e di 1.
    • Se il caricamento contiene un solo file, eseguire:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
       

      Se la dimensione del file compresso supera i 10 MB, viene visualizzato un messaggio di errore request entity too large . Fare riferimento al punto 3.

  5. Caricamento commit:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/commit' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$IDENTIFIER_OF_APP_BUNDLE-$APP_VERSION, for example com.example.myapp-1.0.3"' \
               -F 'fileType="R8PG_MAP"'
     

Carica tutti i blob prima di eseguire il comando di commit. È possibile visualizzare il numero di blob caricati per ciascuna mappa sorgente nell'interfaccia utente di Instana. Per una mappa sorgente che non utilizza il blobbing, il numero di blob è indicato come 1.

Nota: in caso di mappe sorgente di grandi dimensioni, il completamento del commit potrebbe richiedere un po' di tempo. Quando il commit va a buon fine, lo stato del commit della mappa sorgente indica Success.
Figura 2. Visualizzazione delle configurazioni di caricamento dei file di mappatura con i blob caricati e lo stato di conferma
Screenshot che mostra i blob caricati e lo stato del commit nella vista delle configurazioni di caricamento dei file di mappatura

Rimozione di un file di mappatura da Instana

Per rimuovere un file di mappatura da Instana, procedere in uno dei seguenti modi:

  • Go vai su Siti web e app mobili > App mobili > Configurazione > Traduzione della traccia dello stack, quindi clicca sull'icona Elimina accanto alla configurazione.

  • Effettua una chiamata tramite un web REST API. Nel seguente esempio viene mostrato un comando di esempio:

       curl -L -X PUT \
          'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/clear' \
            -H 'authorization: apiToken $API_TOKEN'