विकास के दौरान क्रैशलाइटिक्स को कैसे अक्षम करें


245

क्या विकास करते समय क्रैशलाइटिक्स एंड्रॉइड एसडीके को बंद करने का कोई सरल तरीका है?

मैं यह नहीं चाहता कि मैं हर बार कुछ बेवकूफ बनाने के लिए एक दुर्घटना भेजूं

दूसरी ओर मैं बाहर टिप्पणी नहीं करना चाहता हूं Crashlytics.start()और संभवतः इसे और कम करने के लिए भूल जाना जोखिम है


क्या आपने अपनी एपीआई कुंजी को प्रकट करने से हटाने की कोशिश की है, मुझे याद नहीं है कि क्या कोई दुर्घटना है।
तिमेटीज

@timmied यह क्रैश हो जाता है। Manifestऐप को क्रैश करने में पूरी लाइन को कमेंट करना ताकि यह सवाल थोड़ा और वैध हो जाए।
माइकल

जवाबों:


172

यहां क्रैशशेटिक्स से मार्क करें। जब आप अपना डीबग बिल्ड कर रहे हों, तो क्रैशलैटिक्स को अक्षम करने के कुछ तरीके यहां दिए गए हैं!

  1. डिबग और रिलीज़ बिल्ड के लिए एक भिन्न Android: versionString का उपयोग करें और फिर डिबग संस्करण के लिए क्रैशलाइटिक्स वेब डैशबोर्ड से क्रैश रिपोर्टिंग अक्षम करें।

  2. डिबग फ्लैग की जांच करने वाले एक स्टेटमेंट में Crashlytics.start () पर कॉल को लपेटें। आप या तो एक कस्टम ध्वज का उपयोग कर सकते हैं या यहां प्रस्तावित लोगों की तरह एक दृष्टिकोण: यह कैसे जांचें कि एपीके पर हस्ताक्षर किए गए हैं या "डीबग बिल्ड"?


5
@marcr सिर्फ BuildConfig.DEBUG का उपयोग करने के बारे में कैसे?
dannyroa

3
@dannyroa BuildConfig.DEBUG एक मानक झंडा नहीं है जो सभी बिल्ड वातावरण में काम करता है। मेरा मानना ​​है कि यह ग्रहण और ADT के साथ निर्माण करते समय लगातार सेट होता है, लेकिन कहीं और नहीं।
मक्र

11
BuildConfig.DEBUGयदि आप ग्रैडल का उपयोग कर निर्माण कर रहे हैं तो इसका उपयोग किया जाना चाहिए। यह हमेशा ठीक से उत्पन्न होगा।
ऑस्टिन महोनी

3
@marcr के बारे में कैसे दुर्घटना के नवीनतम संस्करण में (जैसा कि यह फैब्रिक के साथ विलय होता है), क्या पुस्तकालय आंतरिक जांच करता है BuildConfig.DEBUG?
akhy

2
@akhyar यह स्वचालित रूप से जाँच नहीं की जाती है, मैं उपयोग करता हूँ: if ((BuildConfig.DEBUG) {Fabric.with (यह, नया क्रैशलाईटिक्स ());}
Björn Kechel

387

मुझे क्रैशलाईटिक्स से समाधान मिला (फैब्रिक एकीकरण के साथ)

अपने एप्लिकेशन वर्ग के अंदर निम्नलिखित कोड डालें onCreate()

Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, crashlytics);

संपादित करें:

क्रशालिटिक्स 2.3 और इसके बाद के संस्करण में, यह पदावनत है। सही कोड है:

CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());

या

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());

( Crashlytics से हटाए गए विधि से अक्षम विधि () )


EDIT2:

आप वैकल्पिक रूप से इसे अपने buildTypeग्रेडिंग में जोड़ सकते हैं । यह कमांड क्रैशलिफ्टिंग मैपिंग फ़ाइल भेजने और प्रत्येक बिल्ड के लिए एक आईडी जनरेट करने में अक्षम करता है, जो उन फ्लेवर के ग्रेडेल बिल्ड को गति देता है। (यह रन टाइम में क्रैशलाईटिक्स को अक्षम नहीं करता है।) माइक बी का जवाब यहां देखें।

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}

