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

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

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

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

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

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

ב app ברמה שלך build.gradle , להכריז על תלות ריצת NDK Crashlytics:

ג'אווה

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.4.1')

  // 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 אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד 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.2.1'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.1'
      implementation 'com.google.firebase:firebase-analytics:19.0.1'
  }
  

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.4.1')

  // 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 אנדרואיד BOM , האפליקציה שלך תמיד ישתמשו גירסאות תואמות של ספריות אנדרואיד 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.2.1'
      implementation 'com.google.firebase:firebase-crashlytics-ndk:18.2.1'
      implementation 'com.google.firebase:firebase-analytics-ktx:19.0.1'
  }
  

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

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

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

שלב 2: הפעל העלאת סמל ילידים

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

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

>./gradlew app:assembleBUILD_VARIANT\
           app:uploadCrashlyticsSymbolFileBUILD_VARIANT

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

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

משימת העלאת הסמלים שלנו מניחה שאתה בונה את הספריות המקומיות שלך כחלק ממבנה ה- 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 ++ קוד להוסיף metadata כדי ודוחות קריסת NDK, כגון יומנים, מפתחות מותאמים אישית, ואת מזהי משתמש. crashlytics.h נגיש כספריה כותרת בלבד C ++ ב מאגר GitHub SDK Firebase אנדרואיד . קרא את ההערות בקובץ הכותרת לקבלת הוראות לשימוש בממשקי ה- API של NDK C ++.

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

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

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

התוסף Crashlytics Gradle תומך בשני סוגים של פורמטים של קבצי סמל:
את קובץ סמל Crashlytics (cSYM) ואת 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 לחסום לחלוטין, כמו התוסף משתמש במחולל קובץ סמל 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, עיין מדריך לפתרון הבעיות .