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

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

इस गाइड में, NDK के लिए Firebase Crashlytics SDK टूल की मदद से क्रैश रिपोर्टिंग को कॉन्फ़िगर करने का तरीका बताया गया है.

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

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

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

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

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

    • अगर आपको नया Firebase प्रोजेक्ट बनाना है, तो प्रोजेक्ट बनाने के वर्कफ़्लो के दौरान Google Analytics को चालू करें.

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

    • Gradle 8.0
    • Android Gradle प्लग इन 8.1.0
    • Google services Gradle प्लग इन 4.4.1

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

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

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

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.9.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 लाइब्रेरी के काम करने वाले वर्शन का इस्तेमाल करेगा.

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

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

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

    KotlinGroovy
    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.3" apply false
    }
    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.3' apply false
    }
  2. अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle) में, Crashlytics Gradle प्लग इन जोड़ें:

    KotlinGroovy
    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")
    }
    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 एक्सटेंशन को कॉन्फ़िगर करें.

KotlinGroovy
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
          }
      }
  }
}
// ...

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

चौथा चरण: नेटिव सिंबल अपने-आप अपलोड होने की सुविधा सेट अप करना

NDK क्रैश से पढ़े जा सकने वाले स्टैक ट्रेस जनरेट करने के लिए, Crashlytics को आपकी नेटिव बाइनरी में मौजूद सिंबल के बारे में जानकारी होनी चाहिए. Crashlytics Gradle प्लग इन में, इस प्रोसेस को ऑटोमेट करने के लिए uploadCrashlyticsSymbolFileBUILD_VARIANT टास्क शामिल होता है.

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

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

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

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

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

Crashlytics को सेट अप करने के बाद, Firebase कंसोल के Crashlytics डैशबोर्ड में शुरुआती डेटा देखने के लिए, आपको टेस्ट को क्रैश करना होगा.

  1. अपने ऐप्लिकेशन में ऐसा कोड जोड़ें जिसका इस्तेमाल, टेस्ट क्रैश करने के लिए किया जा सके.

    अपने ऐप्लिकेशन में ऐसा बटन जोड़ने के लिए, ऐप्लिकेशन के MainActivity में नीचे दिए गए कोड का इस्तेमाल किया जा सकता है. इस बटन को दबाने पर, ऐप्लिकेशन क्रैश हो जाता है. बटन को "क्रैश की जांच करें" के तौर पर लेबल किया गया है.

    KotlinJava
    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))
    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. टेस्ट क्रैश देखने के लिए, Firebase कंसोल के Crashlytics डैशबोर्ड पर जाएं.

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


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

अगले चरण

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

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

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

समस्या का हल

अगर आपको Firebase console और logcat में अलग-अलग स्टैक ट्रेस दिख रहे हैं, तो समस्या हल करने की गाइड देखें.



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

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

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

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

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

स्टैंडर्ड Crashlytics सिंबल अपलोड टास्क यह मानता है कि आपने अपने ऐप्लिकेशन मॉड्यूल के Gradle बिल्ड के हिस्से के तौर पर, अपनी नेटिव लाइब्रेरी बनाई हैं. इसके लिए, CMake जैसे स्टैंडर्ड NDK बिल्ड टूल का इस्तेमाल किया गया है.