2
यह उपयोग करने के लिए बहुत अच्छा है और यदि आप अपने एप्लिकेशन क्लास के बाहर अपने कोड में क्रैशशेटिक्स को कॉल करते हैं, तो आपके ऐप को क्रैश होने से रोक देगा।
स्पीडिनोमैड्स

1
यह Crashlytics 2.3.0 :(
डेमियन Walczak

1
ext.enableCrashlytics = false मेरे साथ 2.5 के लिए भी काम नहीं करता है। वास्तव में, यह कभी काम नहीं किया। फैब्रिक से पहले भी।
बाओ-लॉन्ग गुयेन-ट्रॉन्ग

2
मुझे यहां एक चिंता है। क्या यह उत्तर और बीटा को सक्षम करेगा? ऐसा लगता है कि यह अधिक सही होना चाहिए: CrashlyticsCore core = new CrashlyticsCore.Bilder (), अक्षम (BuildConfig.DEBUG) .build (); Fabric.with (यह, नया उत्तर), नया बीटा (), नया Crashlytics.Builder ()। कोर (कोर) .build ());
gbero

1
ext.enableCrashlytics = false दुर्घटना नहीं होती है यदि आप इसे सही तरीके से उपयोग करते हैं। फैब्रिक डॉक्यूमेंटेशन में क्रैश से कैसे उबरें : docs.fabric.io/android/crashlytics/build-tools.html
फ्रैंक

46

चुना हुआ उत्तर किसी भी अधिक सही नहीं है। Google ने Crashlytics के एकीकरण को बदल दिया । मेरा वर्तमान संस्करण है 2.9.1और केवल एक चीज जो मुझे करनी है, वह implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'है मेरी ग्रेडल फ़ाइल में जोड़ना । आगे और कोई चीज़ की आवश्यकता नहीं है, अच्छा है लेकिन इसका मतलब है कि क्रैशलाईटिक्स हमेशा चल रहा है।

समाधान 1

केवल रिलीज़ संस्करण में क्रैशलाइक्स संकलित करें:

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

समाधान २

यदि आप इसके अलावा Crashlytics कॉन्फ़िगर करना चाहते हैं तो समाधान 1 काम नहीं कर रहा है, क्योंकि Crashlytics वर्ग डीबग बिल्ड में नहीं मिलेगा। इसलिए ग्रैडल कार्यान्वयन को वापस इसमें बदलें:

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

फिर अपने मेनिफेस्ट में जाएं और meta-dataटैग के अंदर निम्नलिखित टैग जोड़ें application:

<application
        android:name="...>

        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

...

</application>

अपनी लॉन्च-गतिविधि में जोड़ें (केवल एक-बार आवश्यक, प्रत्येक गतिविधि नहीं)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

यह केवल रिलीज़ संस्करणों में क्रैशलाइटिक्स को सक्षम करेगा। सावधान रहें, BuildConfig.DEBUG के लिए भी जाँच करें जब आप क्रैशशेटिक्स, जैसे कॉन्फ़िगर करते हैं:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

2
यह साफ लगता है। प्राथमिक गतिविधि में प्रारंभिक करने के बजाय, जब एप्लिकेशन इंस्टेंस में नहीं?
जूल्स

वे वेबसाइट पर राज्य करते हैं: Enable collection for selected users by initializing Crashlytics from one of your app's activitiesलेकिन मुझे लगता है कि यदि आप एप्लिकेशन में क्रैशलाइक्स को इनिशियलाइज़ करते हैं तो यह बहुत अधिक नहीं बदलता है। क्या तुमने कोशिश की? अगर यह काम करता है, तो मैं इसे अपने जवाब में जोड़ सकता हूं। firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger

2
रनटाइम में क्रैशलीटिक्स को अक्षम करने के लिए मुझे काम करने के लिए कोई अन्य समाधान नहीं मिला। समाधान 1 ने पूरी तरह से काम किया - मैंने ऐसा क्यों नहीं सोचा।

समाधान के लिए धन्यवाद। जब मैं firebase_crashlytics_collection_enabledप्रकट होता है तो क्रैश कंसोल पर दिखाई नहीं देता (मैं v2.9.9 का उपयोग करता हूं)। इसलिए मैंने डिबग बिल्ड के साथ firebase_crashlytics_collection_enabled=falseऔर trueरिलीज़ के लिए अलग-अलग प्रकट को जोड़कर इसे निर्धारित किया
वासिली कबुनोव

