אם אפליקציית Android שלכם מכילה ספריות Native, תוכלו להפעיל מעקב מלא אחר מחסנית הקריאות ודוחות מפורטים על קריסות בקוד Native מתוך Firebase Crashlytics באמצעות כמה עדכונים קטנים בהגדרות הבנייה של האפליקציה.
במדריך הזה מוסבר איך להגדיר דיווח על קריסות באמצעות Firebase Crashlytics SDK ל-NDK.
אם אתם רוצים לדעת איך להתחיל להשתמש ב-Crashlytics בפרויקטים שלכם ב-Unity, כדאי לעיין במדריך לתחילת השימוש ב-Unity.
לפני שמתחילים
אם עדיין לא עשיתם זאת, מוסיפים את Firebase לפרויקט Android. אם אין לכם אפליקציית Android, אתם יכולים להוריד אפליקציה לדוגמה.
מומלץ: כדי לקבל באופן אוטומטי יומני נתיב ולהבין את פעולות המשתמש שהובילו לקריסה, לאירוע לא קטלני או לאירוע ANR, צריך להפעיל את האפשרות Google Analytics בפרויקט Firebase.
אם בפרויקט הקיים שלכם ב-Firebase לא הפעלתם את Google Analytics, תוכלו להפעיל את Google Analytics דרך הכרטיסייה Integrations (שילובים) בקטע
(הגדרות הפרויקט) במסוף > Project settingsFirebase. אם אתם יוצרים פרויקט חדש ב-Firebase, זכרו להפעיל את Google Analytics לפני שתסיימו ליצור את הפרויקט.
מוודאים שבאפליקציה מותקנות הגרסאות הנדרשות הבאות לפחות:
- Gradle 8.0
- פלאגין Android Gradle 8.1.0
- פלאגין Google services Gradle 4.4.1
שלב 1: מוסיפים את Crashlytics SDK ל-NDK לאפליקציה
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל<project>/<app-module>/build.gradle.kts
או <project>/<app-module>/build.gradle
), מוסיפים את התלות בספריית NDK ל-Android Crashlytics. מומלץ להשתמש ב-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:34.3.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:20.0.2") implementation("com.google.firebase:firebase-analytics:23.0.0") }
שלב 2: מוסיפים את הפלאגין Crashlytics Gradle לאפליקציה
בקובץ Gradle ברמת הבסיס (ברמת הפרויקט) (
<project>/build.gradle.kts
או<project>/build.gradle
), מוסיפים את פלאגין Gradle Crashlytics לבלוק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.3" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.6" 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.3' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.6' 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
בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts
או <project>/<app-module>/build.gradle
), מגדירים את התוסף Crashlytics.
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: הגדרת העלאה אוטומטית של סמלים מקוריים
כדי ליצור קובצי Stack Trace שניתן לקרוא אותם מקריסות של NDK, Crashlytics צריך לדעת על הסמלים בקבצים הבינאריים המקוריים שלכם. התוסף Crashlytics Gradle כולל את המשימה uploadCrashlyticsSymbolFileBUILD_VARIANT
לאוטומציה של התהליך הזה.
כדי שתוכלו לגשת למשימה של העלאה אוטומטית של סמלים, ודאו שהערך של
nativeSymbolUploadEnabled
מוגדר ל-true
בקובץ Gradle של המודול (ברמת האפליקציה).כדי ששמות של שיטות יופיעו במעקב אחר מחסנית הקריאות, צריך להפעיל במפורש את המשימה
uploadCrashlyticsSymbolFileBUILD_VARIANT
אחרי כל בנייה של ספריית NDK. לדוגמה:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
גם Crashlytics SDK for NDK וגם Crashlytics Gradle plugin תלויים בנוכחות של מזהה ה-build של GNU באובייקטים המשותפים המקוריים.
כדי לוודא שהמזהה הזה קיים, מריצים את הפקודה
בכל קובץ בינארי. אם מזהה ה-build לא מופיע, מוסיפים אתreadelf -n
לדגלים של מערכת ה-build כדי לפתור את הבעיה.-Wl,--build-id
שלב 5: הפעלת קריסת בדיקה כדי לסיים את ההגדרה
כדי לסיים את ההגדרה של Crashlytics ולראות נתונים ראשוניים בלוח הבקרה של Crashlytics ב-Firebase Console, צריך לגרום לקריסת בדיקה.
מוסיפים לאפליקציה קוד שאפשר להשתמש בו כדי לגרום לקריסת בדיקה.
אפשר להשתמש בקוד הבא ב-
MainActivity
של האפליקציה כדי להוסיף לאפליקציה לחצן שגורם לקריסה כשלוחצים עליו. התווית של הלחצן היא Test Crash (בדיקת קריסה).Kotlin
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. השגיאות האלה שקשורות לזיכרון יכולות להיות משויכות להשחתת זיכרון באפליקציה, שזה הגורם העיקרי לפרצות אבטחה באפליקציות. כדי להשתמש בתכונת הניפוי באגים הזו, צריך לוודא שבאפליקציה הופעלה באופן מפורש GWP-ASan ושהיא משתמשת בגרסה העדכנית ביותר של Crashlytics SDK ל-NDK (גרסה 18.3.6 ואילך או Firebase BoM גרסה 31.3.0 ואילך).
התאמה אישית של הגדרת דוח קריסה על ידי הוספת דיווח על הסכמה להצטרפות, יומנים, מפתחות ומעקב אחר שגיאות לא קריטיות.
משלבים עם Google Play כדי לסנן את דוחות קריסת האפליקציה ל-Android לפי Google Play ולעקוב אחרי הדוחות ישירות בלוח הבקרה של Crashlytics. כך תוכלו להתמקד בלוח הבקרה בגרסאות ספציפיות.
פתרון בעיות
אם אתם רואים עקבות מחסנית שונים במסוף Firebase וב-logcat, תוכלו לעיין במדריך לפתרון בעיות.
אפשרויות חלופיות להעלאת סמלים
תהליך העבודה העיקרי שמופיע למעלה בדף הזה רלוונטי לבניית Gradle רגילה. עם זאת, חלק מהאפליקציות משתמשות בהגדרה או בכלים שונים (לדוגמה, בתהליך build שאינו Gradle). במקרים כאלה, האפשרויות הבאות יכולות לעזור בהעלאת סמלים.
אפשרות: העלאת סמלים למודולים של ספריות ולתלות חיצונית
האפשרות הזו יכולה לעזור במקרים הבאים:
- אם אתם משתמשים בתהליך build מותאם אישית של NDK ב-Gradle
- אם הספריות המקוריות שלכם בנויות במודול ספרייה או במודול תכונה, או אם הן מסופקות על ידי צד שלישי
- אם העלאה אוטומטית של סמלים נכשלת או שמוצגים קריסות לא מסומלות בלוח הבקרה
אפשרות: העלאת סמלים לגרסאות build שאינן Gradle או לספריות מקוריות לא נגישות ולא מוסרות
האפשרות הזו יכולה לעזור במקרים הבאים:
אם אתם משתמשים בתהליך build שאינו Gradle
אם ספריות Native לא מופשטות מסופקות לכם באופן שלא מאפשר גישה אליהן במהלך בניית Gradle