Gibt es eine einfache Möglichkeit, das Crashlytics Android SDK während der Entwicklung auszuschalten?
Ich möchte nicht, dass es jedes Mal zum Absturz kommt, wenn ich etwas Dummes tue
Andererseits möchte ich nicht kommentieren Crashlytics.start()
und riskiere möglicherweise zu vergessen, es zu kommentieren und zu verpflichten
android
crashlytics
twitter-fabric
Michael
quelle
quelle
Manifest
Abstürzen der App, so dass die Frage ein wenig legitimer wird.Antworten:
Marc von Crashlytics hier. Hier sind einige Möglichkeiten, um Crashlytics zu deaktivieren, während Sie Ihre Debug-Builds ausführen!
Verwenden Sie ein anderes Android: versionString für Debug- und Release-Builds und deaktivieren Sie dann die Crash-Berichterstellung über das Crashlytics-Web-Dashboard für die Debug-Version.
Schließen Sie den Aufruf von Crashlytics.start () in eine if-Anweisung ein, die ein Debug-Flag überprüft. Sie können entweder ein benutzerdefiniertes Flag oder einen Ansatz wie den hier vorgeschlagenen verwenden: Wie kann überprüft werden, ob APK signiert ist oder "Build debuggen"?
quelle
BuildConfig.DEBUG
sollte verwendet werden, wenn Sie mit Gradle bauen. Es wird immer richtig generiert.BuildConfig.DEBUG
?Ich habe die Lösung von Crashlytics gefunden (mit Fabric-Integration)
Fügen Sie den folgenden Code in Ihre Anwendungsklasse ein
onCreate()
BEARBEITEN:
In Crashalitics 2.3 und höher ist dies veraltet. Der richtige Code lautet:
oder
(kopiert von Crashlytics veraltete Methode deaktiviert () )
EDIT2:
Optional können Sie dies auch zu Ihrem
buildType
Gradle hinzufügen. Dieser Befehl deaktiviert das Senden der Crashlytics-Zuordnungsdatei und das Generieren einer ID für jeden Build, wodurch Gradle-Builds dieser Varianten beschleunigt werden. (Crashlytics wird zur Laufzeit nicht deaktiviert.) Die Antwort von Mike B finden Sie hier.quelle
ext.enableCrashlytics = false
funktioniert bei mir auch nicht mit 2.5. Eigentlich hat es nie funktioniert. Schon vor Stoff.Die gewählte Antwort ist nicht mehr richtig. Google hat die Integration von Crashlytics geändert. Meine aktuelle Version ist
2.9.1
und das einzige, was ich tun musste, war, sieimplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
zu meiner Gradle-Datei hinzuzufügen . Keine weiteren Dinge erforderlich, schön, aber das bedeutet, dass Crashlytics immer läuft.Lösung 1
Kompilieren Sie Crashlytics nur in der Release-Version:
Lösung 2
Wenn Sie Crashlytics zusätzlich konfigurieren möchten, funktioniert Lösung 1 nicht, da die Crashlytics-Klassen in Debug-Builds nicht gefunden werden. Ändern Sie die Gradle-Implementierung wieder in:
Gehen Sie dann zu Ihrem Manifest und fügen Sie das folgende
meta-data
Tag in dasapplication
Tag ein:Zu Ihrer Startaktivität hinzufügen (nur einmal erforderlich, nicht jede Aktivität)
Dies aktiviert Crashlytics nur in Release-Versionen. Seien Sie vorsichtig, suchen Sie auch nach BuildConfig.DEBUG, wenn Sie dann Crashlytics konfigurieren, z.
quelle
Enable collection for selected users by initializing Crashlytics from one of your app's activities
Aber ich denke, es ändert sich nicht viel, wenn Sie Crashlytics in der Anwendung initialisieren. Hast Du es versucht? Wenn es funktioniert, kann ich es meiner Antwort hinzufügen. firebase.google.com/docs/crashlytics/customize-crash-reportsfirebase_crashlytics_collection_enabled
im Manifest auf false gesetzt habe , wird der Absturz nicht auf der Konsole angezeigt (ich verwende Version 2.9.9). Also habe ich dies behoben, indem ich ein separates Manifest für den Debug-Build mitfirebase_crashlytics_collection_enabled=false
undtrue
für die VeröffentlichungWenn Sie Gradle verwenden, fügen Sie dies einfach einem Geschmack hinzu:
quelle
This app relies on Crashlytics.
"Schauen Sie sich das neueste Dokument an. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Abgesehen vom Hinzufügen
ext.enableCrashlytics = false
von build.grade müssen Sie Folgendes tun:quelle
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
in build.gradle.buildTypes -> debug, also i'm applying the plugin via
Plugin: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Ich fand dies die die einfachste Lösung sein:
In den obigen Zeilen wird ein statisches boolesches Feld erstellt, das
enableCrashlytics
in derBuildConfig
Datei aufgerufen wird und anhand dessen Sie entscheiden können, ob Sie initiieren möchtenFabric
oder nicht:HINWEIS: Bei dieser Methode wird Fabrics nur in Release-Builds initialisiert (wie im obigen Code angegeben). Dies bedeutet, dass Sie statische Methoden in der
Crashlytics
Klasse in einemif
Block aufrufen müssen, der prüft, ob Fabrics wie unten gezeigt initialisiert wurde.Andernfalls stürzt die App
Must Initialize Fabric before using singleton()
beim Testen auf dem Emulator mit einem Fehler ab.quelle
2019 Antwort
Ich habe versucht, Crashlytics nur in der Version zu aktivieren und im Debug für 2 Stunden zu deaktivieren. Dabei habe ich in der Firebase-Konsole überprüft, ob die Ausnahmen hochgeladen wurden oder nicht.
Es gibt zwei Möglichkeiten, dies zu tun.
OPTION 1
Es funktioniert, aber wenn Sie
Crashlytics
beim Debuggen eine Methode aufrufen, stürzt die App ab .app / build.gradle
AndroidManifest.xml
OPTION 2
Eine Alternative, wenn Sie damit
Crashlytics
Methoden aufrufen können, ohneBuildConfig.DEBUG
vorher zu prüfen . Mit diesem Setup können Sie sicher Methoden aufrufen wieCrashlytics.logException()
- sie tun einfach nichts in Debug-Builds. Ich sehe nicht, dass die Berichte beim Debuggen hochgeladen werden.app / build.gradle
AndroidManifest.xml
Anwendung onCreate ()
quelle
android:value="false"
muss geändert werdenandroid:value="${enableCrashlytics}"
. Ist es nicht?Verwenden Sie dies in
MyApplication#onCreate()
BEARBEITEN Wenn Sie ein Upgrade auf Fabric durchgeführt haben, verwenden Sie stattdessen diese Antwort .
quelle
BuildConfig
wird von einer Gradle-Aufgabe generiert, die garantiert ausgeführt wird. Ich verwende auchbuildConfigField
, um benutzerdefinierte Felder festzulegen, und diese funktionieren immer. tools.android.com/recent/androidstudio045released schlägt ebenfalls vor, dass Sie verwendenBuildConfig.DEBUG
.Verwenden Sie laut Google diesen Code, um Crashlytics zu deaktivieren, und es wird auch der Erstellungsprozess verbessert.
Referenz- https://developer.android.com/studio/build/optimize-your-build
quelle
Eine weitere einfache Lösung, die mir gefällt, da keine anderen Manifestdateien erforderlich sind:
Schritt 1 - Definieren Sie manifestierte Platzhalter in build.gradle
Schritt 2 - Verwenden Sie sie in Ihrer AndroidManifest.xml
quelle
Beachten Sie, dass Sie auch das lästige Hochladen von Symbolen im Debug-Build deaktivieren können:
Legen Sie es einfach in das
build.gradle
Anwendungsmodul ein.quelle
Wenn Sie alle Abstürze erfassen möchten (für Debug- und Release-Builds), diese jedoch im Crashlytics-Dashboard trennen möchten, können Sie build.gradle diese Codezeile hinzufügen:
Wenn der Versionsname Ihrer App beispielsweise 1.0.0 lautet, werden Ihre Release-Builds mit 1.0.0 gekennzeichnet, während die Debug-Builds 1.0.0-DEBUG lauten
quelle
Hier gibt es viele gute Antworten, aber für meine Tests verwende ich Debug-Builds für interne Betas und Tests außerhalb des Labors, bei denen Absturzprotokolle immer noch sehr nützlich sind und ich sie weiterhin melden möchte. Wie beim OP wollte ich sie nur während der aktiven Entwicklung deaktivieren, wo ich häufig Abstürze verursache und schnell behebe.
Anstatt ALLE Debug-Abstürze zu entfernen, können Sie die Berichte nur deaktivieren, während ein Gerät mit dem folgenden Code mit Ihrem Entwicklungscomputer verbunden ist.
quelle
Crashlytics.logException(e)
und diese Anweisung löst eine Ausnahme in Debug-Builds aus, da Fabric-Singleton nicht initialisiert ist. Wenn Sie Crashlytics verwenden, initialisieren Sie immer Fabric-Singleton. Siehe Fahmys Antwort .Das Problem ist, dass keine der Lösungen für das neueste Crashlytics SDK funktioniert. (Ich benutze 2.9.0)
Sie können es nicht per Code deaktivieren, da es in Ihr Projekt kompiliert und bereits vor einem Aufruf von onCreate Ihrer Anwendung ausgeführt wird. Eine andere Lösung ist also einfach: Kompilieren Sie keine Crashlytics, wenn sie nicht benötigt werden. Ersetzen Sie den Aufruf 'compile' durch 'releaseCompile' in der Datei build.gradle.
quelle
Aktuelle einfachste Version bei Verwendung von Gradle zum Erstellen:
Es verwendet die neue integrierte Syntax von Fabric for Crashlytics und arbeitet automatisch mit einem Gradle-Build.
quelle
Ein seltsames Problem, auf das ich gestoßen bin: Ich habe die Antwort von Xialin (die auch auf der offiziellen Website erscheint) befolgt und es hat nicht funktioniert. Es stellte sich heraus, dass ich
BuildConfig
in Fabric's Paket referenziert habe, das auch eine statische DEBUG-Variable enthält, die selbst im Debug-Modus auf false gesetzt wurde.Wenn Sie also der oben genannten Lösung folgen und dennoch Debug-Berichte erhalten, stellen Sie sicher, dass Sie auf Folgendes verweisen:
Und nicht das:
quelle
Wenn Sie befürchten,
BuildConfig.DEBUG
nicht richtig eingerichtet zu sein, verwenden SieApplicationInfo
stattdessen:quelle
Verwenden Sie Aromen oder bauen Sie Konfigurationen. Verwenden Sie eine separate Build-ID für den Dev-Build, und alle Ihre Abstürze werden weiterhin in einer separaten App angezeigt. Kann nützlich sein, wenn Sie den Build für Peers freigeben oder ohne Debugger verwenden. Etwas wie das -
quelle
Wenn Sie einen debuggbaren Release-Build wünschen, gehen Sie wie folgt vor:
Wenn Sie festlegen
debuggable true
, dass BuildConfig.DEBUG mit true initialisiert wird, habe ich diese Variable in der BuildConfig-Klasse hinzugefügt.Init Fabric:
quelle
ext.enableCrashlytics
undext.alwaysUpdateBuildId
da sie nirgendwo referenziert zu sein scheinen. Vermisse ich etwasWir können die isDebuggable () -Methode von Fabric verwenden.
Viel Spaß beim Codieren :)
quelle
Sie können eine dedizierte Manifestdatei für den Debug-Modus verwenden (funktioniert bei mir mit Crashlytics 2.9.7):
Erstellen Sie die Datei
app/src/debug/AndroidManifest.xml
und fügen Sie Folgendes hinzu:Beachten Sie, dass dieses Metadatenelement nur in debug / AndroidManifest.xml und nicht in die reguläre AndroidManifest.xml eingefügt werden darf
Die verwendete Lösung
CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
hat bei mir nicht funktioniert, und ich habe festgestellt, dass Crashlytics vom CrashlyticsInitProvider initialisiert wird, bevor Application.onCreate () aufgerufen oder eine Aktivität gestartet wird. Dies bedeutet, dass die manuelle Initialisierung von Fabric in der Anwendung oder einer Aktivität keine hat Effekt, da der Stoff bereits initialisiert ist.quelle
Schritt 1: In build.grade
Schritt 2: Im Manifest
Schritt 3: In der Anwendung oder in der ersten Aktivität
Ich bin nicht sicher, ob Schritt 3 notwendig ist, aber um sicherzustellen, dass die Release-Version ohne Absturz funktioniert. Quelle: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
quelle
Diese Arbeit für mich:
und in buildTypes:
quelle
Es gibt zwei Optionen, um Firebase Crashlytics für die folgende Version zu deaktivieren: com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
ODER
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
quelle
Eine andere Möglichkeit, wenn Sie dies nur in Ihrer IDE tun möchten, besteht darin, sich vom Plugin abzumelden. Anscheinend werden keine Berichte mehr gesendet, während Sie Builds generieren, ohne sich erneut anzumelden.
quelle
Fügen Sie dies dem build.gradle Ihrer App hinzu:
Deaktivieren Sie das Crashlytics-Kit zur Laufzeit. Andernfalls wird das Crashlytics-Kit den Fehler auslösen:
Fügen Sie in AndroidManifest.xml hinzu
quelle
2020 Post Fabric Antwort
Fügen Sie den folgenden Code in Ihre Anwendungsklasse ein und rufen Sie die Methode
setCrashlyticsState
aus Ihrer Anwendung onCreate auf. Optional können Sie die IDs Ihres Testgeräts zum hinzufügendebugDevices
IDs HashSet hinzufügen, damit Ihre persönlichen Geräte ignoriert werden können, selbst wenn Sie im Release-Modus erstellen.Hinweis. Es
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
wird nicht garantiert , dass die von zurückgegebene Geräte-ID eindeutig oder konstant ist (sie kann sich beim Zurücksetzen auf die Werkseinstellungen oder manuell bei einem gerooteten Gerät ändern). Aber es sollte gut genug sein.Überprüfen Sie die BuildConfig. sucht nach der richtigen BuildConfig-Klasse. Es gibt oft mehrere Optionen und die falsche könnte hineingezogen werden.
quelle
Das ist eine dumme Antwort, ich weiß.
Kommentiere es einfach aus
Fabric.with(this, new Crashlytics());
, arbeite daran und kommentiere es aus , wenn du es veröffentlichen willst.quelle