30

यदि आप ग्रैडल का उपयोग करते हैं तो इसे स्वाद में जोड़ें:

ext.enableCrashlytics = false

1
यह केवल स्वाद के लिए है? डिबग बनाम रिलीज़ के बारे में क्या? मैंने डिबग के लिए अक्षम करने की कोशिश की, लेकिन अभी भी दुर्घटना
xialin

मुझे लगता है कि यह केवल जायके पर काम करता है। IMO ध्वज का उपयोग करना ऑस्टिन और Marcc बताया सबसे आसान है।
user1998494

मुझे इसका हल पता चला। लेकिन यकीन नहीं है कि यह पुराने क्रैशलाईटिक्स के लिए अनुकूल है। यह फैब्रिक एसडीके में नए क्रैशलाईटिक्स के लिए है। नीचे मेरे जवाब की जाँच करें
xialin

1
यह कमांड क्रैशलिफ्टिंग मैपिंग फ़ाइल भेजने और प्रत्येक बिल्ड के लिए एक आईडी जनरेट करने में अक्षम करता है, जो उन फ्लेवर के ग्रेडेल बिल्ड को गति देता है। (यह रन टाइम पर क्रैशलाईटिक्स को अक्षम नहीं करता है।) माइक बी का जवाब यहां देखें: stackoverflow.com/questions/28339323/…
Aphex

18
इससे दुर्घटना हुई ... " This app relies on Crashlytics."
साकिबॉय

27

नवीनतम डॉक्टर की जाँच करें। https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup

इसके अलावा ext.enableCrashlytics = falsebuild.grad में आपको जोड़ने के अलावा ,

Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);

मैं इस तरह की कोशिश की, और अभी भी अनुप्रयोग के साथ दुर्घटनाओंThis app relies on Crashlytics. Please sign up for access at
Balflear

मुझे लगता है कि आप ext.enableCrashlytics = falsebuild.gradle में गायब हैं ।
अभिषेक पाटीदार

नहीं, मैंने डीबग बिल्ड टाइप में build.gradle फ़ाइल में जोड़ा है, यह buildTypes -> debug, also i'm applying the plugin via लागू होने वाले प्लगइन में है: 'io.fabric'`
Balflear

मुझे यकीन नहीं है कि इस समाधान को 24 बार भी क्यों उखाड़ा गया। के साथ दुर्घटनाThis app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

मुझे यह सबसे आसान उपाय लगता है:

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

उपरोक्त पंक्तियाँ एक स्थिर बूलियन फ़ील्ड बनाएगी जिसे फ़ाइल enableCrashlyticsमें कहा जाता है BuildConfigजिसका उपयोग आप यह तय करने के लिए कर सकते हैं कि क्या आरंभ करना है Fabricया नहीं:

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

नोट: इस विधि के साथ कपड़े केवल रिलीज बिल्ड (प्रारंभिक कोड में संकेत के रूप में) में शुरू किए जाते हैं। इसका मतलब है कि आपको Crashlyticsकक्षा में स्टैटिक्स के तरीकों को एक ifब्लॉक में रखने की आवश्यकता है जो यह जांचता है कि कपड़े को नीचे दिखाए गए अनुसार प्रारंभ किया गया है या नहीं।

if (Fabric.isInitialized())
    Crashlytics.logException(e);

अन्यथा Must Initialize Fabric before using singleton()एमुलेटर पर परीक्षण करते समय ऐप त्रुटि के साथ क्रैश हो जाएगा ।


17

2019 उत्तर

मैं केवल 2 घंटे के लिए डिबग में अक्षम और अक्षम होने की कोशिश कर रहा हूं, यह देखने के लिए Firebase कंसोल की जांच कर रहा हूं कि क्या अपवाद अपलोड किया गया है या नहीं।

ऐसा करने के 2 संभावित तरीके हैं।

विकल्प 1

यह काम करता है, लेकिन अगर आप Crashlyticsडिबग पर किसी भी तरीके से कॉल करते हैं तो ऐप क्रैश हो जाएगा ।

एप्लिकेशन / build.gradle

