J'ai configuré Firebase Crashlytics selon Commencez avec Firebase Crashlytics pour mon application Android (à l'aide du studio Android 3.1.3). Sur mon propre appareil ainsi que sur l’émulateur, tout fonctionne correctement et mes accidents apparaissent correctement dans la console Firebase. Jusqu'ici tout va bien.
Cependant, l'un des utilisateurs de mon application a rencontré un problème inattendu:
Java.lang.IllegalStateException: Doit initialiser la structure avant d'utiliser singleton ()
L'exception a été levée dans une autre activité que MainActivity.
Je suis conscient que vous pouvez exécuter manuellement l’initialisation comme décrit ici en appelant Fabric.with(this, new Crashlytics());
. Cependant, rien n’indique à propos de l’initialisation manuelle de Crashlytics dans l’article Getting Started mentionné ci-dessus. Je m'attendais à ce que cela se fasse automatiquement car tous mes tests fonctionnent correctement. Alors, pourquoi Crashlytics est-il configuré correctement pour certains utilisateurs et d'autres non?
Vous devez initialiser Crashlytics dans onCreate de votre application.
import Android.app.Application;
import com.crashlytics.Android.Crashlytics;
import io.fabric.sdk.Android.Fabric;
public class TestApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fabric.with(this, new Crashlytics());
}
}
Dans mon cas, les vérifications ci-dessous ont permis de supprimer l’erreur.
Si vous trouvez un code comme ci-dessous dans votre manifest , définissez-le sur true ou supprimez-le car il est vrai par défaut.
<meta-data
Android:name="firebase_crashlytics_collection_enabled"
Android:value="false" />
En outre, si la valeur est extraite de votre build.gradle, vérifiez quel buildType est dedans et envisagez de ne pas appeler de fonction Crashlytics sous ce buildType.
Exemple: build.gradle
Android{
...
buildTypes {
debug{
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
Dans ce cas, vous devriez placer vos appels Crashlytics comme suit:
if(!BuildConfig.DEBUG){
...
Crashlytics.setUserIdentifier(...)
...
}
Lorsque vous utilisez Firebase Crashlytics, vous n’avez pas besoin d’initialiser Fabric. Tout se fait automatiquement.
Toutefois, si vous souhaitez effectuer une journalisation personnalisée, via (par exemple) Crashlytics.log("Custom log")
, vous devez activer FirebaseCrashlytics dans votre manifeste. Vérifiez le manifeste si vous avez quelque chose comme ça:
<meta-data
Android:name="firebase_crashlytics_collection_enabled"
Android:value="${crashlyticsEnabled}" />
${crashlyticsEnabled}
peut être défini sur true
ou false
ou via votre niveau d'application build.gradle . Ceci est généralement utilisé pour désactiver Firebase Crashlytics lorsque vous déboguez l'application.
Si vous utilisiez Android:process
, l'initialisation automatique ne fonctionnerait pas, car elle fonctionne en utilisant un fournisseur de contenu dans votre manifeste. Dans ce cas, vous devrez initialiser manuellement Crashlytics .