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

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

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

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

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

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

  2. अनुशंसित : किसी क्रैश, गैर-घातक, या ANR ईवेंट की ओर ले जाने वाली उपयोगकर्ता गतिविधियों को समझने के लिए स्वचालित रूप से ब्रेडक्रंब लॉग प्राप्त करने के लिए, आपको अपने फायरबेस प्रोजेक्ट में Google Analytics को सक्षम करना होगा।

    • यदि आपके मौजूदा फायरबेस प्रोजेक्ट में Google Analytics सक्षम नहीं है, तो आप अपने एकीकरण टैब से Google Analytics सक्षम कर सकते हैं > फायरबेस कंसोल में प्रोजेक्ट सेटिंग्स

    • यदि आप एक नया फायरबेस प्रोजेक्ट बना रहे हैं, तो प्रोजेक्ट निर्माण वर्कफ़्लो के दौरान Google Analytics सक्षम करें।

चरण 1 : एनडीके के लिए क्रैशलाइटिक्स एसडीके को अपने ऐप में जोड़ें

अपने मॉड्यूल (ऐप-स्तर) ग्रैडल फ़ाइल में (आमतौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle ), Crashlytics NDK के लिए निर्भरता जोड़ें Android के लिए लाइब्रेरी. हम लाइब्रेरी वर्जनिंग को नियंत्रित करने के लिए फायरबेस एंड्रॉइड BoM का उपयोग करने की सलाह देते हैं।

क्रैशलिटिक्स के साथ एक इष्टतम अनुभव के लिए, हम आपके फायरबेस प्रोजेक्ट में Google Analytics को सक्षम करने और अपने ऐप में Google Analytics के लिए फायरबेस एसडीके जोड़ने की सलाह देते हैं।

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:32.7.3"))

    // 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")
}

फायरबेस एंड्रॉइड बीओएम का उपयोग करके, आपका ऐप हमेशा फायरबेस एंड्रॉइड लाइब्रेरी के संगत संस्करणों का उपयोग करेगा।

(वैकल्पिक) BoM का उपयोग किए बिना फायरबेस लाइब्रेरी निर्भरताएँ जोड़ें

यदि आप फायरबेस बीओएम का उपयोग नहीं करना चुनते हैं, तो आपको प्रत्येक फायरबेस लाइब्रेरी संस्करण को उसकी निर्भरता पंक्ति में निर्दिष्ट करना होगा।

ध्यान दें कि यदि आप अपने ऐप में एकाधिक फायरबेस लाइब्रेरी का उपयोग करते हैं, तो हम लाइब्रेरी संस्करणों को प्रबंधित करने के लिए 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:18.6.2")
    implementation("com.google.firebase:firebase-analytics:21.5.1")
}
कोटलिन-विशिष्ट लाइब्रेरी मॉड्यूल खोज रहे हैं? अक्टूबर 2023 (फायरबेस बीओएम 32.5.0) से शुरू होकर, कोटलिन और जावा डेवलपर्स दोनों मुख्य लाइब्रेरी मॉड्यूल पर निर्भर हो सकते हैं (विवरण के लिए, इस पहल के बारे में अक्सर पूछे जाने वाले प्रश्न देखें)।

चरण 2 : अपने ऐप में क्रैशलाइटिक्स ग्रैडल प्लगइन जोड़ें

  1. अपने रूट-लेवल (प्रोजेक्ट-लेवल) ग्रैडल फ़ाइल ( <project>/build.gradle.kts या <project>/build.gradle ) में, क्रैशलाइटिक्स ग्रैडल प्लगइन को plugins ब्लॉक में जोड़ें:

    Kotlin

    plugins {
        id("com.android.application") version "7.3.0" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin dependency
        id("com.google.gms.google-services") version "4.4.1" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "2.9.9" apply false
    }
    

    Groovy

    plugins {
        id 'com.android.application' version '7.3.0' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin dependency
        id 'com.google.gms.google-services' version '4.4.1' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '2.9.9' apply false
    }
    
  2. अपने मॉड्यूल (ऐप-स्तर) ग्रैडल फ़ाइल में (आमतौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.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'
    }

चरण 3 : अपने निर्माण में क्रैशलिटिक्स एक्सटेंशन जोड़ें

अपने मॉड्यूल (ऐप-स्तर) ग्रैडल फ़ाइल में (आमतौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle ), क्रैशलाईटिक्स एक्सटेंशन को कॉन्फ़िगर करें।

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
          }
      }
  }
}

चरण 4 : मूल प्रतीकों की स्वचालित अपलोडिंग सेट करें

एनडीके क्रैश से पठनीय स्टैक ट्रेस तैयार करने के लिए, क्रैशलिटिक्स को आपके मूल बायनेरिज़ में प्रतीकों के बारे में जानने की आवश्यकता है। क्रैशलिटिक्स ग्रैडल प्लगइन में इस प्रक्रिया को स्वचालित करने के लिए uploadCrashlyticsSymbolFile BUILD_VARIANT कार्य शामिल है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

अगले कदम

  • (अनुशंसित) GWP-ASan रिपोर्ट एकत्रित करके मूल मेमोरी त्रुटियों के कारण होने वाले क्रैश को डीबग करने में सहायता प्राप्त करें। ये मेमोरी-संबंधित त्रुटियां आपके ऐप के भीतर मेमोरी भ्रष्टाचार से जुड़ी हो सकती हैं, जो ऐप सुरक्षा कमजोरियों का प्रमुख कारण है। इस डिबगिंग सुविधा का लाभ उठाने के लिए, सुनिश्चित करें कि आपके ऐप में GWP-ASan स्पष्ट रूप से सक्षम है और NDK (v18.3.6+ या Firebase BoM v31.3.0+) के लिए नवीनतम क्रैशलाइटिक्स SDK का उपयोग करता है।

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

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

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

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



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

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

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

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

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

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

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

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

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