android {
    buildTypes {
        release {
            manifestPlaceholders = [crashlyticsEnabled: true]
        }
        debug {
            manifestPlaceholders = [crashlyticsEnabled: false]
        }

AndroidManifest.xml

<manifest
    <application
        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${crashlyticsEnabled}" />

विकल्प 2

एक विकल्प अगर यह आपको पहले Crashlyticsजाँच किए बिना तरीकों को कॉल करने की अनुमति देता है BuildConfig.DEBUG। इस सेटअप के साथ आप सुरक्षित तरीके से कॉल कर सकते हैं जैसे Crashlytics.logException()- वे बस डिबग बिल्ड में कुछ भी नहीं करते हैं। मुझे रिपोर्ट डीबग में अपलोड नहीं हो रही है।

एप्लिकेशन / build.gradle

android {
    buildTypes {
        release {
            ext.enableCrashlytics = true
        }
        release {
            ext.enableCrashlytics = false
        }

AndroidManifest.xml

<manifest
    <application
        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

आवेदन onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)

मुझे लगता android:value="false"है कि इसे बदलना होगा android:value="${enableCrashlytics}"। यह नहीं है?
JaydeepW

विकल्प # 2 के साथ एक और लाभ यह है कि आप शुरू में अक्षम किए गए एनालिटिक्स संग्रह के साथ शुरू करते हैं, और फिर उपयोगकर्ता को पहले पूछ सकते हैं कि यह उनके एप्लिकेशन उपयोग को ट्रैक करने के लिए ठीक है (जीडीपीआर सोचो)। यदि आप उपयोगकर्ता को ट्रैकिंग के लिए सहमति देते हैं तो आप केवल Fabric.with कॉल करेंगे।
प्रति ईसाई हेंडेन

विकल्प # 2 का एकमात्र नकारात्मक पक्ष यह है कि यह अभी भी फायरबेस डैशबोर्ड में डिबग संस्करण बनाता है, भले ही वहां कोई क्रैश नहीं दिखाया जाएगा (क्योंकि वे अक्षम हैं)। इससे दो समस्याएं होती हैं - पहला, रिलीज़ संस्करण खोजने में कठिन हो जाता है; दूसरा - फायरबेस डैशबोर्ड केवल पिछले 100 संस्करणों को दिखाता है - जो आपको कुछ पुराने संस्करणों में क्रैश देखने से रोक सकता है। फैब्रिक डैशबोर्ड में आप किसी विशेष संस्करण को अक्षम कर सकते हैं, यह फायरबेस के डैशबोर्ड में संभव नहीं है
एलेक्स लिपोव

14

में यह प्रयोग करें MyApplication#onCreate()

if (!BuildConfig.DEBUG) Crashlytics.start(this);

EDIT यदि आपने फैब्रिक में अपग्रेड किया है, तो इस उत्तर का उपयोग करें ।


BuildConfig.DEBUG हमेशा ठीक से सेट नहीं होता है। क्रैशलीटिक्स को सक्षम / अक्षम करने के लिए इस पर भरोसा करने से IntelliJ का उपयोग करते समय मेरे लिए कुछ समस्याएं पैदा हुईं।
जेब बार्नेट

5
आप किस निर्माण उपकरण का उपयोग कर रहे हैं? ग्रेडल हमेशा उस मूल्य को निर्धारित करेगा। यह एक साल पहले एक समस्या थी, लेकिन नए निर्माण उपकरण बहुत बेहतर हैं।
ऑस्टिन महोनी

मैं v0.9 पर हूं। इंटेलीज के लिए ग्रैडल प्लग इन और ग्रैडल के लिए v1.11।
ज़ेब बार्नेट

मैंने अपने किसी भी ऐप में कोई समस्या नहीं देखी है। BuildConfigग्रैडल कार्य द्वारा उत्पन्न किया जाता है, जिसे चलाने की गारंटी दी जाती है। मैं buildConfigFieldकस्टम फ़ील्ड सेट करने के लिए भी उपयोग करता हूं और जो हमेशा काम करते हैं। tools.android.com/recent/androidstudio045released यह भी सुझाव देता है कि आप उपयोग करते हैं BuildConfig.DEBUG
ऑस्टिन महोनी

एक आदर्शवादी के रूप में मुझे यकीन है कि इसका उपयोग करने में सक्षम होना चाहिए क्योंकि मैं जिस छोटी कंपनी के लिए काम करता हूं उसके लिए यह काफी-स्वचालित-स्वचालित निर्माण प्रक्रिया को सरल नहीं करेगा। यह सिर्फ इतना है कि हमने एक निर्माण में जारी किया जो उस ध्वज के आधार पर था और क्रैशलाईटिक्स ने कभी इसे लाइव नहीं देखा। के बाद हम वापस इसे toggling मैन्युअल रूप से Crashlytics तुरंत इसे देखा।
ज़ेब बार्नेट


9

एक और सरल समाधान जो मुझे पसंद है, क्योंकि इसके लिए अलग-अलग प्रकट फ़ाइलों की आवश्यकता नहीं है:

चरण 1 - build.gradle में प्रकट प्लेसहोल्डर्स को परिभाषित करें

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

चरण 2 - अपने AndroidManifest.xml में उनका उपयोग करें

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />

6

ध्यान दें कि आप डिबग बिल्ड में प्रतीकों के कष्टप्रद अपलोडिंग को भी अक्षम कर सकते हैं:

def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
    if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
            crashlyticsUploadDeobsDebug.equals(task.name)) {

        println "Disabling $task.name."
        task.enabled = false
    }
}

बस इसे build.gradleअपने एप्लिकेशन मॉड्यूल में डालें ।


6

यदि आप सभी क्रैश (डिबग और रिलीज़ बिल्ड के लिए) पर कब्जा करना चाहते हैं, लेकिन क्रैशलाईटिक्स डैशबोर्ड में उन्हें अलग करना चाहते हैं, तो आप इस कोड को build.gradle में जोड़ सकते हैं:

debug {
    versionNameSuffix "-DEBUG"
}

उदाहरण के लिए, यदि आपके ऐप का संस्करण नाम 1.0.0 है, तो आपकी रिलीज़ बिल्ड को 1.0.0 के रूप में टैग किया जाएगा, जबकि डीबग बिल्ड 1.0.0-DEBUG होगा


यह बात है? फ्लेवर करने की जरूरत नहीं है?
portfoliobuilder

6

यहां बहुत सारे अच्छे उत्तर हैं, लेकिन मेरे परीक्षण के लिए मैं इन-हाउस बेट्स और आउट-ऑफ-द-लैब परीक्षण के लिए डिबग बिल्ड का उपयोग करता हूं जहां क्रैश लॉग अभी भी बहुत उपयोगी हैं और मैं अभी भी उन्हें रिपोर्ट करना चाहूंगा। ओपी की तरह, मैं चाहता था कि सक्रिय विकास के दौरान मैं उन्हें निष्क्रिय कर दूं जहां मैं अक्सर दुर्घटनाग्रस्त हो जाता हूं और जल्दी से दुर्घटनाग्रस्त हो जाता हूं।

सभी डिबग क्रैश को हटाने के बजाय आप केवल उन रिपोर्ट को अक्षम करना चुन सकते हैं, जब कोई डिवाइस आपके कोड से निम्न कोड के साथ विकास मशीन से जुड़ा हो।

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

यह गलत है। मैं अपने कोड में गैर-घातक अपवादों का उपयोग करके लॉग करता हूं Crashlytics.logException(e)और यह कथन डीबग बिल्ड में अपवाद को फेंक देता है क्योंकि फैब्रिक सिंगलटन को आरंभीकृत नहीं किया गया है। अगर आप Crashlytics का उपयोग करते हैं तो हमेशा फैब्रिक सिंगलटन को इनिशियलाइज़ करें। देखें fahmy का जवाब
naXa

5

समस्या यह है कि समाधानों में से कोई भी नवीनतम क्रैशब्लिटिक्स एसडीके के लिए काम नहीं करता है। (मैं 2.9.0 का उपयोग कर रहा हूँ)

आप इसे कोड द्वारा अक्षम नहीं कर सकते क्योंकि यह आपकी परियोजना में संकलित है और आपके आवेदन की कॉल ऑनक्रिएट से पहले भी चलता है। तो अन्य समाधान सरल है - जब आवश्यक न हो तो दुर्घटनाग्रस्त लोगों को संकलित न करें। Build.gradle फ़ाइल के भीतर comp compile ’कॉल को comp releaseCompile’ से बदलें।

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }

