Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:32.1.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-ktx'
}

באמצעות 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.3.7'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
}

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:32.1.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.3.7'
    implementation 'com.google.firebase:firebase-analytics:21.3.0'
}

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

  1. בקובץ Gradle ברמת השורש (ברמת הפרויקט) ( <project>/build.gradle ), הוסף את הפלאגין Crashlytics Gradle כתלות ב-buildscript:

    buildscript {
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
    
        dependencies {
            ...
            classpath 'com.android.tools.build:gradle:7.2.0'
    
            // Make sure that you have the Google services Gradle plugin dependency
            classpath 'com.google.gms:google-services:4.3.15'
    
            // Add the dependency for the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
        }
    }
  2. בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle ), הוסף את הפלאגין Crashlytics Gradle:

    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 : הוסף את התוסף firebaseCrashlytics למבנה שלך

בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle ), הוסף את סיומת firebaseCrashlytics .

Kotlin+KTX

// ...

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

Java

// ...

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 לדגלי מערכת ה-build שלך כדי לתקן את הבעיה.

שלב 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 . שגיאות אלה הקשורות לזיכרון יכולות להיות קשורות לפגיעה בזיכרון באפליקציה שלך, שהיא הגורם המוביל לפרצות אבטחת האפליקציה. כדי לנצל את התכונה הזו, ודא שהאפליקציה שלך מופעלת באופן מפורש ומשתמשת ב-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