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

अपने Android एप्लिकेशन मौजूद होता है तो देशी पुस्तकालयों , तो आप पूर्ण स्टैक ट्रेस और अपने अनुप्रयोग के निर्माण विन्यास के लिए कुछ छोटे अद्यतन के साथ Firebase Crashlytics से अपने मूल कोड के लिए विस्तृत क्रैश रिपोर्ट सक्षम कर सकते हैं।

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

आप कैसे अपने एकता परियोजनाओं में Crashlytics के साथ आरंभ करने के लिए देख रहे हैं, बाहर की जाँच आरंभ करने की मार्गदर्शिका एकता

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

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

  2. अनुशंसित: दुर्घटना मुक्त उपयोगकर्ताओं, ब्रेडक्रम्ब लॉग, और वेग अलर्ट जैसी सुविधाओं के लिए, आप अपने Firebase परियोजना में गूगल एनालिटिक्स सक्रिय करना होगा।

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

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

चरण 1: Firebase कंसोल में Crashlytics सक्षम करें

  1. पर जाएं Crashlytics डैशबोर्ड Firebase कंसोल में।

  2. सुनिश्चित करें कि आपके एप्लिकेशन पेज के शीर्ष पर Crashlytics के बगल में ड्रॉप-डाउन से चुना गया है।

  3. क्लिक करें Crashlytics सक्षम करें।

चरण 2: NDK के लिए Firebase Crashlytics एसडीके अपने अनुप्रयोग में जोड़े

का उपयोग करते हुए Firebase एंड्रॉयड बीओएम , अपने मॉड्यूल (एप्लिकेशन-स्तरीय) Gradle फ़ाइल (आमतौर पर में Crashlytics NDK एंड्रॉयड पुस्तकालय के लिए निर्भरता की घोषणा app/build.gradle )।

Crashlytics साथ इष्टतम अनुभव के लिए, हम अनुशंसा करते गूगल एनालिटिक्स को सक्षम करने के अपने Firebase परियोजना में और अपने अनुप्रयोग के लिए Google विश्लेषण के लिए Firebase एसडीके जोड़ने।

जावा

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

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

का उपयोग करके Firebase एंड्रॉयड बीओएम , अपने अनुप्रयोग हमेशा Firebase एंड्रॉयड पुस्तकालयों के संगत संस्करणों का प्रयोग करेंगे।

(वैकल्पिक) बीओएम का उपयोग किए बिना Firebase पुस्तकालय निर्भरता घोषित

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

ध्यान दें कि अगर आप अपने एप्लिकेशन में एकाधिक Firebase पुस्तकालयों का उपयोग, हम अत्यधिक पुस्तकालय संस्करणों, जो सुनिश्चित करता है कि सभी संस्करणों के संगत हैं का प्रबंधन करने के बीओएम का उपयोग करें।

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.6'
    implementation 'com.google.firebase:firebase-analytics:20.0.2'
}

कोटलिन + केटीएक्स

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

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

का उपयोग करके Firebase एंड्रॉयड बीओएम , अपने अनुप्रयोग हमेशा Firebase एंड्रॉयड पुस्तकालयों के संगत संस्करणों का प्रयोग करेंगे।

(वैकल्पिक) बीओएम का उपयोग किए बिना Firebase पुस्तकालय निर्भरता घोषित

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

ध्यान दें कि अगर आप अपने एप्लिकेशन में एकाधिक Firebase पुस्तकालयों का उपयोग, हम अत्यधिक पुस्तकालय संस्करणों, जो सुनिश्चित करता है कि सभी संस्करणों के संगत हैं का प्रबंधन करने के बीओएम का उपयोग करें।

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.6'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.2'
}

चरण 3: अपने ऐप्लिकेशन में Firebase Crashlytics प्लगइन जोड़ें

  1. अपनी परियोजना-स्तर में build.gradle फ़ाइल, एक buildscript निर्भरता के रूप में 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.10'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.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'
    

चरण 4: जोड़े firebaseCrashlytics अपने निर्माण करने के लिए विस्तार

अपने मॉड्यूल (एप्लिकेशन-स्तरीय) Gradle फ़ाइल (आमतौर पर में app/build.gradle ), जोड़ने firebaseCrashlytics विस्तार।

जावा

// ...

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

कोटलिन + केटीएक्स

// ...

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

के लिए आवश्यक targetSdkLevel 30 और इसके बाद के संस्करण: आप अपने को निम्नलिखित जोड़कर अपने अनुप्रयोग में सूचक टैगिंग अक्षम करना होगा AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

अधिक जानकारी के लिए पढ़ने के लिए टैग सूचकों के लिए डेवलपर सहायता

चरण 5: देशी प्रतीकों में से स्वत: अपलोड करने को सेट करें

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

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

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

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

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

चरण 6: सेना एक परीक्षण दुर्घटना सेटअप पूरा करने के

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

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

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

    जावा

    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));
    

    कोटलिन + केटीएक्स

    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. पर जाएं Crashlytics डैशबोर्ड Firebase कंसोल के अपने परीक्षण दुर्घटना को देखने के लिए।

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


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



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

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

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

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

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

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

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

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

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



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

आप Firebase कंसोल में और logcat में विभिन्न स्टैक ट्रेस देख रहे हैं, का उल्लेख समस्या निवारण मार्गदर्शिका

अगले कदम