3

निर्माण करने के लिए ग्रेड का उपयोग करते समय तारीख तक का सबसे आसान संस्करण:

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics());
}

यह फैब्रिक से क्रैशलाइटिक्स के लिए नए बिल्ट-इन सिंटैक्स का उपयोग करता है और ग्रैड बिल्ड के साथ स्वचालित रूप से काम करता है।


3

एक अजीब समस्या जिसका मुझे सामना करना पड़ा: मैंने xialin के उत्तर का पालन ​​किया (जो आधिकारिक वेबसाइट पर भी दिखाई देता है) और यह काम नहीं किया। पता चला कि मैं BuildConfigफैब्रिक के पैकेज में संदर्भित कर रहा हूं जिसमें एक स्थिर DEBUG चर भी है जो डिबग मोड में भी गलत पर सेट किया गया था।

इसलिए, यदि आप उपर्युक्त समाधान का पालन करते हैं और आप अभी भी डिबग रिपोर्ट प्राप्त करते हैं, तो सुनिश्चित करें कि आप इसे संदर्भित कर रहे हैं:

import com.yourpackagename.BuildConfig;

और यह नहीं:

import io.fabric.sdk.android.BuildConfig;    

2

यदि आप BuildConfig.DEBUGसही तरीके से सेट नहीं होने के बारे में चिंतित हैं , तो ApplicationInfoइसके बजाय उपयोग करें :

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );

