אם אפליקציית Android שלכם מכילה ספריות Native, תוכלו להפעיל מעקב סטאק מלא ודוחות מפורטים על קריסות בקוד ה-Native מ-Firebase Crashlytics באמצעות כמה עדכונים קטנים בהגדרות ה-build של האפליקציה.
במדריך הזה מוסבר איך להגדיר דיווח על קריסות באמצעות Firebase Crashlytics SDK ל-NDK.
אם אתם מחפשים איך להתחיל לעבוד עם Crashlytics בפרויקטים של Unity, תוכלו לעיין במדריך לתחילת העבודה של Unity.
לפני שמתחילים
אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android. אם אין לכם אפליקציה ל-Android, תוכלו להוריד אפליקציה לדוגמה.
מומלץ: כדי לקבל באופן אוטומטי יומני breadcrumb כדי להבין את הפעולות של המשתמשים שהובילו לקריסה, לאירוע לא קטלני או לאירוע ANR, צריך להפעיל את Google Analytics בפרויקט Firebase.
אם בפרויקט Firebase הקיים שלכם לא מופעלת Google Analytics, תוכלו להפעיל את Google Analytics בכרטיסייה Integrations (שילובים) של
במסוף > Project settingsFirebase. אם אתם יוצרים פרויקט חדש ב-Firebase, צריך להפעיל את Google Analytics במהלך תהליך יצירת הפרויקט.
חשוב לוודא שבמכשיר שלכם מותקנות הגרסאות המינימליות הבאות:
- Gradle 8.0
- Android Gradle plugin 8.1.0
- פלאגין Gradle של שירותי Google 4.4.1
שלב 1: מוסיפים לאפליקציה את ה-SDK של Crashlytics עבור NDK
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל<project>/<app-module>/build.gradle.kts
או <project>/<app-module>/build.gradle
), מוסיפים את התלות בספריית NDK Crashlytics ל-Android. מומלץ להשתמש ב-Firebase Android BoM כדי לשלוט בגרסאות הספרייה.
כדי ליהנות מחוויית שימוש אופטימלית ב-Crashlytics, מומלץ להפעיל את Google Analytics בפרויקט Firebase ולהוסיף את Firebase SDK for Google Analytics לאפליקציה.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.1")) // 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:19.2.1") implementation("com.google.firebase:firebase-analytics:22.1.2") }
שלב 2: הוספה של הפלאגין Crashlytics Gradle לאפליקציה
בקובץ Gradle ברמת הבסיס (ברמת הפרויקט) (
<project>/build.gradle.kts
או<project>/build.gradle
), מוסיפים את הפלאגין Crashlytics ל-Gradle לבלוקplugins
:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
<project>/<app-module>/build.gradle.kts
או<project>/<app-module>/build.gradle
), מוסיפים את הפלאגין Crashlytics של Gradle:Kotlin
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") }
Groovy
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: מוסיפים את התוסף של Crashlytics לגרסה היציבה (build)
מגדירים את התוסף של Crashlytics בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts
או <project>/<app-module>/build.gradle
).
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // 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 } } } }
Groovy
// ... 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 כולל את המשימה uploadCrashlyticsSymbolFileBUILD_VARIANT
כדי לבצע אוטומציה של התהליך הזה.
כדי שתוכלו לגשת למשימה של העלאת סמלים אוטומטית, צריך לוודא שהערך של
nativeSymbolUploadEnabled
מוגדר כ-true
בקובץ Gradle של המודול (ברמת האפליקציה).כדי ששמות השיטות יופיעו בנתוני המעקב אחר סטאק, צריך להפעיל את המשימה
uploadCrashlyticsSymbolFileBUILD_VARIANT
באופן מפורש אחרי כל build של ספריית ה-NDK. לדוגמה:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
גם ה-SDK של Crashlytics ל-NDK וגם הפלאגין Crashlytics ל-Gradle תלויים בנוכחות של מזהה ה-build של GNU בתוך האובייקטים המשותפים הניידים.
תוכלו לאמת את הנוכחות של המזהה הזה על ידי הרצת הפקודה
על כל קובץ בינארי. אם מזהה ה-build לא מופיע, מוסיפים את הדגלreadelf -n
לדגלים של מערכת ה-build כדי לפתור את הבעיה.-Wl,--build-id
שלב 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));
יוצרים את האפליקציה ומריצים אותה.
אילוץ קריסת הבדיקה כדי לשלוח את דוח הקריסה הראשון של האפליקציה:
פותחים את האפליקציה במכשיר הבדיקה או במהדמ.
באפליקציה, לוחצים על הלחצן 'בדיקת קריסה' שהוספתם באמצעות הקוד שלמעלה.
אחרי שהאפליקציה קורסת, צריך להפעיל אותה מחדש כדי שהאפליקציה תוכל לשלוח את דוח הקריסה ל-Firebase.
עוברים אל מרכז הבקרה של Crashlytics במסוף Firebase כדי לראות את קריסה של הבדיקה.
אם רעננתם את המסוף ואתם עדיין לא רואים את הקריסה של הבדיקה אחרי חמש דקות, כדאי להפעיל רישום ביומן של ניפוי באגים כדי לראות אם האפליקציה שולחת דוחות קריסה.
וזהו זה. Crashlytics עוקב עכשיו אחרי קריסות באפליקציה, ותוכלו להציג ולבדוק סטטיסטיקות ודוחות קריסה במרכז הבקרה של Crashlytics.
השלבים הבאים
(מומלץ) כדי לקבל עזרה בניפוי באגים של קריסות שנגרמו על ידי שגיאות זיכרון נייטיב, אוספים דוחות GWP-ASan. שגיאות שקשורות לזיכרון יכולות להיות קשורות לזיהום זיכרון באפליקציה, שהיא הסיבה העיקרית לפרצות אבטחה באפליקציות. כדי ליהנות מתכונה לניפוי באגים, צריך לוודא שהאפליקציה מופעלת באופן מפורש ב-GWP-ASan ושנעשה בה שימוש ב-SDK העדכני ביותר של Crashlytics ל-NDK (גרסה 18.3.6 ואילך או Firebase BoM גרסה 31.3.0 ואילך).
התאמה אישית של ההגדרות של דוח הקריסה: הוספת דיווח על הסכמה, יומנים, מפתחות ומעקב אחרי שגיאות לא קטלניות.
שילבו את השירות עם Google Play כדי שתוכלו לסנן את דוחות הקריסה של אפליקציות Android לפי Google Play טרקים ישירות בלוח הבקרה Crashlytics. כך ניתן למקד את מרכז הבקרה בצורה טובה יותר לגרסאות build ספציפיות.
פתרון בעיות
אם מופיעים נתוני מעקב סטאק שונים במסוף Firebase וב-logcat, כדאי לעיין במדריך לפתרון בעיות.
אפשרויות חלופיות להעלאת סמלים
תהליך העבודה הראשי בדף הזה שלמעלה רלוונטי לגרסאות build רגילות של Gradle. אבל יש אפליקציות שמשתמשות בהגדרות או בכלים אחרים (לדוגמה, תהליך build שאינו Gradle). במקרים כאלה, יכול להיות שהאפשרויות הבאות יעזרו לכם להעלות סמלים.
אפשרות: העלאת סמלים למערכי ספריות וליחסי תלות חיצוניים
האפשרות הזו יכולה להיות שימושית במקרים הבאים:
- אם משתמשים בתהליך build מותאם אישית של NDK ב-Gradle
- אם הספריות המקומיות שלכם נוצרו בספרייה או במודול תכונה, או שסופקו על ידי צד שלישי
- אם המשימה של העלאת הסמלים באופן אוטומטי נכשלת או אם מוצגים בוחנים ללא סימון בחלונית הבקרה
אפשרות: העלאת סמלים לגרסאות build ללא Gradle או עבור ספריות מקוריות שאין להן גישה אליהן
האפשרות הזו יכולה להיות שימושית במקרים הבאים:
אם אתם משתמשים בתהליך build שאינו Gradle
אם הספריות המקומיות ללא הסרת קוד מיותר ניתנות לכם באופן כלשהו כך שלא תוכלו לגשת אליהן במהלך ה-builds ב-Gradle