קבל דוחות קריסה של Android NDK

אם אפליקציית ה-Android שלך מכילה ספריות מקוריות , תוכל להפעיל עקבות מלאים ודוחות קריסה מפורטים עבור הקוד המקורי שלך מ-Firebase Crashlytics עם כמה עדכונים קטנים לתצורת ה-build של האפליקציה שלך.

מדריך זה מתאר כיצד להגדיר דיווח קריסה עם Firebase Crashlytics SDK עבור NDK.

אם אתה מחפש איך להתחיל עם Crashlytics בפרויקטים של Unity שלך, עיין במדריך Unity Getting Started .

לפני שאתה מתחיל

  1. אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך. אם אין לך אפליקציית אנדרואיד, תוכל להוריד אפליקציה לדוגמה .

  2. מומלץ : כדי לקבל אוטומטית יומני פירורי לחם כדי להבין את פעולות המשתמש המובילות לקריסה, לא קטלנית או אירוע ANR, עליך להפעיל את Google Analytics בפרויקט Firebase שלך.

    • אם בפרויקט Firebase הקיים שלך לא מופעל Google Analytics, תוכל להפעיל את Google Analytics מהכרטיסייה אינטגרציות של > הגדרות פרויקט במסוף Firebase.

    • אם אתה יוצר פרויקט Firebase חדש, הפעל את Google Analytics במהלך תהליך העבודה של יצירת הפרויקט.

שלב 1 : הוסף את Crashlytics SDK עבור NDK לאפליקציה שלך

בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle ), הוסף את התלות עבור Crashlytics NDK ספרייה עבור אנדרואיד. אנו ממליצים להשתמש ב- Firebase Android BoM כדי לשלוט בגירסאות של הספרייה.

לחוויה מיטבית עם Crashlytics, אנו ממליצים להפעיל את Google Analytics בפרויקט Firebase שלך ​​ולהוסיף את Firebase SDK עבור Google Analytics לאפליקציה שלך.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:32.8.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 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:18.6.3")
    implementation("com.google.firebase:firebase-analytics:21.6.1")
}
מחפש מודול ספרייה ספציפי לקוטלין? החל מאוקטובר 2023 (Firebase BoM 32.5.0) , מפתחי Kotlin ו-Java יכולים להיות תלויים במודול הספרייה הראשי (לפרטים, עיין בשאלות הנפוצות לגבי יוזמה זו ).

שלב 2 : הוסף את הפלאגין Crashlytics Gradle לאפליקציה שלך

  1. בקובץ Gradle ברמת השורש (רמת הפרויקט) ( <project>/build.gradle.kts או <project>/build.gradle ), הוסף את הפלאגין Crashlytics 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. בקובץ 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'
    }

שלב 3 : הוסף את התוסף 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
          }
      }
  }
}

שלב 4 : הגדר העלאה אוטומטית של סמלים מקוריים

כדי לייצר עקבות ערימה קריאות מקריסות NDK, Crashlytics צריכה לדעת על הסמלים בקבצים הבינאריים המקוריים שלך. הפלאגין Crashlytics Gradle כולל את המשימה uploadCrashlyticsSymbolFile BUILD_VARIANT לאוטומטיות של תהליך זה.

  1. כדי שתוכל לגשת למשימה להעלאת סמלים אוטומטית, ודא ש- nativeSymbolUploadEnabled מוגדר כ- true בקובץ Gradle של המודול (ברמת האפליקציה).

  2. כדי ששמות שיטות יופיעו במעקבי הערימה שלך, עליך להפעיל במפורש את המשימה uploadCrashlyticsSymbolFile BUILD_VARIANT לאחר כל בנייה של ספריית ה-NDK שלך. לדוגמה:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. גם ה-Crashlytics SDK עבור NDK וגם התוסף של Crashlytics Gradle תלויים בנוכחות של מזהה ה-Build של GNU בתוך האובייקטים המשותפים המקוריים.

    אתה יכול לאמת את נוכחותו של מזהה זה על ידי הפעלה readelf -n על כל בינארי. אם מזהה ה-build נעדר, הוסף -Wl,--build-id לדגלי מערכת הבנייה שלך כדי לתקן את הבעיה.