2

फ्लेवर का उपयोग करें या विन्यास का निर्माण। देव बिल्ड के लिए एक अलग बिल्ड पहचानकर्ता का उपयोग करें और आपके सभी क्रैश एक अलग ऐप पर जाते रहेंगे। सहकर्मियों के साथ बिल्ड साझा करने या डिबगर के बिना इसका उपयोग करने के मामले में काम आ सकता है। कुछ इस तरह -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }

2

यदि आप डिबग करने योग्य रिलीज़ बिल्ड चाहते हैं, तो यहां तरीका है:

buildTypes {
    release {
        signingConfig signingConfigs.config
        debuggable true //-> debuggable release build
        minifyEnabled true
        multiDexEnabled false
        ext.enableCrashlytics = true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
    }
    debug {
        minifyEnabled false
        multiDexEnabled true
        ext.enableCrashlytics = false
        ext.alwaysUpdateBuildId = false
        // Disable fabric build ID generation for debug builds
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
    }
}

जब आप debuggable trueअपना BuildConfig.DEBUG सेट करते हैं, तो सच के साथ आरंभ किया जाएगा, यही कारण है कि मैंने BuildConfig वर्ग में उस चर को जोड़ा है।

कपड़ा:

Crashlytics crashlytics = new Crashlytics.Builder()
            // disable crash reporting in debug build types with custom build type variable
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
            .build();

    final Fabric fabric = new Fabric.Builder(this)
            .kits(crashlytics)
            //enable debugging with debuggable flag in build type 
            .debuggable(BuildConfig.DEBUG)
            .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(fabric);

क्या उद्देश्य है ext.enableCrashlyticsऔर ext.alwaysUpdateBuildIdचूंकि वे कहीं भी संदर्भित नहीं लगते हैं। क्या मैं कुछ भूल रहा हूँ?
जूल्स


BuildConfig.BUILD_TYPE_DEBUG अनावश्यक है, BuildConfig.DEBUG एक ही मूल्य प्राप्त करने के लिए इस्तेमाल किया जा सकता
एनतोनिस Radz

@AntonisRadz क्योंकि मुझे एक डिबग करने योग्य रिलीज़ बिल्ड की आवश्यकता थी
एम। रेज़ा नासिरेलो

1

हम कपड़े की isDebuggable () विधि का उपयोग कर सकते हैं।

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

मुबारक कोडिंग :)


1

आप डिबग मोड के लिए एक समर्पित मैनिफ़ेस्ट फ़ाइल का उपयोग कर सकते हैं (क्रैशशीटिक्स 2.9.7 के साथ मेरे लिए काम करता है):

फ़ाइल बनाएं app/src/debug/AndroidManifest.xmlऔर निम्नलिखित जोड़ें:

