Czy jest jakiś prosty sposób na wyłączenie Crashlytics Android SDK podczas programowania?
Nie chcę, żeby wysyła awarię za każdym razem, gdy robię coś głupiego
Z drugiej strony nie chcę komentować Crashlytics.start()
i być może zaryzykuję zapomnienie o odkomentowaniu i popełnieniu błędu
android
crashlytics
twitter-fabric
Michael
źródło
źródło
Manifest
powoduje awarię aplikacji, dzięki czemu pytanie jest nieco bardziej uzasadnione.Odpowiedzi:
Marc z Crashlytics tutaj. Oto kilka sposobów na wyłączenie Crashlytics podczas tworzenia kompilacji debugowania!
Użyj innego Androida: versionString do kompilacji debugowania i wydania, a następnie wyłącz raportowanie awarii z pulpitu internetowego Crashlytics dla wersji debugowania.
Zawiń wywołanie Crashlytics.start () w instrukcji if, która sprawdza flagę debugowania. Możesz użyć niestandardowej flagi lub podejścia podobnego do proponowanego tutaj: Jak sprawdzić, czy plik APK jest podpisany lub „kompilacja debugowania”?
źródło
BuildConfig.DEBUG
powinien być używany, jeśli budujesz za pomocą Gradle. Zawsze będzie generowany poprawnie.BuildConfig.DEBUG
?Znalazłem rozwiązanie od Crashlytics (z integracją Fabric)
Umieść następujący kod w swojej klasie aplikacji
onCreate()
EDYTOWAĆ:
W Crashalitics 2.3 i nowszych wersjach jest to przestarzałe. Prawidłowy kod to:
lub
(skopiowane z przestarzałej metody Crashlytics wyłączone () )
EDYCJA 2:
Możesz również opcjonalnie dodać to do swojego
buildType
stopnia. To polecenie wyłącza wysyłanie pliku mapowania awaryjnego i generowanie identyfikatora dla każdej kompilacji, co przyspiesza kompilacje stopniowe tych smaków. (Nie wyłącza Crashlytics w czasie wykonywania.) Zobacz odpowiedź Mike B. tutaj.źródło
ext.enableCrashlytics = false
nie działa również dla mnie z 2.5. Właściwie to nigdy nie działało. Nawet przed tkaniną.Wybrana odpowiedź nie jest już poprawna. Google zmieniło integrację Crashlytics. Moja obecna wersja jest
2.9.1
i jedyne, co musiałem zrobić, to dodaćimplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
do mojego pliku Gradle. Nic więcej nie jest wymagane, ale to oznacza, że Crashlytics zawsze działa.Rozwiązanie 1
Kompiluj Crashlytics tylko w wersji wydanej:
Rozwiązanie 2
Jeśli chcesz dodatkowo skonfigurować Crashlytics, wówczas Rozwiązanie 1 nie działa, ponieważ klasy Crashlytics nie będą znajdować się w kompilacjach debugowania. Zmień więc implementację Gradle z powrotem na:
Następnie przejdź do oczywistego i dodać następujące
meta-data
znacznika wewnątrzapplication
tagu:Dodaj do swojej działalności związanej z uruchomieniem (wymagany tylko raz, nie każda aktywność)
Pozwoli to włączyć Crashlytics tylko w wersjach wydania. Zachowaj ostrożność, sprawdź także BuildConfig.DEBUG podczas konfigurowania Crashlytics, np .:
źródło
Enable collection for selected users by initializing Crashlytics from one of your app's activities
ale myślę, że niewiele się zmieni, jeśli zainicjujesz Crashlytics w aplikacji. Próbowałeś? Jeśli to działa, mogę dodać to do mojej odpowiedzi. firebase.google.com/docs/crashlytics/customize-crash-reportsfirebase_crashlytics_collection_enabled
ustawię wartość false w manifeście, awaria nie pojawia się na konsoli (używam wersji 2.9.9). Więc naprawiłem to przez dodanie oddzielnego manifestu dla debugowania kompilacji zfirebase_crashlytics_collection_enabled=false
oraztrue
do dopuszczeniaJeśli używasz Gradle, po prostu dodaj to do smaku:
źródło
This app relies on Crashlytics.
”Sprawdź najnowszy dokument. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Oprócz dodania
ext.enableCrashlytics = false
w build.grade musisz zrobić,źródło
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
w build.gradle.buildTypes -> debug, also i'm applying the plugin via
wtyczka Apply: 'io.fabric' 'This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Znalazłem to być najprostszym rozwiązaniem:
Powyższe wiersze utworzą statyczne pole boolean wywoływane
enableCrashlytics
wBuildConfig
pliku, którego możesz użyć, aby zdecydować, czy zainicjować,Fabric
czy nie:UWAGA: Za pomocą tej metody tkaniny są inicjowane tylko w kompilacjach wersji (jak wskazano w powyższym kodzie). Oznacza to, że musisz umieścić wywołania metod statycznych w
Crashlytics
klasie wif
bloku, który sprawdza, czy Tkaniny zostały zainicjowane, jak pokazano poniżej.W przeciwnym razie aplikacja ulegnie awarii z
Must Initialize Fabric before using singleton()
błędem podczas testowania na emulatorze.źródło
Odpowiedź na 2019 r
Próbowałem włączyć Crashlytics tylko w wydaniu i wyłączyć w debugowaniu przez 2 godziny, sprawdzając konsolę Firebase, aby sprawdzić, czy wyjątki zostały przesłane, czy nie.
Można to zrobić na 2 sposoby.
OPCJA 1
Działa, ale jeśli wywołasz dowolną
Crashlytics
metodę podczas kompilacji debugowania, aplikacja się zawiesi .app / build.gradle
AndroidManifest.xml
OPCJA 2
Alternatywą, jeśli pozwala to wywoływać
Crashlytics
metody bez uprzedniego sprawdzaniaBuildConfig.DEBUG
. Dzięki tej konfiguracji możesz bezpiecznie wywoływać metody takie jakCrashlytics.logException()
- po prostu nie robią nic w kompilacjach debugowania. Nie widzę raportów przesyłanych podczas debugowania.app / build.gradle
AndroidManifest.xml
Aplikacja onCreate ()
źródło
android:value="false"
trzeba to zmienićandroid:value="${enableCrashlytics}"
. Prawda?Użyj tego w
MyApplication#onCreate()
EDYCJA W przypadku uaktualnienia do wersji Fabric użyj tej odpowiedzi .
źródło
BuildConfig
jest generowany przez zadanie Gradle, które gwarantuje uruchomienie. Używam równieżbuildConfigField
do ustawiania pól niestandardowych, które zawsze działają. tools.android.com/recent/androidstudio045released również sugeruje użycieBuildConfig.DEBUG
.Zgodnie z Google użyj tego kodu, aby wyłączyć Crashlytics, a także usprawni proces kompilacji.
referencje- https://developer.android.com/studio/build/optimize-your-build
źródło
Kolejne proste rozwiązanie, które lubię, ponieważ nie wymaga różnych plików manifestu:
Krok 1 - Zdefiniuj symbole zastępcze w build.gradle
Krok 2 - użyj ich w pliku AndroidManifest.xml
źródło
Zauważ, że możesz także wyłączyć irytujące przesyłanie symboli w kompilacji debugowania:
Wystarczy umieścić go w
build.gradle
module aplikacji.źródło
Jeśli chcesz przechwycić wszystkie awarie (w przypadku kompilacji debugowania i wydania), ale chcesz je rozdzielić w aplikacji Crashlytics Dashboard, możesz dodać ten wiersz kodu do build.gradle:
Na przykład jeśli nazwa wersji aplikacji to 1.0.0, kompilacje wersji zostaną oznaczone jako 1.0.0, a kompilacje debugowania będą miały wersję 1.0.0-DEBUG
źródło
Istnieje wiele dobrych odpowiedzi, ale do moich testów używam kompilacji debugowania do wewnętrznych testów beta i testów poza laboratorium, w których dzienniki awarii są nadal bardzo przydatne i nadal chciałbym je zgłaszać. Podobnie jak PO, chciałem tylko wyłączyć je podczas aktywnego programowania, w którym często powoduję i szybko usuwam awarie.
Zamiast usuwać WSZYSTKIE awarie debugowania, możesz wyłączyć raporty tylko wtedy, gdy urządzenie jest podłączone do komputera programistycznego za pomocą następującego kodu.
źródło
Crashlytics.logException(e)
a ta instrukcja zgłasza wyjątek w kompilacjach debugowania, ponieważ singleton Fabric nie jest inicjowany. Jeśli używasz Crashlytics, zawsze inicjuj singleton Fabric. Zobacz odpowiedź fahmy .Problem polega na tym, że żadne z rozwiązań nie działa w przypadku najnowszego pakietu SDK Crashlytics. (Używam 2.9.0)
Nie można go wyłączyć za pomocą kodu, ponieważ kompiluje się on w projekcie i działa nawet przed wywołaniem funkcji Utwórz aplikację. Inne rozwiązanie jest proste - nie kompiluj crashlytyków, gdy nie są potrzebne. Zamień wywołanie „compile” na „releaseCompile” w pliku build.gradle.
źródło
Najłatwiejsza wersja przy użyciu Gradle do kompilacji:
Wykorzystuje nową wbudowaną składnię z Fabric dla Crashlytics i działa automatycznie z kompilacją Gradle.
źródło
Dziwny problem, który napotkałem: podążyłem za odpowiedzią xialin (która pojawia się również na oficjalnej stronie) i nie zadziałało. Okazało się, że odwoływałem się
BuildConfig
do pakietu Fabric, który zawiera również statyczną zmienną DEBUG, która została ustawiona na false nawet w trybie debugowania.Jeśli więc postępujesz zgodnie z powyższym rozwiązaniem i nadal otrzymujesz raporty debugowania, upewnij się, że odwołujesz się do tego:
I nie to:
źródło
Jeśli martwisz
BuildConfig.DEBUG
się nieprawidłową konfiguracją, użyjApplicationInfo
zamiast tego:źródło
Używaj smaków lub buduj konfiguracje. Użyj osobnego identyfikatora kompilacji dla kompilacji programisty, a wszystkie awarie będą przechodzić do osobnej aplikacji. Może się przydać w przypadku udostępniania kompilacji rówieśnikom lub używania jej bez debugera. Coś takiego -
źródło
Jeśli chcesz mieć wersję do debugowania, oto sposób:
Po ustawieniu
debuggable true
BuildConfig.DEBUG zostanie zainicjowany true, dlatego dodałem tę zmienną do klasy BuildConfig.Materiał początkowy:
źródło
ext.enableCrashlytics
iext.alwaysUpdateBuildId
skoro nigdzie się nie pojawiają. Czy coś brakuje?Możemy użyć metody isDebuggable () tkaniny.
Miłego kodowania :)
źródło
Możesz użyć dedykowanego pliku manifestu dla trybu debugowania (działa dla mnie z Crashlytics 2.9.7):
Utwórz plik
app/src/debug/AndroidManifest.xml
i dodaj następujące elementy:Zauważ, że ten element meta-dane muszą być wprowadzone do debugowania / AndroidManifest.xml tylko , nie i na regularne AndroidManifest.xml
Rozwiązanie, które wykorzystuje,
CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
nie działało dla mnie, i dowiedziałem się, że CrashlyticsInitProvider jest inicjowany przed wywołaniem Application.onCreate () lub uruchomieniem jakiejkolwiek aktywności, co oznacza, że ręczne inicjowanie struktury w aplikacji lub działaniu nie ma efekt, ponieważ tkanina jest już zainicjowana.źródło
Krok 1: W wersji build.grade
Krok 2: W manifeście
Krok 3: W aplikacji lub pierwszej aktywności
Nie jestem pewien, czy krok 3 jest konieczny, ale aby upewnić się, że wersja wydania powinna działać bez awarii. źródło: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
źródło
Ta praca dla mnie:
oraz w buildTypes:
źródło
Istnieją dwie opcje, aby wyłączyć Firebase Crashlytics dla następującej wersji com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
LUB
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
źródło
Innym sposobem, jeśli chcesz to zrobić tylko na swoim IDE, jest wylogowanie się z wtyczki. Najwyraźniej przestanie wysyłać raporty podczas generowania kompilacji bez ponownego logowania.
źródło
Dodaj to do build.gradle aplikacji:
Wyłącz zestaw Crashlytics w czasie wykonywania. W przeciwnym razie zestaw Crashlytics zgłosi błąd:
W AndroidManifest.xml dodaj
źródło
2020 Post Fabric Answer
Wklej poniższy kod do klasy Application i wywołaj metodę
setCrashlyticsState
z aplikacji onCreate. Możesz opcjonalnie dodać swoje ID urządzenia testowego dodebugDevices
HashSet, aby Twoje urządzenia osobiste mogły zostać zignorowane, nawet podczas budowania w trybie zwolnienia.Uwaga. Zwrócony identyfikator urządzenia
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
nie jest gwarantowany, że jest unikalny lub stały (można go zmienić po przywróceniu ustawień fabrycznych lub ręcznie na zrootowanym urządzeniu). Ale powinno być wystarczająco dobre.Sprawdź, czy BuildConfig. szuka poprawnej klasy BuildConfig. Często istnieje kilka opcji, a niewłaściwa może zostać wciągnięta.
źródło
To głupia odpowiedź, wiem.
Po prostu komentuj
Fabric.with(this, new Crashlytics());
, pracuj nad tym i odkomentuj to, kiedy chcesz go opublikować.źródło