Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

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

  1. כדי להתחיל, הגדר Crashlytics .

  2. כחלק משלב 2 (הוסף Firebase Crashlytics לאפליקציה שלך) , ודא שהאפליקציה שלך משתמשת בתוסף Crashlytics Gradle v2.4.0 +, שמאפשר לך להעלות סמלים באמצעות הקבצים הבינאריים הלא מקושרים שלך כדי ליצור קריסות מסומלות.

שלב 1 : עדכן את תצורת Gradle שלך

ב- build.gradle ברמת האפליקציה שלך, הכריז על תלות זמן הריצה של Crashlytics NDK:

ג'אווה

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
  // ...

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

  // Declare the dependency for the Firebase Crashlytics NDK library.
  // If you previously declared the Firebase Crashlytics dependency, replace it.
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation 'com.google.firebase:firebase-crashlytics'
  implementation 'com.google.firebase:firebase-crashlytics-ndk'
  implementation 'com.google.firebase:firebase-analytics'
}

// …
android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Crashlytics 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
          }
      }
  }
}

על ידי שימוש ב- Firebase Android BoM , היישום שלך ישתמש תמיד בגרסאות תואמות של ספריות Android ל- Firebase.

(חלופי) הצהיר על תלות בספריית Firebase מבלי להשתמש ב- BoM

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

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

  dependencies {
      // Declare the dependency for the Firebase Crashlytics NDK library.
      // If you previously declared the Firebase Crashlytics dependency, replace it.
      // When NOT using the BoM, you must specify versions in Firebase library dependencies
      implementation 'com.google.firebase:firebase-crashlytics:18.0.1'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.0.1'
      implementation 'com.google.firebase:firebase-analytics:19.0.0'
  }
  

Kotlin + KTX

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'

dependencies {
  // ...

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

  // Declare the dependency for the Firebase Crashlytics NDK library.
  // If you previously declared the Firebase Crashlytics dependency, replace it.
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation 'com.google.firebase:firebase-crashlytics-ktx'
  implementation 'com.google.firebase:firebase-crashlytics-ndk'
  implementation 'com.google.firebase:firebase-analytics-ktx'
}

// …
android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Crashlytics 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
          }
      }
  }
}

על ידי שימוש ב- Firebase Android BoM , האפליקציה שלך תשתמש תמיד בגרסאות תואמות של ספריות Android ל- Firebase.

(חלופי) הצהיר על תלות בספריית Firebase מבלי להשתמש ב- BoM

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

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

  dependencies {
      // Declare the dependency for the Firebase Crashlytics NDK library.
      // If you previously declared the Firebase Crashlytics dependency, replace it.
      // When NOT using the BoM, you must specify versions in Firebase library dependencies
      implementation 'com.google.firebase:firebase-crashlytics-ktx:18.0.1'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.0.1'
      implementation 'com.google.firebase:firebase-analytics-ktx:19.0.0'
  }
  

נדרש עבור Crashlytics NDK גרסה 17.3.0 : אם האפליקציה שלך משתמשת ב- targetSdkLevel 30 ומעלה, עליך להשבית את התכונה 'תיוג targetSdkLevel באפליקציה שלך על ידי הוספת הדברים הבאים ל- AndroidManifest.xml שלך:

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

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

שלב 2 : אפשר העלאת סמל מקורי

כדי לייצר עקבות מחסנית קריאים מקריסת NDK, Crashlytics צריך לדעת על הסמלים בבינאריות המקומיות שלך. התוסף של uploadCrashlyticsSymbolFile BUILD_VARIANT כולל את המשימה uploadCrashlyticsSymbolFile BUILD_VARIANT כדי להפוך את התהליך לאוטומטי (כדי לגשת למשימה זו, ודא nativeSymbolUploadEnabled מוגדר כ- true).

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

>./gradlew app:assembleBUILD_VARIANT\
           app:uploadCrashlyticsSymbolFileBUILD_VARIANT