<application>

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false"/>

</application>

ध्यान दें कि इस मेटा-डेटा तत्व को केवल डीबग / AndroidManifest.xml में डाला जाना चाहिए , और नियमित AndroidManifest.xml में नहीं

जो समाधान उपयोग करता है, CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()वह मेरे लिए काम नहीं करता था, और मुझे पता चला कि Application.onCreate () से पहले क्रैशलीटिक्स CrashlyticsInitProvider द्वारा आरंभीकृत किया जाता है या किसी भी गतिविधि को शुरू किया जाता है, जिसका अर्थ है कि एप्लिकेशन में मैन्युअल रूप से फैब्रिक फैब्रिक बनाना या कोई गतिविधि नहीं है। प्रभाव क्योंकि कपड़े पहले से ही प्रारंभिक है।


1

चरण 1: build.grad में

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

चरण 2: प्रकट में

<meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${enableCrashlytic}" />

चरण 3: आवेदन या पहली गतिविधि में

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

मुझे यकीन नहीं है कि चरण 3 आवश्यक है, लेकिन यह सुनिश्चित करने के लिए कि रिलीज संस्करण दुर्घटना के बिना काम करना चाहिए। स्रोत: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting


1

मेरे लिए यह काम:

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

और बिल्डटाइप्स में:

debug {
ext.enableCrashlytics = false
}

कैसे कोड में Crashlytics के usages के बारे में? यह आपको संकलन त्रुटियां देगा।
मीकर

1

निम्नलिखित संस्करण com.google.firebase: firebase-crashlytics: 17.0.0: के लिए Firebase Crashlytics को अक्षम करने के लिए दो विकल्प हैं:

  1. ऐप के मेनिफेस्ट में मेटा-टैग जोड़ें

<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />

या

  1. सीधे एप्लिकेशन में कॉन्फ़िगर करें (ध्यान रखें कि जब गलत पर सेट हो, तो नया मूल्य ऐप के अगले भाग तक लागू नहीं होता)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

दूसरा तरीका यदि आप इसे केवल अपनी आईडीई पर करना चाहते हैं, तो यह है कि आप प्लगइन को लॉगआउट करें। जाहिरा तौर पर यह रिपोर्ट भेजना बंद कर देगा, जबकि आप फिर से लॉगिन किए बिना बिल्ड जेनरेट कर रहे हैं।


0
  1. इसे अपने ऐप के build.gradle में जोड़ें:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. रनटाइम पर क्रैशलाइटिक्स किट को अक्षम करें। अन्यथा, Crashlytics किट त्रुटि फेंक देगा:

    // Set up Crashlytics, disabled for debug builds
    // Add These lines in your app Application class onCreate method
    
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
        .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
        .build();
    
    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(this, crashlyticsKit);
  3. AndroidManifest.xml में, जोड़ें

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />

0

2020 पोस्ट फैब्रिक जवाब

नीचे दिए गए कोड को अपने एप्लिकेशन क्लास में पेस्ट करें और setCrashlyticsStateअपने एप्लिकेशन ऑनक्रीट से विधि को कॉल करें । आप वैकल्पिक रूप से अपने परीक्षण उपकरण Ids को debugDevicesHashSet में भी जोड़ सकते हैं ताकि आपके व्यक्तिगत उपकरणों को अनदेखा किया जा सके, भले ही रिलीज़ मोड में निर्माण किया गया हो।

ध्यान दें। डिवाइस आईडी लौटाए जाने Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);की गारंटी अद्वितीय या स्थिर नहीं है (यह किसी फ़ैक्टरी रीसेट पर या मैन्युअल रूप से रूट किए गए डिवाइस पर बदल सकता है)। लेकिन यह काफी अच्छा होना चाहिए।

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

कि BuildConfig की जाँच करें। सही BuildConfig वर्ग को देख रहा है। अक्सर कई विकल्प होते हैं और गलत को अंदर खींचा जा सकता है।


-8

यह मूर्खतापूर्ण जवाब है, मुझे पता है कि
बस टिप्पणी करें Fabric.with(this, new Crashlytics());, उस पर काम करें और जब आप इसे जारी करना चाहते हैं तो इसे अनलिम करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.