हालांकि, अगर Gradle में पसंद के मुताबिक बनाई गई NDK बिल्ड प्रोसेस का इस्तेमाल किया जा रहा है या आपकी नेटिव लाइब्रेरी किसी लाइब्रेरी/सुविधा मॉड्यूल में बनाई गई हैं या तीसरे पक्ष से मिली हैं, तो आपको अपनी लाइब्रेरी के पाथ की जानकारी साफ़ तौर पर देनी पड़ सकती है. ऐसा करने के लिए, अपनी Gradle बिल्ड फ़ाइल में Crashlytics एक्सटेंशन में unstrippedNativeLibsDir प्रॉपर्टी जोड़ें.

  1. पक्का करें कि आपने इस पेज पर पहले दिए गए मुख्य वर्कफ़्लो के ये शुरुआती टास्क पूरे कर लिए हों:

    1. Firebase कंसोल में Crashlytics चालू किया गया.

    2. NDK के लिए Crashlytics SDK टूल और Crashlytics Gradle प्लग इन जोड़ा गया.

    3. अपने बिल्ड में Crashlytics एक्सटेंशन जोड़ा.

    4. नेटिव सिंबल के अपने-आप अपलोड होने की सुविधा सेट अप करें.

  2. अपने-आप सिंबल अपलोड करने वाले टास्क को सिंबल की जानकारी ढूंढने में मदद करने के लिए, अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर <project>/<app-module>/build.gradle.kts या <project>/<app-module>/build.gradle) में यह जानकारी जोड़ें:

    KotlinGroovy
    import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension
    
    // ...
    
    android {
        // ...
        buildTypes {
            release {
                configure<CrashlyticsExtension> {
                    nativeSymbolUploadEnabled = true
                    unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY")
                }
            }
        }
    }
    // ...
    
    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 Gradle प्लग इन v3.0.0 से शुरू) अलग-अलग प्रॉडक्ट और बिल्ड फ़्लेवर में कई डायरेक्ट्री इकट्ठा करें.

      buildTypes {
        release {
          configure<CrashlyticsExtension> {
            nativeSymbolUploadEnabled = true
            unstrippedNativeLibsDir = file("MY/NATIVE/LIBS")
          }
        }
        productFlavors {
          flavorDimensions += "feature"
          create("basic") {
            dimension = "feature"
            // ...
          }
          create("featureX") {
            dimension = "feature"
            configure<CrashlyticsExtension> {
              unstrippedNativeLibsDir = file("MY/FEATURE_X/LIBS")
            }
          }
        }
      }
      

    uploadCrashlyticsSymbolFilesBasicRelease टास्क सिर्फ़ MY/NATIVE/LIBS में सिंबल अपलोड करेगा, जबकि uploadCrashlyticsSymbolFilesFeatureXRelease टास्क, MY/NATIVE/LIBS और MY/FEATURE_X/LIBS, दोनों में सिंबल अपलोड करेगा.

  3. आखिर में, Crashlytics को सेट अप करने के लिए जांच को क्रैश करें. इससे, Firebase कंसोल के Crashlytics डैशबोर्ड में शुरुआती डेटा देखा जा सकता है.

विकल्प: Gradle के अलावा किसी दूसरे तरीके से बनाए गए बिल्ड या बिना स्ट्रिप की गई ऐसी नेटिव लाइब्रेरी के लिए सिंबल अपलोड करना जिन्हें ऐक्सेस नहीं किया जा सकता

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

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

  • अगर आपको बिना छिन्न-भिन्न की गई नेटिव लाइब्रेरी किसी ऐसे तरीके से दी गई हैं जिससे वे Gradle बिल्ड के दौरान ऐक्सेस न की जा सकें