ה- Crashlytics NDK v17.3.0 + ותוסף Gradle v2.4.1 + תלויים בנוכחות מזהה ה- build של GNU בתוך האובייקטים המשותפים המקומיים. אתה יכול לאמת את נוכחותו של מזהה זה על ידי הפעלת readelf -n בכל בינארי. אם מזהה build אינו קיים, הוסף -Wl,--build-id לדגלי מערכת הבנייה שלך כדי לפתור את הבעיה.

שלב 3 (אופציונלי): העלה סמלים לתלות חיצונית

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

הוסף את הדברים הבאים לקובץ build.gradle ברמת האפליקציה שלך:

// …
android {
    // ...
    buildTypes {
        release {
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
                unstrippedNativeLibsDir file("path/to/unstripped/dir")
            }
        }
    }
}

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

המאפיין unstrippedNativeLibsDir מקבל כל ארגומנט המותר org.gradle.api.Project#files(Object...) , כולל java.lang.String , java.io.File ו- org.gradle.api.file.FileCollection . ניתן לציין מספר ספריות לטעם בנייה אחד על ידי מתן רשימה או מופע FileCollection .

שלב 4 (אופציונלי): התאמה אישית של דוחות קריסה של NDK

באפשרותך לכלול את כותרת crashlytics.h בקוד C ++ שלך כדי להוסיף מטא נתונים לדוחות קריסה של NDK, כגון יומנים, מפתחות מותאמים אישית ומזהי משתמש. crashlytics.h זמין crashlytics.h C ++ כותרת בלבד במאגר GitHub של SDB של Android . קרא את ההערות בקובץ הכותרת לקבלת הוראות לשימוש בממשקי ה- API של NDK C ++.

שלב 5 (אופציונלי): הפעל קובץ סמל Breakpad לסימול

התוסף של Crashlytics Gradle מספק את הפונקציונליות הבאה:

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

התוסף Crashlytics Gradle תומך בשני סוגים של פורמטים של קבצי סמלים:
קובץ הסמל של Crashlytics (cSYM) וקובץ הסמל Breakpad .

קובץ סמל שנוצר על ידי Breakpad מכיל מידע רב יותר מקובץ סמלים שנוצר על ידי Crashlytics, כולל מידע על מסגרת שיחות (CFI) המשמש בתהליך ההתרחקות כדי לסייע בחישוב מסגרות הערימה. שימוש ב- CFI יביא למעקב אחר ערימת אמינות גבוהה יותר, במיוחד עבור יישומים המותאמים במיוחד כגון משחקים ואפליקציות מדיה.

באפשרותך לאפשר שימוש במחולל קבצי הסמלים מבוסס Breakpad באחת משתי דרכים:

  • אפשרות 1: אפשר דרך firebaseCrashlytics השלוחה שלך build.gradle קובץ

    הוסף את הדברים הבאים לקובץ build.gradle ברמת האפליקציה שלך:

    android {
      // ...
      buildTypes {
        // ...
        release {
          // ...
          firebaseCrashlytics {
            // existing; required for either symbol file generator
            nativeSymbolUploadEnabled true
            // Add this optional new block to specify breakpad() or csym()
            symbolGenerator {
               breakpad()
            }
          }
        }
      }
    }
    

    כדי לחזור למחולל קבצי הסמל של Crashlytics המוגדר כברירת מחדל, תוכל לבצע אחת מהפעולות הבאות:

    • symbolGenerator את חסימת symbolGenerator לחלוטין, מכיוון שהתוסף משתמש במחולל קבצי הסמלים Crashlytics כברירת מחדל.

    • שמור על החסימה, אך breakpad() ל- csym() .

  • אפשרות 2: אפשר באמצעות קו מאפיינים בקובץ המאפיינים של Gradle

    תוכל להשתמש במאפיין com.google.firebase.crashlytics.symbolGenerator כדי לשלוט באיזה מחולל קבצי סמלים להשתמש. ערכים תקפים עבור המאפיין הם breakpad או csym . אם לא צוין, ברירת המחדל הנוכחית שווה ערך ל- csym , אם כי זה עשוי להשתנות בגרסאות עתידיות.

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

    ./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \
    app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
    

שלב 6 : עיין בדוחות הקריסה שלך

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

פתרון תקלות

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