Android एनडीके की क्रैश रिपोर्ट पाएं

अगर आपके Android ऐप्लिकेशन में नेटिव लाइब्रेरी हैं, तो अपने नेटिव कोड के लिए, फ़ुल स्टैक ट्रेस और पूरी जानकारी वाली क्रैश रिपोर्ट को चालू किया जा सकता है Firebase Crashlytics का इस्तेमाल करके, अपने ऐप्लिकेशन के बिल्ड में कुछ छोटे-छोटे अपडेट शेयर करें कॉन्फ़िगरेशन.

इस गाइड में बताया गया है कि NDK के लिए Firebase Crashlytics SDK टूल.

अगर आपको यह जानना है कि अपने Unity में Crashlytics का इस्तेमाल कैसे किया जाए, तो देखें, तो Unity के लिए शुरुआती निर्देश.

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

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

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

    • अगर आपके मौजूदा Firebase प्रोजेक्ट में Google Analytics नहीं है चालू है, तो आप इनसे Google Analytics को चालू कर सकते हैं: आपके इंटिग्रेशन टैब > प्रोजेक्ट सेटिंग देखें.

    • अगर कोई नया Firebase प्रोजेक्ट बनाया जा रहा है, तो Google Analytics चालू करें का इस्तेमाल करते हैं.

  3. पक्का करें कि आपके ऐप्लिकेशन में, कम से कम इन वर्शन की ज़रूरत हो:

    • ग्रेडल 8.0
    • 'Android Gradle प्लग इन 8.1.0'
    • Google सेवाओं के लिए Gradle प्लग इन 4.4.1

पहला चरण: अपने ऐप्लिकेशन में एनडीके के लिए Crashlytics SDK टूल जोड़ना

आपके मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल में (आम तौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle), Android के लिए Crashlytics NDK लाइब्रेरी के लिए डिपेंडेंसी जोड़ें. हमारा सुझाव है कि Firebase Android बीओएम लाइब्रेरी के वर्शन को कंट्रोल करने के लिए.

Crashlytics का इस्तेमाल करके बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि Google Analytics चालू करना जोड़ना होगा. साथ ही, अपने ऐप्लिकेशन में Google Analytics के लिए Firebase SDK टूल जोड़ना होगा.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.1.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:19.0.3")
    implementation("com.google.firebase:firebase-analytics:22.0.2")
}
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
क्या आपको Kotlin से जुड़े लाइब्रेरी मॉड्यूल की तलाश है? इतने समय में शुरू होगा अक्टूबर 2023 (Firebase BoM 32.5.0) में, Kotlin और Java डेवलपर, दोनों मुख्य लाइब्रेरी मॉड्यूल पर निर्भर करते हैं (जानकारी के लिए, इस पहल के बारे में अक्सर पूछे जाने वाले सवाल).

दूसरा चरण: अपने ऐप्लिकेशन में Crashlytics Gradle प्लग इन जोड़ना

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

    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.4.2" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.2" 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.4.2' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.2' apply false
    }
    
  2. आपके मॉड्यूल (ऐप्लिकेशन-लेवल) की 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 शामिल है करने का काम है.

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

  2. अपने स्टैक ट्रेस में तरीकों के नाम दिखाने के लिए, आपको साफ़ तौर पर uploadCrashlyticsSymbolFileBUILD_VARIANT एनडीके लाइब्रेरी के हर बिल्ड के बाद एक टास्क जोड़ें. उदाहरण के लिए:

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

    इस आईडी की मौजूदगी की पुष्टि करने के लिए, हर बाइनरी पर readelf -n. अगर बिल्ड आईडी यह है मौजूद नहीं है, अपने बिल्ड सिस्टम के बिल्ड में -Wl,--build-id जोड़ें फ़्लैग कर दें.

पांचवां चरण: सेटअप पूरा करने के लिए, टेस्ट क्रैश को हर हाल में पूरा करना

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. ऐप्लिकेशन क्रैश होने के बाद, उसे रीस्टार्ट करें, ताकि आपका ऐप्लिकेशन क्रैश होने की जानकारी भेज सके Firebase को रिपोर्ट करें.

  4. इसके बाद, Crashlytics डैशबोर्ड पर जाएं Firebase कंसोल देखें.

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


अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है बस, हो गया. Crashlytics, अब ऐप्लिकेशन बंद होने का पता लगाने के लिए उसे मॉनिटर करता है और आपको क्रैश रिपोर्ट और आंकड़े देख सकते हैं और उनकी जाँच कर सकते हैं Crashlytics का डैशबोर्ड.

अगले चरण

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

  • कस्टमाइज़ करें अपनी क्रैश रिपोर्ट सेटअप करने के लिए ऑप्ट-इन रिपोर्टिंग, लॉग, कुंजियां, और साधारण गड़बड़ियों को ट्रैक कर सकता है.

  • Google Play के साथ इंटिग्रेट करना, ताकि तो आपके पास अपने Android ऐप्लिकेशन की क्रैश रिपोर्ट को Google Play ट्रैक के हिसाब से फ़िल्टर करने का विकल्प होता है. Crashlytics का डैशबोर्ड. इससे आपको अपने डैशबोर्ड को खास बिल्ड पर बेहतर तरीके से फ़ोकस करने में मदद मिलती है.

समस्या का हल

अगर आपको Firebase कंसोल में और Logcat में, समस्या हल करने की गाइड देखें.



सिंबल अपलोड करने के दूसरे विकल्प

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

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

यह विकल्प इन स्थितियों में मददगार हो सकता है:

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

विकल्प: नॉन-ग्रेडल बिल्ड या ऐक्सेस न की जा सकने वाली बिना नेटिव नेटिव लाइब्रेरी के लिए सिंबल अपलोड करें

यह विकल्प इन स्थितियों में मददगार हो सकता है:

  • अगर Gradle के अलावा किसी अन्य बिल्ड प्रोसेस का इस्तेमाल किया जाता है

  • अगर आपकी नेटिव लाइब्रेरी बिना किसी रुकावट के उपलब्ध हैं, तो वे Gradle बिल्ड के दौरान ऐक्सेस नहीं हो पाते