अगर आपके Android ऐप में नेटिव लाइब्रेरी हैं , तो आप अपने ऐप के बिल्ड कॉन्फ़िगरेशन में कुछ छोटे अपडेट के साथ Firebase Crashlytics से अपने मूल कोड के लिए पूर्ण स्टैक ट्रेस और विस्तृत क्रैश रिपोर्ट सक्षम कर सकते हैं।
यह मार्गदर्शिका बताती है कि NDK के लिए Firebase Crashlytics SDK के साथ क्रैश रिपोर्टिंग को कैसे कॉन्फ़िगर किया जाए।
यदि आप अपने यूनिटी प्रोजेक्ट्स में क्रैशलिटिक्स के साथ शुरुआत करने का तरीका ढूंढ रहे हैं, तो यूनिटी गेटिंग स्टार्टिंग गाइड देखें।
शुरू करने से पहले
यदि आपने पहले से ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें । यदि आपके पास Android ऐप नहीं है, तो आप एक नमूना ऐप डाउनलोड कर सकते हैं।
अनुशंसित : क्रैश-मुक्त उपयोगकर्ता, ब्रेडक्रंब लॉग और वेग अलर्ट जैसी सुविधाएं प्राप्त करने के लिए, आपको अपने फायरबेस प्रोजेक्ट में Google Analytics को सक्षम करना होगा।
यदि आपके मौजूदा Firebase प्रोजेक्ट में Google Analytics सक्षम नहीं है, तो आप Firebase कंसोल में अपनी एकीकरण टैब से Google Analytics को सक्षम कर सकते हैं।
> प्रोजेक्ट सेटिंग केयदि आप एक नया Firebase प्रोजेक्ट बना रहे हैं, तो प्रोजेक्ट निर्माण कार्यप्रवाह के दौरान Google Analytics को सक्षम करें।
चरण 1 : NDK के लिए Firebase Crashlytics SDK को अपने ऐप्लिकेशन में जोड़ें
Firebase Android BoM का उपयोग करके, अपने मॉड्यूल (ऐप-स्तर) ग्रेड फ़ाइल (आमतौर परapp/build.gradle
) में Crashlytics NDK Android लाइब्रेरी के लिए निर्भरता की घोषणा करें।Crashlytics के साथ एक इष्टतम अनुभव के लिए, हम अनुशंसा करते हैं कि आप अपने Firebase प्रोजेक्ट में Google Analytics को सक्षम करें और Google Analytics के लिए Firebase SDK को अपने ऐप में जोड़ें।
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.2.0') // Declare 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' }
फायरबेस एंड्रॉइड बीओएम का उपयोग करके, आपका ऐप हमेशा फायरबेस एंड्रॉइड लाइब्रेरी के संगत संस्करणों का उपयोग करेगा।
(वैकल्पिक) BoM . का उपयोग किए बिना फायरबेस लाइब्रेरी निर्भरता घोषित करें
यदि आप फायरबेस बीओएम का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक फायरबेस लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए BoM का उपयोग करने की अत्यधिक अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
dependencies { // Declare 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.2.11' implementation 'com.google.firebase:firebase-analytics:21.0.0' }
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:30.2.0') // Declare 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' }
फायरबेस एंड्रॉइड बीओएम का उपयोग करके, आपका ऐप हमेशा फायरबेस एंड्रॉइड लाइब्रेरी के संगत संस्करणों का उपयोग करेगा।
(वैकल्पिक) BoM . का उपयोग किए बिना फायरबेस लाइब्रेरी निर्भरता घोषित करें
यदि आप फायरबेस बीओएम का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक फायरबेस लाइब्रेरी संस्करण को उसकी निर्भरता रेखा में निर्दिष्ट करना होगा।
ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए BoM का उपयोग करने की अत्यधिक अनुशंसा करते हैं, जो सुनिश्चित करता है कि सभी संस्करण संगत हैं।
dependencies { // Declare 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.2.11' implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0' }
चरण 2 : अपने ऐप में Firebase Crashlytics प्लगइन जोड़ें
अपनी प्रोजेक्ट-स्तरीय
build.gradle
फ़ाइल में, Crashlytics Gradle प्लगइन को बिल्डस्क्रिप्ट निर्भरता के रूप में जोड़ें।buildscript { repositories { // Check that you have Google's Maven repository (if not, add it). google() } dependencies { // ... // Check that you have the Google services Gradle plugin v4.3.2 or later // (if not, add it). classpath 'com.google.gms:google-services:4.3.13' // Add the Crashlytics Gradle plugin classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' } } allprojects { repositories { // Check that you have Google's Maven repository (if not, add it). google() } }
अपनी ऐप-लेवल
build.gradle
फ़ाइल में, Crashlytics Gradle प्लगइन लागू करें:apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin // Apply the Crashlytics Gradle plugin apply plugin: 'com.google.firebase.crashlytics'
चरण 3 : अपने बिल्ड में firebaseCrashlytics
एक्सटेंशन जोड़ें
अपने मॉड्यूल (ऐप-लेवल) ग्रैडल फ़ाइल (आमतौर पर app/build.gradle
) में, firebaseCrashlytics
एक्सटेंशन जोड़ें।
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 } } } }
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 } } } }
चरण 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
में निम्न कोड का उपयोग कर सकते हैं, जिसे दबाने पर क्रैश हो जाता है। बटन को "टेस्ट क्रैश" लेबल किया गया है।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));
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))
अपना ऐप बनाएं और चलाएं।
अपने ऐप की पहली क्रैश रिपोर्ट भेजने के लिए परीक्षण क्रैश को बाध्य करें:
अपने परीक्षण उपकरण या एमुलेटर से अपना ऐप खोलें।
अपने ऐप में, ऊपर दिए गए कोड का उपयोग करके जोड़ा गया "टेस्ट क्रैश" बटन दबाएं।
आपका ऐप क्रैश होने के बाद, इसे रीस्टार्ट करें ताकि आपका ऐप क्रैश रिपोर्ट Firebase को भेज सके।
अपना परीक्षण क्रैश देखने के लिए Firebase कंसोल के Crashlytics डैशबोर्ड पर जाएं।
यदि आपने कंसोल को रीफ़्रेश किया है और आप अभी भी पांच मिनट के बाद भी परीक्षण क्रैश नहीं देख रहे हैं, तो यह देखने के लिए डीबग लॉगिंग सक्षम करें कि आपका ऐप क्रैश रिपोर्ट भेज रहा है या नहीं।
और बस! Crashlytics अब क्रैश के लिए आपके ऐप की निगरानी कर रहा है, और आप Crashlytics डैशबोर्ड में क्रैश रिपोर्ट और आंकड़े देख और जांच सकते हैं।
प्रतीकों को अपलोड करने के वैकल्पिक विकल्प
ऊपर इस पृष्ठ पर मुख्य कार्यप्रवाह मानक ग्रैडल बिल्ड के लिए लागू है। हालाँकि, कुछ ऐप एक अलग कॉन्फ़िगरेशन या टूलिंग का उपयोग करते हैं (उदाहरण के लिए ग्रैडल के अलावा एक बिल्ड प्रक्रिया)। इन स्थितियों में, प्रतीकों को सफलतापूर्वक अपलोड करने के लिए निम्नलिखित विकल्प सहायक हो सकते हैं।
विकल्प : लाइब्रेरी मॉड्यूल और बाहरी निर्भरता के लिए प्रतीक अपलोड करें
यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:
- यदि आप ग्रैडल के भीतर एक अनुकूलित एनडीके निर्माण प्रक्रिया का उपयोग करते हैं
- यदि आपके मूल पुस्तकालय पुस्तकालय/सुविधा मॉड्यूल में निर्मित हैं या किसी तृतीय-पक्ष द्वारा प्रदान किए गए हैं
- यदि स्वचालित प्रतीक अपलोड करने का कार्य विफल हो रहा है या आप डैशबोर्ड में असंकेतित क्रैश देख रहे हैं
मानक Crashlytics प्रतीक अपलोड कार्य मानता है कि आप 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 डैशबोर्ड में प्रारंभिक डेटा देखने के लिए परीक्षण क्रैश को बाध्य करें।
विकल्प : गैर-ग्रेडल बिल्ड या अप्राप्य अनस्ट्रिप्ड देशी पुस्तकालयों के लिए प्रतीक अपलोड करें
यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:
यदि आप ग्रैडल के अलावा किसी अन्य निर्माण प्रक्रिया का उपयोग करते हैं
यदि आपकी अनस्ट्रिप्ड नेटिव लाइब्रेरी आपको इस तरह से प्रदान की जाती हैं कि वे ग्रैडल बिल्ड के दौरान एक्सेस नहीं कर सकते हैं
इस विकल्प के लिए आवश्यक है कि जब आप कोई रिलीज़ बिल्ड या कोई बिल्ड बनाते हैं जिसके लिए आप Firebase कंसोल में प्रतीकात्मक स्टैक ट्रेस देखना चाहते हैं, तो आप एक Firebase CLI कमांड चलाते हैं।
सुनिश्चित करें कि आपने इस पृष्ठ पर पहले मुख्य कार्यप्रवाह से निम्नलिखित प्रारंभिक कार्य पूरे कर लिए हैं:
NDK के लिए Crashlytics SDK और Crashlytics Gradle प्लगइन जोड़ा गया।
ध्यान दें कि इस विकल्प के साथ, आपको
firebaseCrashlytics
एक्सटेंशन जोड़ने या स्वचालित प्रतीक अपलोडिंग सेट करने की आवश्यकता नहीं है क्योंकि इसके बजाय आप अपनी प्रतीक फ़ाइलों को बनाने और अपलोड करने के लिए Firebase CLI (नीचे अगले चरण) का उपयोग करेंगे।प्रतीक अपलोड करने के लिए अपना परिवेश और प्रोजेक्ट सेट करें:
फायरबेस सीएलआई स्थापित करने के लिए निर्देशों का पालन करें।
यदि आपने पहले ही सीएलआई स्थापित कर लिया है, तो इसके नवीनतम संस्करण में अपडेट करना सुनिश्चित करें।
(केवल Android API स्तर 30+ का उपयोग करने वाले ऐप्स के लिए) पॉइंटर टैगिंग को अक्षम करने के लिए अपने ऐप का
AndroidManifest.xml
टेम्प्लेट अपडेट करें:Android प्लेयर सेटिंग्स > प्रकाशन सेटिंग > बिल्ड > कस्टम मेन मेनिफेस्ट के लिए बॉक्स चेक करें।
Assets/Plugins/Android/AndroidManifest.xml
पर स्थित मेनिफेस्ट टेम्पलेट खोलें।एप्लिकेशन टैग में निम्नलिखित विशेषता जोड़ें:
<application android:allowNativeHeapPointerTagging="false" ... />
अपना प्रोजेक्ट बनाएं।
अपने प्रतीकों की जानकारी अपलोड करें।
एक बार आपका निर्माण समाप्त हो जाने के बाद, एक क्रैशलाईटिक्स-संगत प्रतीक फ़ाइल उत्पन्न करें और निम्नलिखित फायरबेस सीएलआई कमांड चलाकर इसे फायरबेस सर्वर पर अपलोड करें:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : आपका Firebase Android ऐप आईडी (आपके पैकेज का नाम नहीं)
उदाहरण फायरबेस एंड्रॉइड ऐप आईडी:1:567383003300:android:17104a2ced0c9b9b
अपना फायरबेस ऐप आईडी खोजने के दो तरीके यहां दिए गए हैं:
आपकी
google-services.json
फ़ाइल में, आपकी ऐप आईडीmobilesdk_app_id
मान है; याफायरबेस कंसोल में, अपनी प्रोजेक्ट सेटिंग्स पर जाएं। अपने ऐप्स कार्ड तक स्क्रॉल करें, फिर वांछित फ़ायरबेस ऐप पर उसकी ऐप आईडी खोजने के लिए क्लिक करें।
PATH/TO/SYMBOLS प्रतीक: सीएलआई द्वारा उत्पन्न प्रतीक फ़ाइल का पथ
Android Studio प्रोजेक्ट में निर्यात किया गया — PATH/TO/SYMBOLS कोई भी निर्देशिका हो सकती है। फायरबेस सीएलआई देशी पुस्तकालयों के लिए
.so
एक्सटेंशन के साथ निर्दिष्ट निर्देशिका को दोबारा खोजेगा।एकता के भीतर से सीधे एपीके का निर्माण किया - PATH/TO/SYMBOLS सिम्बल्स प्रोजेक्ट रूट डायरेक्टरी में उत्पन्न ज़िप्ड सिंबल फ़ाइल का पथ है जब आपका निर्माण समाप्त हो गया (उदाहरण के लिए:
myproject/myapp-1.0-v100.symbols.zip
)।
प्रतीक फ़ाइल बनाने और अपलोड करने के लिए फायरबेस सीएलआई कमांड का उपयोग करने के लिए उन्नत विकल्प देखें
झंडा विवरण --generator=csym
डिफ़ॉल्ट ब्रेकपैड जनरेटर के बजाय विरासती cSYM प्रतीक फ़ाइल जनरेटर का उपयोग करता है
उपयोग के लिए अनुशंसित नहीं है। हम डिफ़ॉल्ट ब्रेकपैड प्रतीक फ़ाइल जनरेटर का उपयोग करने की सलाह देते हैं।
--generator=breakpad
ब्रेकपैड प्रतीक फ़ाइल जनरेटर का उपयोग करता है
ध्यान दें कि प्रतीक फ़ाइल निर्माण के लिए डिफ़ॉल्ट ब्रेकपैड है। इस ध्वज का उपयोग केवल तभी करें जब आपने अपने बिल्ड कॉन्फ़िगरेशन में
symbolGenerator { csym() }
जोड़ा हो और आप इसके बजाय ब्रेकपैड का उपयोग करने के लिए इसे ओवरराइड करना चाहते हैं।--dry-run
प्रतीक फ़ाइलें उत्पन्न करता है लेकिन उन्हें अपलोड नहीं करता है
यदि आप भेजी गई फ़ाइलों की सामग्री का निरीक्षण करना चाहते हैं तो यह ध्वज उपयोगी है।
--debug
अतिरिक्त डिबगिंग जानकारी प्रदान करता है अंत में, Crashlytics की स्थापना समाप्त करने और Firebase कंसोल के Crashlytics डैशबोर्ड में प्रारंभिक डेटा देखने के लिए परीक्षण क्रैश को बाध्य करें।
अपने ऐप को क्रैश होने के लिए मजबूर करने के हिस्से के रूप में बनाने के बाद, अपनी प्रतीक फ़ाइल अपलोड करने के लिए फायरबेस सीएलआई
crashlytics:symbols:upload
कमांड चलाना सुनिश्चित करें।
समस्या निवारण
यदि आप फायरबेस कंसोल और लॉगकैट में अलग-अलग स्टैक ट्रेस देख रहे हैं, तो समस्या निवारण मार्गदर्शिका देखें।
अगले कदम
ऑप्ट-इन रिपोर्टिंग, लॉग, कुंजियाँ, और गैर-घातक त्रुटियों की ट्रैकिंग जोड़कर अपने क्रैश रिपोर्ट सेटअप को अनुकूलित करें ।
Google Play के साथ एकीकृत करें ताकि आप सीधे Crashlytics डैशबोर्ड में Google Play ट्रैक द्वारा अपने Android ऐप की क्रैश रिपोर्ट को फ़िल्टर कर सकें। यह आपको विशिष्ट बिल्ड पर अपने डैशबोर्ड को बेहतर ढंग से केंद्रित करने की अनुमति देता है।