שלב 5 : כפה קריסת בדיקה כדי לסיים את ההגדרה

כדי לסיים את הגדרת Crashlytics ולראות נתונים ראשוניים בלוח המחוונים של Crashlytics של קונסולת Firebase, עליך לאלץ קריסת מבחן.

  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. באפליקציה שלך, לחץ על כפתור "Test Crash" שהוספת באמצעות הקוד שלמעלה.

    3. לאחר שהאפליקציה שלך קורסת, הפעל אותה מחדש כדי שהאפליקציה תוכל לשלוח את דוח הקריסה ל-Firebase.

  4. עבור אל לוח המחוונים של Crashlytics של מסוף Firebase כדי לראות את קריסת המבחן שלך.

    אם רענן את המסוף ואתה עדיין לא רואה את קריסת הבדיקה לאחר חמש דקות, הפעל רישום באגים כדי לראות אם האפליקציה שלך שולחת דוחות קריסה.


וזה הכל! Crashlytics עוקבת כעת אחר האפליקציה שלך לאיתור קריסות, ואתה יכול להציג ולחקור דוחות קריסה וסטטיסטיקות במרכז השליטה של ​​Crashlytics.

הצעדים הבאים

  • (מומלץ) קבל עזרה באיתור קריסות הנגרמות על ידי שגיאות זיכרון מקורי על ידי איסוף דוחות GWP-ASan . שגיאות אלו הקשורות לזיכרון יכולות להיות קשורות לפגיעה בזיכרון באפליקציה שלך, שהיא הגורם המוביל לפרצות אבטחת האפליקציה. כדי לנצל את התכונה הזו לניפוי באגים, ודא שהאפליקציה שלך מופעלת באופן מפורש GWP-ASan ומשתמשת ב-Crashlytics SDK העדכנית ביותר עבור NDK (v18.3.6+ או Firebase BoM v31.3.0+).

  • התאם אישית את הגדרת דוחות הקריסה שלך על ידי הוספת דיווחי הסכמה, יומנים, מפתחות ומעקב אחר שגיאות לא קטלניות.

  • שלב עם Google Play כך שתוכל לסנן את דוחות הקריסה של אפליקציית Android שלך לפי מסלול Google Play ישירות במרכז השליטה של ​​Crashlytics. זה מאפשר לך למקד טוב יותר את לוח המחוונים שלך בבנייה ספציפית.

פתרון תקלות

אם אתה רואה עקבות מחסנית שונות במסוף Firebase וב-logcat, עיין במדריך לפתרון בעיות .



אפשרויות חלופיות להעלאת סמלים

זרימת העבודה הראשית בדף זה שלמעלה חלה על בנייה סטנדרטית של Gradle. עם זאת, אפליקציות מסוימות משתמשות בתצורה או כלי עבודה שונים (לדוגמה תהליך בנייה אחר מאשר Gradle). במצבים אלה, האפשרויות הבאות עשויות להיות מועילות להעלאת סמלים בהצלחה.

אפשרות : העלאת סמלים עבור מודולי ספרייה ותלות חיצונית

אפשרות זו יכולה להועיל במצבים הבאים:

  • אם אתה משתמש בתהליך בנייה מותאם אישית של NDK בתוך Gradle
  • אם הספריות המקוריות שלך בנויות במודול ספרייה/תכונות או מסופקות על ידי צד שלישי
  • אם משימת העלאת הסמלים האוטומטית נכשלת או שאתה רואה קריסות לא סמליות בלוח המחוונים

אפשרות : העלאת סמלים עבור פריטי בנייה שאינם של גרדל או ספריות מקוריות בלתי נגישות

אפשרות זו יכולה להועיל במצבים הבאים:

  • אם אתה משתמש בתהליך בנייה אחר מאשר Gradle

  • אם הספריות המקוריות שלך ללא הפסקה מסופקות לך בדרך כלשהי שאינן נגישות במהלך בניית Gradle