यदि आपके Android ऐप में देशी लाइब्रेरी हैं, तो आप अपने ऐप के बिल्ड कॉन्फ़िगरेशन में कुछ छोटे अपडेट के साथ Firebase Crashlytics से अपने मूल कोड के लिए पूर्ण स्टैक ट्रेस और विस्तृत क्रैश रिपोर्ट सक्षम कर सकते हैं।
यह मार्गदर्शिका बताती है कि NDK के लिए Firebase Crashlytics SDK के साथ क्रैश रिपोर्टिंग को कैसे कॉन्फ़िगर किया जाए।
यदि आप अपनी यूनिटी परियोजनाओं में Crashlytics के साथ शुरुआत करने का तरीका ढूंढ रहे हैं, तो यूनिटी गेटिंग स्टार्टेड गाइड देखें।
शुरू करने से पहले
यदि आपने पहले से नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें । यदि आपके पास Android ऐप नहीं है, तो आप एक नमूना ऐप डाउनलोड कर सकते हैं।
अनुशंसित : क्रैश-मुक्त उपयोगकर्ता, ब्रेडक्रंब लॉग और वेलोसिटी अलर्ट जैसी सुविधाएं प्राप्त करने के लिए, आपको अपने फायरबेस प्रोजेक्ट में Google Analytics को सक्षम करना होगा।
यदि आपके मौजूदा Firebase प्रोजेक्ट में Google Analytics सक्षम नहीं है, तो आप Firebase कंसोल में अपनी एकीकरण टैब से Google Analytics को सक्षम कर सकते हैं।
> प्रोजेक्ट सेटिंग्स केयदि आप एक नया फायरबेस प्रोजेक्ट बना रहे हैं, तो प्रोजेक्ट निर्माण कार्यप्रवाह के दौरान Google Analytics को सक्षम करें।
चरण 1 : NDK के लिए Crashlytics SDK को अपने ऐप में जोड़ें
अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल (आमतौर पर<project>/<app-module>/build.gradle
) में, Crashlytics NDK Android लाइब्रेरी के लिए निर्भरता जोड़ें। हम लाइब्रेरी वर्ज़निंग को नियंत्रित करने के लिए Firebase Android BoM का उपयोग करने की सलाह देते हैं।Crashlytics के साथ बेहतरीन अनुभव के लिए, हम आपके Firebase प्रोजेक्ट में Google Analytics को सक्षम करने और Google Analytics के लिए Firebase SDK को अपने ऐप में जोड़ने की सलाह देते हैं।
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // 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-ktx' }
Firebase Android BoM का उपयोग करके, आपका ऐप हमेशा Firebase Android पुस्तकालयों के संगत संस्करणों का उपयोग करेगा।
(वैकल्पिक) BoM का उपयोग किए बिना Firebase लाइब्रेरी निर्भरताएँ जोड़ें
यदि आप Firebase BoM का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक Firebase लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए बीओएम का उपयोग करने की दृढ़ता से अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
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:18.3.7' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.1.0') // 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 लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए बीओएम का उपयोग करने की दृढ़ता से अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
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:18.3.7' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
चरण 2 : Crashlytics Gradle प्लगइन को अपने ऐप में जोड़ें
अपने रूट-लेवल (प्रोजेक्ट-लेवल) ग्रैडल फ़ाइल (
<project>/build.gradle
) में, Crashlytics Gradle प्लगइन को बिल्डस्क्रिप्ट डिपेंडेंसी के रूप में जोड़ें:buildscript { repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } dependencies { ... classpath 'com.android.tools.build:gradle:7.2.0' // Make sure that you have the Google services Gradle plugin dependency classpath 'com.google.gms:google-services:4.3.15' // Add the dependency for the Crashlytics Gradle plugin classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' } }
अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल में (आमतौर पर
<project>/<app-module>/build.gradle
), Crashlytics Gradle प्लगइन जोड़ें: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' ... }
चरण 3 : अपने बिल्ड में firebaseCrashlytics
एक्सटेंशन जोड़ें
अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल (आमतौर पर app/build.gradle
) में, firebaseCrashlytics
एक्सटेंशन जोड़ें।
Kotlin+KTX
// ... 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 } } } }
Java
// ... 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 } } } }
चरण 4 : देशी प्रतीकों का स्वचालित अपलोड सेट अप करें
NDK क्रैश से पठनीय स्टैक ट्रेस बनाने के लिए, Crashlytics को आपके मूल बायनेरिज़ में प्रतीकों के बारे में जानने की आवश्यकता है। Crashlytics Gradle प्लगइन में इस प्रक्रिया को स्वचालित करने के लिए uploadCrashlyticsSymbolFile BUILD_VARIANT
कार्य शामिल है।
ताकि आप स्वचालित प्रतीक अपलोड करने के लिए कार्य तक पहुंच सकें, सुनिश्चित करें कि आपके मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल में
nativeSymbolUploadEnabled
true
पर सेट है।आपके स्टैक ट्रेस में विधि के नाम दिखाई देने के लिए, आपको अपनी NDK लाइब्रेरी के प्रत्येक निर्माण के बाद
uploadCrashlyticsSymbolFile BUILD_VARIANT
कार्य को स्पष्ट रूप से शुरू करना होगा। उदाहरण के लिए:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
NDK के लिए Crashlytics SDK और Crashlytics Gradle प्लगइन दोनों मूल साझा वस्तुओं के भीतर GNU बिल्ड आईडी की उपस्थिति पर निर्भर करते हैं।
आप प्रत्येक बाइनरी पर
readelf -n
चलाकर इस आईडी की उपस्थिति की पुष्टि कर सकते हैं। यदि बिल्ड आईडी अनुपस्थित है, तो समस्या को ठीक करने के लिए-Wl,--build-id
अपने बिल्ड सिस्टम के फ़्लैग में जोड़ें।
चरण 5 : सेटअप समाप्त करने के लिए परीक्षण क्रैश को बाध्य करें
Crashlytics की स्थापना समाप्त करने और Firebase कंसोल के Crashlytics डैशबोर्ड में प्रारंभिक डेटा देखने के लिए, आपको एक परीक्षण क्रैश को बाध्य करने की आवश्यकता है।
अपने ऐप में कोड जोड़ें जिसका उपयोग आप टेस्ट क्रैश को बाध्य करने के लिए कर सकते हैं।
आप अपने ऐप के
MainActivity
में निम्न कोड का उपयोग अपने ऐप में एक बटन जोड़ने के लिए कर सकते हैं, जिसे दबाए जाने पर क्रैश हो जाता है। बटन को "टेस्ट क्रैश" लेबल किया गया है।Kotlin+KTX
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 कंसोल के Crashlytics डैशबोर्ड पर जाएं.
यदि आपने कंसोल को रीफ़्रेश किया है और आपको पाँच मिनट के बाद भी परीक्षण क्रैश दिखाई नहीं दे रहा है, तो यह देखने के लिए डीबग लॉगिंग सक्षम करें कि आपका ऐप क्रैश रिपोर्ट भेज रहा है या नहीं।
और बस! Crashlytics अब क्रैश के लिए आपके ऐप की निगरानी कर रहा है, और आप Crashlytics डैशबोर्ड में क्रैश रिपोर्ट और आंकड़े देख और जांच सकते हैं।
अगले कदम
(अनुशंसित) GWP-ASan रिपोर्ट एकत्र करके नेटिव मेमोरी त्रुटियों के कारण होने वाले क्रैश को डीबग करने में सहायता प्राप्त करें। मेमोरी संबंधी ये त्रुटियां आपके ऐप के भीतर मेमोरी करप्शन से जुड़ी हो सकती हैं जो ऐप सुरक्षा कमजोरियों का प्रमुख कारण है। इस सुविधा का लाभ उठाने के लिए, सुनिश्चित करें कि आपके ऐप में GWP-ASan स्पष्ट रूप से सक्षम है और NDK (v18.3.6+ या Firebase BoM v31.3.0+) के लिए नवीनतम Crashlytics SDK का उपयोग करता है।
ऑप्ट-इन रिपोर्टिंग, लॉग, कुंजियाँ और गैर-घातक त्रुटियों की ट्रैकिंग जोड़कर अपने क्रैश रिपोर्ट सेटअप को अनुकूलित करें ।
Google Play के साथ एकीकृत करें ताकि आप सीधे Crashlytics डैशबोर्ड में Google Play ट्रैक द्वारा अपने Android ऐप की क्रैश रिपोर्ट को फ़िल्टर कर सकें। यह आपको विशिष्ट बिल्ड पर अपने डैशबोर्ड को बेहतर ढंग से केंद्रित करने की अनुमति देता है।
समस्या निवारण
यदि आप फायरबेस कंसोल और लॉगकैट में अलग-अलग स्टैक ट्रेस देख रहे हैं, तो समस्या निवारण मार्गदर्शिका देखें।
प्रतीकों को अपलोड करने के लिए वैकल्पिक विकल्प
उपरोक्त इस पृष्ठ पर मुख्य कार्यप्रवाह मानक ग्रैडल बिल्ड के लिए लागू है। हालाँकि, कुछ ऐप एक अलग कॉन्फ़िगरेशन या टूलिंग का उपयोग करते हैं (उदाहरण के लिए ग्रैडल के अलावा एक बिल्ड प्रक्रिया)। इन स्थितियों में, निम्नलिखित विकल्प प्रतीकों को सफलतापूर्वक अपलोड करने में सहायक हो सकते हैं।
विकल्प : पुस्तकालय मॉड्यूल और बाहरी निर्भरताओं के लिए प्रतीक अपलोड करें
यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:
- यदि आप ग्रैडल के भीतर एक अनुकूलित एनडीके निर्माण प्रक्रिया का उपयोग करते हैं
- यदि आपकी मूल लाइब्रेरी लाइब्रेरी/फीचर मॉड्यूल में बनाई गई है या किसी तीसरे पक्ष द्वारा प्रदान की गई है
- यदि स्वचालित प्रतीक अपलोडिंग कार्य विफल हो रहा है या आप डैशबोर्ड में असंबद्ध क्रैश देख रहे हैं
मानक Crashlytics प्रतीक अपलोड कार्य मानता है कि आप मानक NDK बिल्ड टूल जैसे CMake का उपयोग करके अपने ऐप मॉड्यूल के ग्रैडल बिल्ड के हिस्से के रूप में अपनी मूल लाइब्रेरी बना रहे हैं।
हालाँकि, यदि आप ग्रैडल के भीतर एक अनुकूलित NDK निर्माण प्रक्रिया का उपयोग कर रहे हैं, या आपके मूल पुस्तकालय एक पुस्तकालय/सुविधा मॉड्यूल में निर्मित हैं या किसी तृतीय-पक्ष द्वारा प्रदान किए गए हैं, तो आपको स्पष्ट रूप से अपने अछूते पुस्तकालयों के लिए पथ निर्दिष्ट करने की आवश्यकता हो सकती है। इसे पूरा करने के लिए, आप अपनी build.gradle
फ़ाइल में firebaseCrashlytics
एक्सटेंशन में unstrippedNativeLibsDir
गुण जोड़ सकते हैं।
सुनिश्चित करें कि आपने इस पृष्ठ पर पहले मुख्य कार्यप्रवाह से निम्न प्रारंभिक कार्य पूरे कर लिए हैं:
ताकि स्वचालित प्रतीक अपलोड करने का कार्य आपकी प्रतीक जानकारी पा सके, अपने मॉड्यूल (एप्लिकेशन-स्तर)
build.gradle
फ़ाइल में निम्न जोड़ें:// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Crashlytics प्लगइन
.so
एक्सटेंशन के साथ नेटिव लाइब्रेरी के लिए निर्दिष्ट निर्देशिका को बार-बार खोजेगा। Crashlytics तब ऐसे सभी पुस्तकालयों से डिबगिंग प्रतीकों को निकालता है और उन्हें Firebase सर्वर पर अपलोड करता है।यहां बताया गया है कि आप
unstrippedNativeLibsDir
प्रॉपर्टी में क्या निर्दिष्ट कर सकते हैं:org.gradle.api.Project#files(Object...)
के लिए स्वीकार्य कोई भी तर्क, जिसमें शामिल हैं:java.lang.String
,java.io.File
, याorg.gradle.api.file.FileCollection
एक सूची या
FileCollection
उदाहरण प्रदान करके एकल निर्माण स्वाद के लिए एकाधिक निर्देशिकाएं
अंत में, Crashlytics की स्थापना समाप्त करने के लिए और Firebase कंसोल के Crashlytics डैशबोर्ड में प्रारंभिक डेटा देखने के लिए एक परीक्षण क्रैश को बाध्य करें ।
विकल्प : नॉन-ग्रेडल बिल्ड या दुर्गम अनस्ट्रिप्ड नेटिव लाइब्रेरी के लिए सिंबल अपलोड करें
यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:
यदि आप ग्रैडल के अलावा किसी अन्य निर्माण प्रक्रिया का उपयोग करते हैं
यदि आपके अनस्ट्रिप्ड देशी पुस्तकालय आपको किसी तरह से प्रदान किए जाते हैं, तो वे ग्रैडल बिल्ड के दौरान पहुंच योग्य नहीं होते हैं
इस विकल्प के लिए आवश्यक है कि जब आप कोई रिलीज़ बिल्ड या कोई बिल्ड बनाते हैं, जिसके लिए आप फायरबेस कंसोल में प्रतीकात्मक स्टैक ट्रेस देखना चाहते हैं, तो आप एक फायरबेस सीएलआई कमांड चलाते हैं।
सुनिश्चित करें कि आपने इस पृष्ठ पर पहले मुख्य कार्यप्रवाह से निम्न प्रारंभिक कार्य पूरे कर लिए हैं:
NDK के लिए Crashlytics SDK और Crashlytics Gradle प्लगइन जोड़ा गया।
ध्यान दें कि इस विकल्प के साथ, आपको
firebaseCrashlytics
एक्सटेंशन जोड़ने या स्वचालित प्रतीक अपलोड करने की आवश्यकता नहीं है क्योंकि आप इसके बजाय अपनी प्रतीक फ़ाइलों को बनाने और अपलोड करने के लिए Firebase CLI (नीचे अगले चरण) का उपयोग करेंगे।प्रतीक अपलोड करने के लिए अपना परिवेश और प्रोजेक्ट सेट करें:
Firebase CLI स्थापित करने के लिए निर्देशों का पालन करें।
यदि आपने पहले ही CLI स्थापित कर लिया है, तो सुनिश्चित करें कि आप इसके नवीनतम संस्करण में अपडेट कर लें ।
(केवल Android API स्तर 30+ का उपयोग करने वाले ऐप्स के लिए) पॉइंटर टैगिंग को अक्षम करने के लिए अपने ऐप के
AndroidManifest.xml
टेम्प्लेट को अपडेट करें:Android प्लेयर सेटिंग्स > प्रकाशन सेटिंग > बिल्ड > कस्टम मेन मेनिफेस्ट के लिए बॉक्स को चेक करें।
Assets/Plugins/Android/AndroidManifest.xml
पर स्थित मेनिफेस्ट टेम्पलेट खोलें।<application android:allowNativeHeapPointerTagging="false" ... />
टैग में निम्न विशेषता जोड़ें:
अपना प्रोजेक्ट बनाएं।
अपने प्रतीकों की जानकारी अपलोड करें।
एक बार जब आपका निर्माण समाप्त हो जाता है, तो Crashlytics-संगत प्रतीक फ़ाइल उत्पन्न करें और निम्न Firebase CLI आदेश चलाकर इसे Firebase सर्वर पर अपलोड करें:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : आपका Firebase Android ऐप आईडी (आपके पैकेज का नाम नहीं)
उदाहरण Firebase Android ऐप आईडी:1:567383003300:android:17104a2ced0c9b9b
अपनी फायरबेस ऐप आईडी खोजने के दो तरीके यहां दिए गए हैं:
आपकी
google-services.json
फ़ाइल में, आपकी ऐप आईडीmobilesdk_app_id
मान है; याFirebase कंसोल में, अपनी प्रोजेक्ट सेटिंग पर जाएं. योर ऐप कार्ड तक नीचे स्क्रॉल करें, फिर वांछित फायरबेस ऐप की ऐप आईडी खोजने के लिए उस पर क्लिक करें।
PATH/TO/SYMBOLS : CLI द्वारा उत्पन्न प्रतीक फ़ाइल का पथ
Android Studio प्रोजेक्ट में निर्यात किया गया — PATH/TO/SYMBOLS कोई भी निर्देशिका हो सकती है। फायरबेस सीएलआई पुनरावर्ती रूप से एक
.so
एक्सटेंशन के साथ मूल पुस्तकालयों के लिए निर्दिष्ट निर्देशिका की खोज करेगा।एकता के भीतर से सीधे APK का निर्माण किया - PATH/TO/SYMBOLS आपके निर्माण के समाप्त होने पर प्रोजेक्ट रूट डायरेक्टरी में उत्पन्न ज़िपित प्रतीक फ़ाइल का पथ है (उदाहरण के लिए:
myproject/myapp-1.0-v100.symbols.zip
)।
प्रतीक फ़ाइल बनाने और अपलोड करने के लिए Firebase CLI कमांड का उपयोग करने के लिए उन्नत विकल्प देखें
झंडा विवरण --generator=csym
डिफ़ॉल्ट ब्रेकपैड जनरेटर के बजाय पुराने cSYM प्रतीक फ़ाइल जनरेटर का उपयोग करता है
उपयोग के लिए अनुशंसित नहीं। हम डिफ़ॉल्ट ब्रेकपैड प्रतीक फ़ाइल जनरेटर का उपयोग करने की सलाह देते हैं।
--generator=breakpad
ब्रेकपैड प्रतीक फ़ाइल जनरेटर का उपयोग करता है
ध्यान दें कि प्रतीक फ़ाइल निर्माण के लिए डिफ़ॉल्ट ब्रेकपैड है। इस ध्वज का उपयोग केवल तभी करें जब आपने अपने बिल्ड कॉन्फ़िगरेशन में
symbolGenerator { csym() }
जोड़ा हो और आप इसके बजाय ब्रेकपैड का उपयोग करने के लिए इसे ओवरराइड करना चाहते हों।--dry-run
प्रतीक फ़ाइलें बनाता है लेकिन उन्हें अपलोड नहीं करता
यदि आप भेजी गई फ़ाइलों की सामग्री का निरीक्षण करना चाहते हैं तो यह फ़्लैग उपयोगी है।
--debug
अतिरिक्त डिबगिंग जानकारी प्रदान करता है अंत में, Crashlytics की स्थापना समाप्त करने के लिए और Firebase कंसोल के Crashlytics डैशबोर्ड में प्रारंभिक डेटा देखने के लिए एक परीक्षण क्रैश को बाध्य करें ।
जब आप किसी क्रैश को मजबूर करने के भाग के रूप में अपना ऐप बनाते हैं, तो अपनी प्रतीक फ़ाइल अपलोड करने के लिए Firebase CLI
crashlytics:symbols:upload
कमांड चलाना सुनिश्चित करें।