Catch up on everything we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

שלב 1: הפעל Crashlytics במסוף Firebase

  1. עבור אל לוח המחוונים Crashlytics במסוף Firebase.

  2. ודאו שהאפליקציה שלכם נבחרת מתוך התפריט הנפתח לצד Crashlytics בראש הדף.

  3. לחץ אפשר Crashlytics.

שלב 2: מוסיפים את SDK Firebase Crashlytics עבור NDK באפליקציה

באמצעות BOM אנדרואיד Firebase , להכריז על התלות של הספרייה Crashlytics NDK אנדרואיד במודול שלך (ברמת האפליקציה) קובץ Gradle (בדרך כלל app/build.gradle ).

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

Java

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

    // 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 אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

(אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

שים לב שאם אתה משתמש בספריות Firebase מרובים באפליקציה, אנו ממליצים בחום להשתמש בתמונה BOM לנהל גרסאות הספרייה, אשר מבטיח כי כל הגרסאות תואמות.

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

קוטלין+KTX

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

    // 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 אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד Firebase.

(אלטרנטיבי) הצהר תלות הספרייה Firebase ללא שימוש BOM

אם תבחר לא להשתמש ב-Firebase BoM, עליך לציין כל גרסת ספריית Firebase בשורת התלות שלה.

שים לב שאם אתה משתמש בספריות Firebase מרובים באפליקציה, אנו ממליצים בחום להשתמש בתמונה BOM לנהל גרסאות הספרייה, אשר מבטיח כי כל הגרסאות תואמות.

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

שלב 3: הוספת תוסף Firebase Crashlytics באפליקציה

  1. בפרויקט ברמה שלך build.gradle הקובץ, להוסיף את תוסף Crashlytics Gradle כתלות buildscript.

    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. ב app ברמה שלך 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 הארכה.

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

קוטלין+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
          }
      }
  }
}

חובה עבור targetSdkLevel 30 ומעלה: אתה חייב להשבית פוינטר תיוג באפליקציה שלך על ידי הוספת הכיתוב הבא שלך AndroidManifest.xml :

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

לקבלת מידע נוסף, לקרוא תמיכת מפתחים עבור מצביעי Tagged .

שלב 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. הן ה-Crashlytics SDK עבור NDK והן התוסף של Crashlytics Gradle תלויים בנוכחות של מזהה ה-Build של GNU בתוך האובייקטים המשותפים המקוריים.

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

שלב 6: חיל התרסקות מבחן כדי לסיים את ההגדרה

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

  1. הוסף קוד לאפליקציה שלך שבו תוכל להשתמש כדי לאלץ קריסת מבחן.

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

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

    קוטלין+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))
    
  2. בנה והפעל את האפליקציה שלך.

  3. כפה את קריסת הבדיקה כדי לשלוח את דוח הקריסה הראשון של האפליקציה שלך:

    1. פתח את האפליקציה שלך ממכשיר הבדיקה או האמולטור שלך.

    2. באפליקציה שלך, לחץ על כפתור "Test Crash" שהוספת באמצעות הקוד למעלה.

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

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

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


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



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

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

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

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

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

אפשרות: סימני Upload עבור הלא-Gradle בונה או ספריות מקומיות unstripped נגישים

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

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

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



פתרון תקלות

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

הצעדים הבאים