Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Ricevi rapporti sugli arresti anomali di Android NDK

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Se la tua app Android contiene librerie native , puoi abilitare tracce complete dello stack e rapporti dettagliati sugli arresti anomali per il tuo codice nativo da Firebase Crashlytics con alcuni piccoli aggiornamenti alla configurazione di build della tua app.

Questa guida descrive come configurare la segnalazione degli arresti anomali con Firebase Crashlytics SDK per NDK.

Se stai cercando come iniziare a utilizzare Crashlytics nei tuoi progetti Unity, consulta la Guida introduttiva di Unity .

Prima di iniziare

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android. Se non disponi di un'app Android, puoi scaricare un'app di esempio .

  2. Consigliato : per ottenere funzionalità come utenti senza arresti anomali, registri breadcrumb e avvisi di velocità, devi abilitare Google Analytics nel tuo progetto Firebase.

    • Se il tuo progetto Firebase esistente non ha Google Analytics abilitato, puoi abilitare Google Analytics dalla scheda Integrazioni delle tue > Impostazioni progetto nella console Firebase.

    • Se stai creando un nuovo progetto Firebase, abilita Google Analytics durante il flusso di lavoro di creazione del progetto.

Passaggio 1 : aggiungi Crashlytics SDK per NDK alla tua app

Nel file Gradle del modulo (a livello di app) (di solito <project>/<app-module>/build.gradle ), aggiungi la dipendenza per la libreria Android Crashlytics NDK. Ti consigliamo di utilizzare la BoM Android di Firebase per controllare il controllo delle versioni della libreria.

Per un'esperienza ottimale con Crashlytics, ti consigliamo di abilitare Google Analytics nel tuo progetto Firebase e di aggiungere l'SDK Firebase per Google Analytics alla tua app.

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk'
    implementation 'com.google.firebase:firebase-analytics'
}

Utilizzando la BoM Android di Firebase, la tua app utilizzerà sempre versioni compatibili delle librerie Android di Firebase.

(Alternativa) Aggiungi le dipendenze della libreria Firebase senza utilizzare la distinta base

Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce che tutte le versioni siano compatibili.

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.3.2'
    implementation 'com.google.firebase:firebase-analytics:21.2.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:31.1.0')

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk'
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

Utilizzando la BoM Android di Firebase, la tua app utilizzerà sempre versioni compatibili delle librerie Android di Firebase.

(Alternativa) Aggiungi le dipendenze della libreria Firebase senza utilizzare la distinta base

Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce che tutte le versioni siano compatibili.

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ndk:18.3.2'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.2.0'
}

Passaggio 2 : aggiungi il plug-in Crashlytics Gradle alla tua app

  1. Nel tuo file Gradle a livello di radice (a livello di progetto) ( <project>/build.gradle ), aggiungi il plug-in Crashlytics Gradle come dipendenza buildscript:

    buildscript {
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
    
        dependencies {
            ...
            classpath 'com.android.tools.build:gradle:7.2.0'
    
            // Make sure that you have the Google services Gradle plugin dependency
            classpath 'com.google.gms:google-services:4.3.14'
    
            // Add the dependency for the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
        }
    }
  2. Nel file Gradle del tuo modulo (a livello di app) (di solito <project>/<app-module>/build.gradle ), aggiungi il plug-in Gradle di Crashlytics:

    plugins {
        id 'com.android.application'
    
        // Make sure that you have the Google services Gradle plugin
        id 'com.google.gms.google-services'
    
        // Add the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics'
        ...
    }

Passaggio 3 : aggiungi l'estensione firebaseCrashlytics alla tua build

Nel file Gradle del modulo (a livello di app) (di solito app/build.gradle ), aggiungi l'estensione firebaseCrashlytics .

Java

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

Kotlin+KTX

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

Passaggio 4 : imposta il caricamento automatico dei simboli nativi