इस विकल्प का इस्तेमाल करने के लिए, आपको रिलीज़ बाइल्ड या ऐसा कोई भी बाइल्ड बनाते समय Firebase सीएलआई कमांड चलाना होगा जिसके लिए आपको Firebase कंसोल में सिंबल वाले स्टैक ट्रेस देखने हैं.

  1. पक्का करें कि आपने इस पेज पर पहले दिए गए मुख्य वर्कफ़्लो के ये शुरुआती टास्क पूरे कर लिए हों:

    1. Firebase कंसोल में Crashlytics चालू किया गया.

    2. NDK के लिए Crashlytics SDK टूल और Crashlytics Gradle प्लग इन जोड़ा गया.

    ध्यान दें कि इस विकल्प का इस्तेमाल करने के लिए, आपको firebaseCrashlytics एक्सटेंशन जोड़ने या सिंबल को अपने-आप अपलोड होने की सुविधा सेट अप करने की ज़रूरत नहीं है. इसकी जगह, आपको अपनी सिंबल फ़ाइलें जनरेट और अपलोड करने के लिए, Firebase सीएलआई (नीचे दिए गए अगले चरण) का इस्तेमाल करना होगा.

  2. सिंबल अपलोड करने के लिए, अपना एनवायरमेंट और प्रोजेक्ट सेट अप करें:

    1. Firebase सीएलआई इंस्टॉल करने के लिए निर्देशों का पालन करें.

      अगर आपने पहले से ही सीएलआई इंस्टॉल किया है, तो पक्का करें कि आपने इसे अपने नए वर्शन पर अपडेट कर लिया हो.

    2. (सिर्फ़ Android एपीआई लेवल 30 और उसके बाद के वर्शन का इस्तेमाल करने वाले ऐप्लिकेशन के लिए) पॉइंटर टैगिंग की सुविधा बंद करने के लिए, अपने ऐप्लिकेशन के AndroidManifest.xml टेंप्लेट को अपडेट करें:

      1. Android Player की सेटिंग > पब्लिश करने की सेटिंग > बिल्ड > कस्टम मुख्य मेनिफ़ेस्ट के लिए बॉक्स को चुनें.

      2. Assets/Plugins/Android/AndroidManifest.xml पर मौजूद मेनिफ़ेस्ट टेंप्लेट खोलें.

      3. ऐप्लिकेशन टैग में यह एट्रिब्यूट जोड़ें: <application android:allowNativeHeapPointerTagging="false" ... />

  3. अपना प्रोजेक्ट बनाएं.

  4. अपने सिंबल की जानकारी अपलोड करें.

    बिल्ड पूरा होने के बाद, 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

      Firebase ऐप्लिकेशन आईडी ढूंढने के दो तरीके यहां दिए गए हैं:

      • आपकी google-services.json फ़ाइल में, आपका ऐप्लिकेशन आईडी, mobilesdk_app_id वैल्यू है; या

      • Firebase कंसोल में, अपने प्रोजेक्ट की सेटिंग पर जाएं. नीचे की ओर स्क्रोल करके, आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, जिस Firebase ऐप्लिकेशन का ऐप्लिकेशन आईडी ढूंढना है उस पर क्लिक करें.

    • PATH/TO/SYMBOLS: सीएलआई से जनरेट की गई सिंबल फ़ाइल का पाथ

      • Android Studio प्रोजेक्ट में एक्सपोर्ट किया गया — PATH/TO/SYMBOLS कोई भी डायरेक्ट्री हो सकती है. Firebase सीएलआई, .so एक्सटेंशन वाली नेटिव लाइब्रेरी के लिए, बताई गई डायरेक्ट्री में बार-बार खोज करेगा.

      • APK को सीधे Unity से बनाया गया — PATH/TO/SYMBOLS, प्रोजेक्ट की रूट डायरेक्ट्री में जनरेट की गई, ज़िप की गई सिंबल फ़ाइल का पाथ है. यह तब जनरेट होती है, जब आपका बिल्ड पूरा हो जाता है (उदाहरण के लिए: myproject/myapp-1.0-v100.symbols.zip).

    फ़्लैग करें जानकारी
    --generator=csym

    डिफ़ॉल्ट Breakpad जनरेटर के बजाय, लेगसी cSYM सिंबल फ़ाइल जनरेटर का इस्तेमाल करता है

    इसका इस्तेमाल करने का सुझाव नहीं दिया जाता. हमारा सुझाव है कि आप डिफ़ॉल्ट Breakpad सिंबल फ़ाइल जनरेटर का इस्तेमाल करें.

    --generator=breakpad

    Breakpad सिंबल फ़ाइल जनरेटर का इस्तेमाल करता है

    ध्यान दें कि सिंबल फ़ाइल जनरेट करने के लिए, डिफ़ॉल्ट रूप से Breakpad का इस्तेमाल किया जाता है. इस फ़्लैग का इस्तेमाल सिर्फ़ तब करें, जब आपने अपने बिल्ड कॉन्फ़िगरेशन में symbolGenerator { csym() } जोड़ा हो और आपको Breakpad का इस्तेमाल करने के लिए, इसे बदलना हो.

    --dry-run

    सिंबल फ़ाइलें जनरेट करता है, लेकिन उन्हें अपलोड नहीं करता

    यह फ़्लैग तब काम आता है, जब आपको भेजी गई फ़ाइलों के कॉन्टेंट की जांच करनी हो.

    --debug डीबग करने के बारे में ज़्यादा जानकारी देता है
  5. आखिर में, Crashlytics को सेट अप करने के लिए जांच को क्रैश करें. इससे, Firebase कंसोल के Crashlytics डैशबोर्ड में शुरुआती डेटा देखा जा सकता है.

    ऐप्लिकेशन को क्रैश करने के लिए उसे बनाने के बाद, अपनी सिंबल फ़ाइल अपलोड करने के लिए, Firebase सीएलआई crashlytics:symbols:upload कमांड चलाना न भूलें.