| प्लैटफ़ॉर्म चुनें: | iOS+ Android Android NDK Flutter Unity |
अगर Android ऐप्लिकेशन में नेटिव लाइब्रेरी का इस्तेमाल किया जाता है, तो Firebase Crashlytics से नेटिव कोड के लिए, पूरे स्टैक ट्रेस और क्रैश की जानकारी वाली रिपोर्ट चालू की जा सकती हैं. इसके लिए, आपको ऐप्लिकेशन के बिल्ड कॉन्फ़िगरेशन में कुछ छोटे अपडेट करने होंगे.
इस गाइड में, एनडीके के लिए Firebase Crashlytics SDK टूल की मदद से, क्रैश रिपोर्टिंग को कॉन्फ़िगर करने का तरीका बताया गया है.
अगर आपको अपने Unity प्रोजेक्ट में Crashlytics का इस्तेमाल शुरू करने का तरीका जानना है, तो Unity के शुरुआती निर्देश देखें.
शुरू करने से पहले
अगर आपने पहले से ही A/B टेस्टिंग नहीं बनाई है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें. अगर आपके पास कोई Android ऐप्लिकेशन नहीं है, तो सैंपल के तौर पर मिला ऐप्लिकेशन डाउनलोड किया जा सकता है.
सुझाव: क्रैश, नॉन-फ़ेटल या एएनआर इवेंट से पहले उपयोगकर्ता की कार्रवाइयों को समझने के लिए, ब्रेडक्रंब लॉग अपने-आप जनरेट होने की सुविधा चालू करें. इसके लिए, आपको अपने Firebase प्रोजेक्ट में Google Analytics को चालू करना होगा.
अगर आपको नया Firebase प्रोजेक्ट बनाना है, तो प्रोजेक्ट बनाने के वर्कफ़्लो के दौरान Google Analytics को चालू करें.
अगर किसी ऐसे मौजूदा Firebase प्रोजेक्ट का इस्तेमाल किया जा रहा है जिसमें Google Analytics चालू नहीं है, तो उसे चालू करने के लिए Firebase कंसोल के
सेटिंग > इंटिग्रेशन पेज पर जाएं.
पक्का करें कि आपके ऐप्लिकेशन के पास ये ज़रूरी वर्शन हों:
- Gradle 8.0
- Android Gradle प्लगिन 8.1.0
- Google services Gradle प्लगिन 4.4.1
पहला चरण: अपने ऐप्लिकेशन में एनडीके के लिए Crashlytics SDK टूल जोड़ें
अपनी मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर<project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle) में, Android के लिए Crashlytics एनडीके लाइब्रेरी की डिपेंडेंसी जोड़ें. हमारा सुझाव है कि लाइब्रेरी के वर्शन को कंट्रोल करने के लिए,
Firebase Android BoM
का इस्तेमाल करें.
Crashlytics का बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि आप अपने Firebase प्रोजेक्ट में Google Analytics को चालू करें. साथ ही, अपने ऐप्लिकेशन में Google Analytics के लिए Firebase SDK टूल जोड़ें.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.2")) // 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") }
Firebase Android BoM का इस्तेमाल करने पर, आपका ऐप्लिकेशन हमेशा Firebase Android लाइब्रेरी के साथ काम करने वाले वर्शन का इस्तेमाल करेगा.
(दूसरा तरीका) BoM का इस्तेमाल किए बिना, Firebase लाइब्रेरी डिपेंडेंसी जोड़ें
अगर आपको Firebase BoM का इस्तेमाल नहीं करना है, तो आपको Firebase लाइब्रेरी के हर वर्शन को उसकी डिपेंडेंसी लाइन में बताना होगा.
ध्यान दें कि अगर आपके ऐप्लिकेशन में एक से ज़्यादा Firebase लाइब्रेरी इस्तेमाल की जाती हैं, तो हमारा सुझाव है कि लाइब्रेरी के वर्शन मैनेज करने के लिए, BoM का इस्तेमाल करें. इससे यह पक्का किया जा सकेगा कि सभी वर्शन साथ काम करते हों.
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:21.0.0") implementation("com.google.firebase:firebase-analytics:24.0.0") }
दूसरा चरण: अपने ऐप्लिकेशन में Crashlytics Gradle प्लग इन जोड़ना
अपनी रूट-लेवल (प्रोजेक्ट-लेवल) Gradle फ़ाइल (
<project>/build.gradle.ktsया<project>/build.gradle) में, Crashlytics Gradle प्लगिन कोpluginsब्लॉक में जोड़ें:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
अपनी मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर
<project>/<app-module>/build.gradle.ktsया<project>/<app-module>/build.gradle) में, Crashlytics Gradle प्लगिन जोड़ें:Kotlin
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") }
Groovy
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' }
तीसरा चरण: अपने बिल्ड में Crashlytics एक्सटेंशन जोड़ना
अपनी मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle) में, Crashlytics एक्सटेंशन को कॉन्फ़िगर करें.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // 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 } } } }
Groovy
// ... 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 } } } }
चौथा चरण: नेटिव सिंबल अपने-आप अपलोड होने की सुविधा सेट अप करना
एनडीके क्रैश से पढ़े जा सकने वाले स्टैक ट्रेस जनरेट करने के लिए, Crashlytics को आपकी नेटिव बाइनरी में मौजूद सिंबल के बारे में जानकारी होनी चाहिए. Crashlytics Gradle प्लग इन में, इस प्रोसेस को ऑटोमेट करने के लिए uploadCrashlyticsSymbolFileBUILD_VARIANT टास्क शामिल होता है.
सिंबल अपने-आप अपलोड होने की सुविधा का टास्क ऐक्सेस करने के लिए, पक्का करें कि आपके मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल में,
nativeSymbolUploadEnabledकोtrueपर सेट किया गया हो.स्टैक ट्रेस में मेथड के नाम दिखाने के लिए, आपको अपनी एनडीके लाइब्रेरी के हर बिल्ड के बाद,
uploadCrashlyticsSymbolFileBUILD_VARIANTटास्क को साफ़ तौर पर शुरू करना होगा. उदाहरण के लिए:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
NDK के लिए Crashlytics SDK टूल और Crashlytics Gradle प्लग इन, दोनों नेटिव शेयर किए गए ऑब्जेक्ट में जीएनयू बिल्ड आईडी की मौजूदगी पर निर्भर करते हैं.
हर बाइनरी पर
चलाकर, इस आईडी की मौजूदगी की पुष्टि की जा सकती है. अगर बिल्ड आईडी मौजूद नहीं है, तो समस्या को ठीक करने के लिए, अपने बिल्ड सिस्टम के फ़्लैग मेंreadelf -n जोड़ें.-Wl,--build-id
पांचवां चरण: सेटअप पूरा करने के लिए, टेस्ट क्रैश को फ़ोर्स करना
Crashlytics को सेट अप करने और Firebase कंसोल के Crashlytics डैशबोर्ड में शुरुआती डेटा देखने के लिए, आपको टेस्ट क्रैश को फ़ोर्स करना होगा.
अपने ऐप्लिकेशन में ऐसा कोड जोड़ें जिसका इस्तेमाल करके, टेस्ट क्रैश को ज़बरदस्ती ट्रिगर किया जा सके.
अपने ऐप्लिकेशन में बटन जोड़ने के लिए, ऐप्लिकेशन के
MainActivityमें इस कोड का इस्तेमाल किया जा सकता है. इस बटन को दबाने पर, ऐप्लिकेशन क्रैश हो जाता है. इस बटन पर "क्रैश की जांच करें" लेबल लगा होता है.Kotlin
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))
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));
अपना ऐप्लिकेशन बनाएं और चलाएं.
अपने ऐप्लिकेशन के क्रैश होने की पहली रिपोर्ट भेजने के लिए, टेस्ट क्रैश को फ़ोर्स करें:
अपने टेस्ट डिवाइस या एम्युलेटर से अपना ऐप्लिकेशन खोलें.
अपने ऐप्लिकेशन में, "क्रैश की जांच करें" बटन दबाएं. आपने इस बटन को ऊपर दिए गए कोड का इस्तेमाल करके जोड़ा है.
ऐप्लिकेशन क्रैश होने के बाद, उसे रीस्टार्ट करें, ताकि वह Firebase को क्रैश रिपोर्ट भेज सके.
Firebase कंसोल में, DevOps और यूज़र ऐक्टिविटी > Crashlytics डैशबोर्ड पर जाकर, क्रैश की जांच वाली रिपोर्ट देखें.
अगर आपने कंसोल को रीफ़्रेश किया है और पांच मिनट के बाद भी आपको टेस्ट क्रैश नहीं दिख रहा है, तो डीबग लॉगिंग चालू करें. इससे आपको यह पता चलेगा कि आपका ऐप्लिकेशन, क्रैश रिपोर्ट भेज रहा है या नहीं.
बस, हो गया! Crashlytics अब आपके ऐप्लिकेशन के क्रैश होने की निगरानी कर रहा है. साथ ही, Crashlytics डैशबोर्ड में क्रैश रिपोर्ट और आंकड़े देखे जा सकते हैं और उनकी जांच की जा सकती है.
अगले चरण
(सुझाया गया) नेटिव मेमोरी की गड़बड़ियों की वजह से होने वाले क्रैश को डीबग करने में मदद पाएं. इसके लिए, GWP-ASan रिपोर्ट इकट्ठा करें. मेमोरी से जुड़ी ये गड़बड़ियां, आपके ऐप्लिकेशन में मेमोरी के खराब होने से जुड़ी हो सकती हैं. यह ऐप्लिकेशन की सुरक्षा से जुड़े जोखिमों की मुख्य वजह है. डीबग करने की इस सुविधा का फ़ायदा पाने के लिए, पक्का करें कि आपके ऐप्लिकेशन में GWP-ASan को साफ़ तौर पर चालू किया गया हो. साथ ही, वह एनडीके के लिए Crashlytics SDK टूल के सबसे नए वर्शन (18.3.6 या इसके बाद का वर्शन या Firebase BoM 31.3.0 या इसके बाद का वर्शन) का इस्तेमाल करता हो.
ऑप्ट-इन रिपोर्टिंग, लॉग, कुंजियां, और गंभीर नहीं होने वाली गड़बड़ियों को ट्रैक करने की सुविधा जोड़कर, क्रैश रिपोर्ट के सेटअप को पसंद के मुताबिक बनाएं.
Google Play के साथ इंटिग्रेट करें, ताकि आप Crashlytics डैशबोर्ड में सीधे Google Play ट्रैक के हिसाब से, अपने Android ऐप्लिकेशन के क्रैश होने की रिपोर्ट फ़िल्टर कर सकें. इससे आपको अपने डैशबोर्ड को खास बिल्ड पर बेहतर तरीके से फ़ोकस करने में मदद मिलती है.
समस्या का हल
अगर आपको Firebase कंसोल और logcat में अलग-अलग स्टैक ट्रेस दिख रहे हैं, तो समस्या हल करने की गाइड देखें.
सिंबल अपलोड करने के अन्य विकल्प
इस पेज पर ऊपर दिया गया मुख्य वर्कफ़्लो, स्टैंडर्ड Gradle बिल्ड पर लागू होता है. हालांकि, कुछ ऐप्लिकेशन अलग कॉन्फ़िगरेशन या टूल का इस्तेमाल करते हैं. उदाहरण के लिए, Gradle के अलावा कोई अन्य बिल्ड प्रोसेस. इन स्थितियों में, सिंबल को अपलोड करने के लिए ये विकल्प मददगार हो सकते हैं.
विकल्प: लाइब्रेरी मॉड्यूल और बाहरी डिपेंडेंसी के लिए सिंबल अपलोड करना
यह विकल्प इन स्थितियों में मददगार हो सकता है:
- अगर Gradle में, पसंद के मुताबिक बनाई गई एनडीके बिल्ड प्रोसेस का इस्तेमाल किया जाता है
- अगर आपकी नेटिव लाइब्रेरी, किसी लाइब्रेरी/फ़ीचर मॉड्यूल में बनाई गई हैं या किसी तीसरे पक्ष ने उपलब्ध कराई हैं, तो
- अगर सिंबल अपने-आप अपलोड होने का टास्क पूरा नहीं हो पा रहा है या आपको Crashlytics डैशबोर्ड में, बिना सिंबल वाले क्रैश दिख रहे हैं, तो
विकल्प: नॉन-ग्रेड बिल्ड या ऐक्सेस न की जा सकने वाली अनस्ट्रिप्ड नेटिव लाइब्रेरी के लिए सिंबल अपलोड करना
यह विकल्प इन स्थितियों में मददगार हो सकता है:
अगर Gradle के अलावा किसी अन्य बिल्ड प्रोसेस का इस्तेमाल किया जाता है
अगर आपकी अनस्ट्रिप्ड नेटिव लाइब्रेरी आपको किसी ऐसे तरीके से उपलब्ध कराई जाती हैं कि Gradle बिल्ड के दौरान उन्हें ऐक्सेस नहीं किया जा सकता, तो