Per produrre tracce dello stack leggibili da arresti anomali di NDK, Crashlytics deve conoscere i simboli nei file binari nativi. Il plug-in Crashlytics Gradle include l' uploadCrashlyticsSymbolFile BUILD_VARIANT per automatizzare questo processo.

  1. Per poter accedere all'attività per il caricamento automatico dei simboli, assicurati che nativeSymbolUploadEnabled sia impostato su true nel file Gradle del modulo (a livello di app).

  2. Affinché i nomi dei metodi vengano visualizzati nelle tracce dello stack, è necessario richiamare in modo esplicito l' uploadCrashlyticsSymbolFile BUILD_VARIANT dopo ogni build della libreria NDK. Per esempio:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Sia l'SDK Crashlytics per NDK che il plug-in Crashlytics Gradle dipendono dalla presenza dell'ID build GNU all'interno degli oggetti condivisi nativi.

    Puoi verificare la presenza di questo ID eseguendo readelf -n su ogni binario. Se l'ID build è assente, aggiungi -Wl,--build-id ai flag del tuo sistema di build per risolvere il problema.

Passaggio 5 : forza un arresto anomalo del test per completare l'installazione

Per completare la configurazione di Crashlytics e visualizzare i dati iniziali nel dashboard di Crashlytics della console Firebase, devi forzare un arresto anomalo del test.

  1. Aggiungi codice alla tua app che puoi usare per forzare un arresto anomalo del test.

    Puoi usare il codice seguente in MainActivity della tua app per aggiungere un pulsante alla tua app che, se premuto, provoca un arresto anomalo. Il pulsante è etichettato "Test Crash".

    Java

    Button crashButton = new Button(this);
    crashButton.setText("Test Crash");
    crashButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
           throw new RuntimeException("Test Crash"); // Force a crash
       }
    });
    
    addContentView(crashButton, new ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT));
    

    Kotlin+KTX

    val crashButton = Button(this)
    crashButton.text = "Test Crash"
    crashButton.setOnClickListener {
       throw RuntimeException("Test Crash") // Force a crash
    }
    
    addContentView(crashButton, ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT))
    
  2. Crea ed esegui la tua app.

  3. Forza l'arresto anomalo del test per inviare il primo rapporto sull'arresto anomalo della tua app:

    1. Apri la tua app dal tuo dispositivo di prova o emulatore.

    2. Nella tua app, premi il pulsante "Test Crash" che hai aggiunto utilizzando il codice sopra.

    3. Dopo che l'app si è arrestata in modo anomalo, riavviala in modo che l'app possa inviare il rapporto di arresto anomalo a Firebase.

  4. Vai alla dashboard di Crashlytics della console Firebase per vedere l'arresto anomalo del test.

    Se hai aggiornato la console e dopo cinque minuti non vedi ancora l'arresto anomalo del test, abilita la registrazione del debug per vedere se la tua app sta inviando rapporti sugli arresti anomali.


E questo è tutto! Crashlytics sta ora monitorando la tua app per verificare la presenza di arresti anomali e puoi visualizzare e analizzare i rapporti sugli arresti anomali e le statistiche nel dashboard di Crashlytics.



Opzioni alternative per caricare i simboli

Il flusso di lavoro principale in questa pagina sopra è applicabile per build Gradle standard. Tuttavia, alcune app utilizzano una configurazione o strumenti diversi (ad esempio un processo di compilazione diverso da Gradle). In queste situazioni, le seguenti opzioni potrebbero essere utili per caricare correttamente i simboli.

Opzione : caricare i simboli per i moduli della libreria e le dipendenze esterne

Questa opzione può essere utile nelle seguenti situazioni:

  • Se utilizzi un processo di compilazione NDK personalizzato all'interno di Gradle
  • Se le tue librerie native sono costruite in una libreria/modulo di funzionalità o fornite da terze parti
  • Se l' attività di caricamento automatico dei simboli non riesce o si verificano arresti anomali non simbolici nella dashboard

Opzione : carica simboli per build non Gradle o librerie native non rimosse inaccessibili

Questa opzione può essere utile nelle seguenti situazioni:

  • Se utilizzi un processo di compilazione diverso da Gradle

  • Se le tue librerie native non rimosse ti vengono fornite in un modo che non sono accessibili durante le build di Gradle



Risoluzione dei problemi

Se vedi tracce di stack diverse nella console Firebase e nel logcat, fai riferimento alla Guida alla risoluzione dei problemi .

Prossimi passi