אם אפליקציית ה-Android שלך מכילה ספריות מקוריות , תוכל להפעיל עקבות מלאים ודוחות קריסה מפורטים עבור הקוד המקורי שלך מ-Firebase Crashlytics עם כמה עדכונים קטנים לתצורת ה-build של האפליקציה שלך.
מדריך זה מתאר כיצד להגדיר דיווח קריסה עם Firebase Crashlytics SDK עבור NDK.
אם אתה מחפש איך להתחיל עם Crashlytics בפרויקטים של Unity שלך, עיין במדריך Unity Getting Started .
לפני שאתה מתחיל
אם עדיין לא עשית זאת, הוסף את Firebase לפרויקט Android שלך. אם אין לך אפליקציית אנדרואיד, תוכל להוריד אפליקציה לדוגמה .
מומלץ : כדי לקבל תכונות כמו משתמשים ללא קריסות, יומני פירורי לחם והתראות מהירות, עליך להפעיל את 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 לאפליקציה שלך
בקובץ 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' } }
בקובץ 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
לאוטומטיות של תהליך זה.
כדי שתוכל לגשת למשימה להעלאת סמלים אוטומטית, ודא ש-
nativeSymbolUploadEnabled
מוגדר כ-true
בקובץ Gradle של המודול (ברמת האפליקציה).כדי ששמות שיטות יופיעו במעקבי הערימה שלך, עליך להפעיל במפורש את המשימה
uploadCrashlyticsSymbolFile BUILD_VARIANT
לאחר כל בנייה של ספריית ה-NDK שלך. לדוגמה:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
גם ה-Crashlytics SDK עבור NDK וגם התוסף של Crashlytics Gradle תלויים בנוכחות של מזהה ה-Build של GNU בתוך האובייקטים המשותפים המקוריים.
אתה יכול לאמת את נוכחותו של מזהה זה על ידי הפעלת
readelf -n
על כל בינארי. אם מזהה ה-build נעדר, הוסף-Wl,--build-id
לדגלי מערכת ה-build שלך כדי לתקן את הבעיה.
שלב 5 : כפה קריסת בדיקה כדי לסיים את ההגדרה
כדי לסיים את הגדרת Crashlytics ולראות נתונים ראשוניים בלוח המחוונים של Crashlytics של קונסולת Firebase, עליך לאלץ קריסת מבחן.
הוסף קוד לאפליקציה שלך שבו תוכל להשתמש כדי לאלץ קריסת מבחן.
אתה יכול להשתמש בקוד הבא ב-
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));
בנה והפעל את האפליקציה שלך.
כפה את קריסת הבדיקה כדי לשלוח את דוח הקריסה הראשון של האפליקציה שלך:
פתח את האפליקציה שלך ממכשיר הבדיקה או האמולטור שלך.
באפליקציה שלך, לחץ על כפתור "Test Crash" שהוספת באמצעות הקוד שלמעלה.
לאחר שהאפליקציה שלך קורסת, הפעל אותה מחדש כדי שהאפליקציה תוכל לשלוח את דוח הקריסה ל-Firebase.
עבור אל לוח המחוונים של 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
- אם הספריות המקוריות שלך בנויות במודול ספרייה/תכונות או מסופקות על ידי צד שלישי
- אם משימת העלאת הסמלים האוטומטית נכשלת או שאתה רואה קריסות לא סמליות בלוח המחוונים
משימת העלאת הסמלים הסטנדרטית של Crashlytics מניחה שאתה בונה את הספריות המקוריות שלך כחלק מה-Gradle build של מודול האפליקציה שלך, תוך שימוש בכלי בנייה סטנדרטיים של NDK כגון CMake.
עם זאת, אם אתה משתמש בתהליך בנייה מותאם אישית של NDK בתוך Gradle, או שהספריות המקוריות שלך בנויות במודול ספרייה/פיצ'רים או מסופקות על ידי צד שלישי, ייתכן שיהיה עליך לציין במפורש את הנתיב לספריות הבלתי מפושטות שלך. כדי להשיג זאת, אתה יכול להוסיף את המאפיין unstrippedNativeLibsDir
בתוך סיומת firebaseCrashlytics
בקובץ build.gradle
שלך.
ודא שהשלמת את המשימות הראשוניות הבאות מזרימת העבודה הראשית מוקדם יותר בדף זה:
כדי שמשימת העלאת הסמלים האוטומטית תוכל למצוא את פרטי הסמל שלך, הוסף את הדברים הבאים לקובץ
build.gradle
של המודול (ברמת האפליקציה):// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
התוסף Crashlytics יחפש באופן רקורסיבי בספרייה שצוינה עבור ספריות מקוריות עם סיומת
.so
. לאחר מכן, Crashlytics מחלץ סמלי ניפוי באגים מכל הספריות הללו ומעלה אותם לשרתי Firebase.הנה מה שאתה יכול לציין במאפיין
unstrippedNativeLibsDir
:כל ארגומנט מותר עבור
org.gradle.api.Project#files(Object...)
, כולל:java.lang.String
,java.io.File
אוorg.gradle.api.file.FileCollection
מספר ספריות עבור טעם בנייה יחיד על ידי מתן רשימה או מופע
FileCollection
לבסוף, כפה על קריסת בדיקה כדי לסיים את הגדרת Crashlytics וכדי לראות נתונים ראשוניים בלוח המחוונים של Crashlytics של מסוף Firebase.
אפשרות : העלאת סמלים עבור פריטי בנייה שאינם של גרדל או ספריות מקוריות בלתי נגישות
אפשרות זו יכולה להועיל במצבים הבאים:
אם אתה משתמש בתהליך בנייה אחר מאשר Gradle
אם הספריות המקוריות שלך ללא הפסקה מסופקות לך בדרך כלשהי שאינן נגישות במהלך בניית Gradle
אפשרות זו מחייבת שתפעיל פקודת Firebase CLI כאשר אתה יוצר גירסת גרסה או כל מבנה שעבורו ברצונך לראות עקבות מחסנית סימבולית במסוף Firebase.
ודא שהשלמת את המשימות הראשוניות הבאות מזרימת העבודה הראשית מוקדם יותר בדף זה:
שים לב שעם אפשרות זו, אינך צריך להוסיף את התוסף
firebaseCrashlytics
או להגדיר העלאת סמלים אוטומטית מכיוון שבמקום זאת תשתמש ב-Firebase CLI (השלבים הבאים למטה) כדי ליצור ולהעלות את קובצי הסמלים שלך.הגדר את הסביבה והפרויקט שלך להעלאת סמלים:
עקוב אחר ההוראות להתקנת Firebase CLI .
אם כבר התקנת את ה-CLI, הקפד לעדכן לגרסה האחרונה שלו .
(רק עבור אפליקציות המשתמשות ב-Android API רמה 30+) עדכן את תבנית
AndroidManifest.xml
של האפליקציה שלך כדי להשבית תיוג מצביע:סמן את התיבה עבור הגדרות נגן Android > הגדרות פרסום > בנייה > מניפסט ראשי מותאם אישית .
פתח את תבנית המניפסט הממוקמת ב-
Assets/Plugins/Android/AndroidManifest.xml
.הוסף את התכונה הבאה לתג היישום:
<application android:allowNativeHeapPointerTagging="false" ... />
בנה את הפרויקט שלך.
העלה את פרטי הסמלים שלך.
לאחר שהבנייה שלך תסתיים, צור קובץ סמלים תואם Crashlytics והעלה אותו לשרתי Firebase על ידי הפעלת פקודת Firebase CLI הבאה:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : מזהה אפליקציית Firebase Android שלך (לא שם החבילה שלך)
מזהה אפליקציה ל-Android של Firebase לדוגמה:1:567383003300:android:17104a2ced0c9b9b
הנה שתי דרכים למצוא את מזהה האפליקציה שלך ב-Firebase:
בקובץ
google-services.json
שלך, מזהה האפליקציה שלך הוא הערךmobilesdk_app_id
; אוֹבמסוף Firebase, עבור אל הגדרות הפרויקט שלך. גלול מטה אל כרטיס האפליקציות שלך , ולאחר מכן לחץ על אפליקציית Firebase הרצויה כדי למצוא את מזהה האפליקציה שלה.
PATH/TO/SYMBOLS : הנתיב לקובץ הסמלים שנוצר על ידי ה-CLI
מיוצא לפרויקט Android Studio - PATH/TO/SYMBOLS יכול להיות כל ספרייה. ה-CLI של Firebase יחפש רקורסיבית בספרייה שצוינה עבור ספריות מקוריות עם סיומת
.so
.בנה את ה-APK ישירות מתוך Unity - PATH/TO/SYMBOLS הוא הנתיב של קובץ הסמלים המכווצים שנוצר בספריית הבסיס של הפרויקט עם סיום הבנייה שלך (לדוגמה:
myproject/myapp-1.0-v100.symbols.zip
).
הצג אפשרויות מתקדמות לשימוש בפקודת Firebase CLI להפקה והעלאה של קבצי סמלים
דֶגֶל תיאור --generator=csym
משתמש במחולל קבצי סמל cSYM מדור קודם במקום מחולל ברירת המחדל של Breakpad
לא מומלץ לשימוש. אנו ממליצים להשתמש במחולל ברירת המחדל של סמלים של Breakpad.
--generator=breakpad
משתמש במחולל קבצי הסמלים Breakpad
שים לב שברירת המחדל ליצירת קבצי סמלים היא Breakpad. השתמש בדגל זה רק אם הוספת
symbolGenerator { csym() }
בתצורת ה-build שלך ואתה רוצה לעקוף אותו כדי להשתמש ב-Breakpad במקום זאת.--dry-run
יוצר את קבצי הסמלים אך אינו מעלה אותם
דגל זה שימושי אם ברצונך לבדוק את תוכן הקבצים שנשלחים.
--debug
מספק מידע נוסף על ניפוי באגים לבסוף, כפה על קריסת בדיקה כדי לסיים את הגדרת Crashlytics וכדי לראות נתונים ראשוניים בלוח המחוונים של Crashlytics של מסוף Firebase.
לאחר שתבנה את האפליקציה שלך כחלק מכפיית קריסה, הקפד להפעיל את הפקודה Firebase CLI
crashlytics:symbols:upload
כדי להעלות את קובץ הסמלים שלך.