Android NDK क्रैश रिपोर्ट प्राप्त करें

अगर आपके Android ऐप में नेटिव लाइब्रेरी हैं , तो आप अपने ऐप के बिल्ड कॉन्फ़िगरेशन में कुछ छोटे अपडेट के साथ Firebase Crashlytics से अपने मूल कोड के लिए पूर्ण स्टैक ट्रेस और विस्तृत क्रैश रिपोर्ट सक्षम कर सकते हैं।

यह मार्गदर्शिका बताती है कि NDK के लिए Firebase Crashlytics SDK के साथ क्रैश रिपोर्टिंग को कैसे कॉन्फ़िगर किया जाए।

यदि आप अपने यूनिटी प्रोजेक्ट्स में क्रैशलिटिक्स के साथ शुरुआत करने का तरीका ढूंढ रहे हैं, तो यूनिटी गेटिंग स्टार्टिंग गाइड देखें।

शुरू करने से पहले

  1. यदि आपने पहले से ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें । यदि आपके पास Android ऐप नहीं है, तो आप एक नमूना ऐप डाउनलोड कर सकते हैं।

  2. अनुशंसित : क्रैश-मुक्त उपयोगकर्ता, ब्रेडक्रंब लॉग और वेग अलर्ट जैसी सुविधाएं प्राप्त करने के लिए, आपको अपने फायरबेस प्रोजेक्ट में 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.1.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.1.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 प्लगइन जोड़ें

  1. अपनी प्रोजेक्ट-स्तरीय 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()
        }
    }
  2. अपनी ऐप-लेवल 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 कार्य शामिल है।

  1. ताकि आप स्वचालित प्रतीक अपलोडिंग के लिए कार्य को एक्सेस कर सकें, सुनिश्चित करें कि आपके मॉड्यूल (एप्लिकेशन-स्तर) ग्रैडल फ़ाइल में nativeSymbolUploadEnabled true पर सेट है।

  2. अपने स्टैक ट्रेस में विधि नामों के प्रकट होने के लिए, आपको अपनी NDK लाइब्रेरी के प्रत्येक निर्माण के बाद स्पष्ट रूप से uploadCrashlyticsSymbolFile BUILD_VARIANT कार्य को लागू करना होगा। उदाहरण के लिए:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. NDK के लिए Crashlytics SDK और Crashlytics Gradle प्लगइन दोनों मूल साझा ऑब्जेक्ट के भीतर GNU बिल्ड आईडी की उपस्थिति पर निर्भर करते हैं।

    आप प्रत्येक बाइनरी पर readelf -n चलाकर इस आईडी की उपस्थिति को सत्यापित कर सकते हैं। यदि बिल्ड आईडी अनुपस्थित है, तो समस्या को ठीक करने के लिए अपने बिल्ड सिस्टम के झंडे में -Wl,--build-id जोड़ें।

चरण 5 : सेटअप समाप्त करने के लिए परीक्षण क्रैश को बाध्य करें

Crashlytics का सेट अप पूरा करने के लिए और Firebase कंसोल के Crashlytics डैशबोर्ड में प्रारंभिक डेटा देखने के लिए, आपको एक परीक्षण क्रैश के लिए बाध्य करना होगा।

  1. अपने ऐप में कोड जोड़ें जिसका उपयोग आप परीक्षण क्रैश को बाध्य करने के लिए कर सकते हैं।

    आप अपने ऐप में एक बटन जोड़ने के लिए अपने ऐप की 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))
    
  2. अपना ऐप बनाएं और चलाएं।

  3. अपने ऐप की पहली क्रैश रिपोर्ट भेजने के लिए परीक्षण क्रैश को बाध्य करें:

    1. अपने परीक्षण उपकरण या एमुलेटर से अपना ऐप खोलें।

    2. अपने ऐप में, ऊपर दिए गए कोड का उपयोग करके जोड़ा गया "टेस्ट क्रैश" बटन दबाएं।

    3. आपका ऐप क्रैश होने के बाद, इसे रीस्टार्ट करें ताकि आपका ऐप क्रैश रिपोर्ट Firebase को भेज सके।

  4. अपना परीक्षण क्रैश देखने के लिए Firebase कंसोल के Crashlytics डैशबोर्ड पर जाएं।

    यदि आपने कंसोल को रीफ़्रेश किया है और आप अभी भी पांच मिनट के बाद भी परीक्षण क्रैश नहीं देख रहे हैं, तो यह देखने के लिए डीबग लॉगिंग सक्षम करें कि आपका ऐप क्रैश रिपोर्ट भेज रहा है या नहीं।


और बस! Crashlytics अब क्रैश के लिए आपके ऐप की निगरानी कर रहा है, और आप Crashlytics डैशबोर्ड में क्रैश रिपोर्ट और आंकड़े देख और जांच सकते हैं।



प्रतीकों को अपलोड करने के वैकल्पिक विकल्प

ऊपर इस पृष्ठ पर मुख्य कार्यप्रवाह मानक ग्रैडल बिल्ड के लिए लागू है। हालाँकि, कुछ ऐप एक अलग कॉन्फ़िगरेशन या टूलिंग का उपयोग करते हैं (उदाहरण के लिए ग्रैडल के अलावा एक बिल्ड प्रक्रिया)। इन स्थितियों में, प्रतीकों को सफलतापूर्वक अपलोड करने के लिए निम्नलिखित विकल्प सहायक हो सकते हैं।

विकल्प : लाइब्रेरी मॉड्यूल और बाहरी निर्भरता के लिए प्रतीक अपलोड करें

यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:

  • यदि आप ग्रैडल के भीतर एक अनुकूलित एनडीके निर्माण प्रक्रिया का उपयोग करते हैं
  • यदि आपके मूल पुस्तकालय पुस्तकालय/सुविधा मॉड्यूल में निर्मित हैं या किसी तृतीय-पक्ष द्वारा प्रदान किए गए हैं
  • यदि स्वचालित प्रतीक अपलोड करने का कार्य विफल हो रहा है या आप डैशबोर्ड में असंकेतित क्रैश देख रहे हैं

विकल्प : गैर-ग्रेडल बिल्ड या अप्राप्य अनस्ट्रिप्ड देशी पुस्तकालयों के लिए प्रतीक अपलोड करें

यह विकल्प निम्नलिखित स्थितियों में सहायक हो सकता है:

  • यदि आप ग्रैडल के अलावा किसी अन्य निर्माण प्रक्रिया का उपयोग करते हैं

  • यदि आपकी अनस्ट्रिप्ड नेटिव लाइब्रेरी आपको इस तरह से प्रदान की जाती हैं कि वे ग्रैडल बिल्ड के दौरान एक्सेस नहीं कर सकते हैं



समस्या निवारण

यदि आप फायरबेस कंसोल और लॉगकैट में अलग-अलग स्टैक ट्रेस देख रहे हैं, तो समस्या निवारण मार्गदर्शिका देखें।

अगले कदम

  • ऑप्ट-इन रिपोर्टिंग, लॉग, कुंजियाँ, और गैर-घातक त्रुटियों की ट्रैकिंग जोड़कर अपने क्रैश रिपोर्ट सेटअप को अनुकूलित करें

  • Google Play के साथ एकीकृत करें ताकि आप सीधे Crashlytics डैशबोर्ड में Google Play ट्रैक द्वारा अपने Android ऐप की क्रैश रिपोर्ट को फ़िल्टर कर सकें। यह आपको विशिष्ट बिल्ड पर अपने डैशबोर्ड को बेहतर ढंग से केंद्रित करने की अनुमति देता है।