דף זה מספק עזרה בפתרון בעיות ותשובות לשאלות נפוצות לגבי השימוש ב-Crashlytics. אם אינך מוצא את מה שאתה מחפש או זקוק לעזרה נוספת, צור קשר עם התמיכה של Firebase .
פתרון תקלות כללי/שאלות נפוצות
אם אינך רואה משתמשים ללא קריסות, יומני פירורי לחם ו/או התראות מהירות, אנו ממליצים לבדוק את תצורת האפליקציה שלך עבור Google Analytics.
ודא שהפעלת את Google Analytics בפרויקט Firebase שלך.
ודא ששיתוף נתונים מופעל עבור Google Analytics בדף אינטגרציות > Google Analytics של מסוף Firebase. שים לב שהגדרות שיתוף הנתונים מוצגות במסוף Firebase אך מנוהלות במסוף של Google Analytics.
בנוסף ל- Firebase Crashlytics SDK, ודא שהוספת את Firebase SDK עבור Google Analytics לאפליקציה שלך ( iOS+ | Android ).
ודא שאתה משתמש בגרסאות העדכניות ביותר עבור כל ערכות Firebase שלך ( iOS+ | Android ).
בדוק במיוחד שאתה משתמש לפחות בגרסאות הבאות של Firebase SDK עבור Google Analytics: iOS+ — v6.3.1+ (v8.9.0+ עבור macOS ו-tvOS) | אנדרואיד - v17.2.3+(BoM v24.7.1+) .
Crashlytics תומכת בדיווח ANR עבור אפליקציות אנדרואיד ממכשירים המריצים Android 11 ומעלה. ה-API הבסיסי שבו אנו משתמשים לאיסוף ANRs ( getHistoricalProcessExitReasons ) אמין יותר מגישות מבוססות SIGQUIT או כלב שמירה. ממשק API זה זמין רק במכשירי Android 11+.
יכול להיות חוסר התאמה בין ספירת מקרי ה-ANR בין Google Play ל-Crashlytics. זה צפוי בשל ההבדל במנגנון האיסוף והדיווח של נתוני ANR. Crashlytics מדווח על מקרי ANR בעת הפעלת האפליקציה הבאה, בעוד ש-Android Vitals שולח נתוני ANR לאחר התרחשות ה-ANR.
בנוסף, Crashlytics מציג רק מקרי ANR שמתרחשים במכשירים שבהם פועל Android 11+, בהשוואה ל-Google Play שמציג מקרי ANR ממכשירים עם שירותי Google Play והסכמת איסוף נתונים מקובלת.
לרשתות הכלים LLVM ו-GNU יש ברירות מחדל וטיפולים ברורים עבור הקטע לקריאה בלבד של הקבצים הבינאריים של האפליקציה שלך, מה שעלול ליצור עקבות מחסנית לא עקבית במסוף Firebase. כדי להפחית זאת, הוסף את דגלי המקשר הבאים לתהליך הבנייה שלך:
אם אתה משתמש במקשר
lld
הכלים של LLVM, הוסף:-Wl,--no-rosegment
אם אתה משתמש במקשר
ld.gold
הכלים של GNU, הוסף:-Wl,--rosegment
אם אתה עדיין רואה חוסר עקביות של מעקב מחסנית (או אם אף אחד מהדגלים אינו רלוונטי לשרשרת הכלים שלך), נסה במקום זאת להוסיף את הדברים הבאים לתהליך הבנייה שלך:
-fno-omit-frame-pointer
התוסף Crashlytics מאגד מחולל קבצי סמלים Breakpad מותאם אישית . אם אתה מעדיף להשתמש בבינארי משלך ליצירת קובצי סמל Breakpad (לדוגמה, אם אתה מעדיף לבנות את כל קובצי ההפעלה המקוריים בשרשרת הבנייה שלך מהמקור), השתמש במאפיין הסיומת symbolGeneratorBinary
האופציונלי כדי לציין את הנתיב לקובץ ההפעלה.
ניתן לציין את הנתיב למחולל הקבצים Breakpad symbole באחת משתי דרכים:
אפשרות 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 the path to the executable symbolGenerator { breakpad { binary file("/PATH/TO/BREAKPAD/DUMP_SYMS") } } } } }
אפשרות 2 : ציין את הנתיב באמצעות שורת מאפיינים בקובץ המאפיינים של Gradle
אתה יכול להשתמש במאפיין
com.google.firebase.crashlytics.symbolGeneratorBinary
כדי לציין את הנתיב לקובץ ההפעלה.אתה יכול לעדכן ידנית את קובץ המאפיינים של Gradle או לעדכן את הקובץ באמצעות שורת הפקודה. לדוגמה, כדי לציין את הנתיב דרך שורת הפקודה, השתמש בפקודה כמו הבאה:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \ -Pcom.google.firebase.crashlytics.symbolGeneratorBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \ app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
אם אתה רואה את החריג הבא, סביר להניח שאתה משתמש בגרסה של DexGuard שאינה תואמת ל- Firebase Crashlytics SDK:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
חריג זה אינו קורס את האפליקציה שלך אלא מונע ממנה לשלוח דוחות קריסה. כדי לתקן את זה:
ודא שאתה משתמש בגרסה העדכנית ביותר של DexGuard 8.x. הגרסה האחרונה מכילה כללים הנדרשים על ידי Firebase Crashlytics SDK.
אם אינך רוצה לשנות את גרסת DexGuard שלך, נסה להוסיף את השורה הבאה לכללי הערפול שלך (בקובץ התצורה של DexGuard שלך):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
כאשר אפליקציה משתמשת בערפול שאינו חושף את סיומת הקובץ, Crashlytics מייצרת כל בעיה עם סיומת קובץ .java
כברירת מחדל.
כדי ש-Crashlytics תוכל ליצור בעיות עם סיומת הקובץ הנכונה, ודא שהאפליקציה שלך משתמשת בהגדרה הבאה:
- משתמש ב-Android Gradle 4.2.0 ומעלה
- משתמש ב-R8 עם ערפול מופעל. כדי לעדכן את האפליקציה שלך ל-R8, עקוב אחר התיעוד הזה.
שים לב שלאחר עדכון להגדרות המתוארות לעיל, ייתכן שתתחיל לראות בעיות .kt
חדשות שהן כפילויות של בעיות .java
קיימות. עיין בשאלות הנפוצות כדי ללמוד עוד על נסיבות אלה.
החל מאמצע דצמבר 2021, Crashlytics שיפרה את התמיכה באפליקציות המשתמשות ב-Kotlin.
עד לאחרונה, הערפולים הזמינים לא חשפו את סיומת הקובץ, ולכן Crashlytics יצרה כל בעיה עם סיומת קובץ .java
כברירת מחדל. עם זאת, החל מ-Android Gradle 4.2.0, R8 תומך בהרחבות קבצים.
עם עדכון זה, Crashlytics יכולה כעת לקבוע אם כל מחלקה בשימוש באפליקציה כתובה ב-Kotlin ולכלול את שם הקובץ הנכון בחתימת הבעיה. קריסות מיוחסות כעת כהלכה לקובצי .kt
(לפי המתאים) אם לאפליקציה שלך יש את ההגדרה הבאה:
- האפליקציה שלך משתמשת ב-Android Gradle 4.2.0 ומעלה.
- האפליקציה שלך משתמשת ב-R8 עם ערפול מופעל.
מכיוון שקריסות חדשות כוללות כעת את סיומת הקובץ הנכונה בחתימות הבעיות שלהן, ייתכן שתראה בעיות .kt
חדשות שהן למעשה רק כפילויות של בעיות קיימות בתווית .java
. במסוף Firebase, אנו מנסים לזהות ולתקשר אליך אם בעיית .kt
חדשה היא שכפול אפשרי של בעיה קיימת עם תווית .java
.
הערך ללא קריסה מייצג את אחוז המשתמשים שהיו מעורבים באפליקציה שלך אך לא קרסו במהלך פרק זמן מסוים. אתה בוחר פרק זמן זה מהתפריט הנפתח בפינה השמאלית העליונה של לוח המחוונים של Crashlytics.
אחוז המשתמשים ללא קריסות הוא צבירה לאורך זמן , לא ממוצע.
לדוגמה, דמיינו לאפליקציה שלכם שלושה משתמשים; נקרא להם משתמש א', משתמש ב' ומשתמש ג'. הטבלה הבאה מציגה אילו משתמשים מפעילים את האפליקציה שלך בכל יום ואיזה מהמשתמשים הללו קרסה באותו יום:
יוֹם שֵׁנִי | יוֹם שְׁלִישִׁי | יום רביעי | |
---|---|---|---|
משתמשים שהיו מעורבים באפליקציה שלך | א ב ג | א ב ג | א, ב |
משתמש שעבר קריסה | ג | ב | א |
ביום רביעי, אחוז המשתמשים ללא קריסות שלך הוא 50% (1 מכל 2 משתמשים היה ללא קריסות).
שניים מהמשתמשים שלך עסקו באפליקציה שלך ביום רביעי, אבל רק לאחד מהם (משתמש B) לא היו קריסות.במשך היומיים האחרונים, אחוז המשתמשים ללא קריסות שלך הוא 33.3% (1 מכל 3 משתמשים היה ללא קריסות).
שלושה מהמשתמשים שלך היו מעורבים באפליקציה שלך במהלך היומיים האחרונים, אבל רק לאחד מהם (משתמש C) לא היו קריסות.במשך 3 הימים האחרונים, אחוז המשתמשים ללא קריסות שלך הוא 0% (0 מתוך 3 משתמשים היו ללא קריסות).
שלושה מהמשתמשים שלך היו מעורבים באפליקציה שלך במהלך שלושת הימים האחרונים, אבל לאפס מהם לא היו קריסות.
במידת הצורך, הנה הקלט והנוסחה הספציפיים לחישוב אחוז המשתמשים ללא התרסקות:
1 - ( IMPACTED_USERS / ALL_USERS )
היכן IMPACTED_USERS ו- ALL_USERS נאספים על ידי Google Analytics וזמינים דרך לוח המחוונים של Analytics.
אינטגרציות
אם הפרויקט שלך משתמש ב-Cashlytics לצד Google Mobile Ads SDK, סביר להניח שכתבי הקריסה מתערבים ברישום מטפלי חריגים. כדי לפתור את הבעיה, כבה את דיווח קריסה ב-SDK של מודעות לנייד על ידי קריאה disableSDKCrashReporting
.
לאחר קישור Crashlytics ל-BigQuery, מערכי נתונים חדשים שתיצור ממוקמים אוטומטית בארצות הברית, ללא קשר למיקום של פרויקט Firebase שלך.
תמיכה בפלטפורמה
Firebase Crashlytics NDK אינו תומך ב-ARMv5 (armeabi). התמיכה עבור ABI זה הוסרה החל מ-NDK r17.
בעיות נסוגו
לבעיה הייתה רגרסיה כאשר סגרת את הבעיה בעבר, אך Crashlytics מקבל דיווח חדש שהבעיה התרחשה מחדש. Crashlytics פותחת מחדש אוטומטית את הבעיות האלה שנגרמו כדי שתוכל לטפל בהן בהתאם לאפליקציה שלך.
להלן תרחיש לדוגמה המסביר כיצד Crashlytics מסווג בעיה כרגרסיה:
- בפעם הראשונה אי פעם, Crashlytics מקבל דוח התרסקות על התרסקות "A". Crashlytics פותחת בעיה מתאימה לאותה התרסקות (גיליון "A").
- אתה מתקן את הבאג הזה במהירות, סוגר את נושא "A" ואז משחרר גרסה חדשה של האפליקציה שלך.
- Crashlytics מקבל דיווח נוסף על בעיה "A" לאחר שסגרת את הנושא.
- אם הדוח הוא מגרסת אפליקציה ש-Cashlytics ידעה עליה כשסגרת את הבעיה (כלומר שהגרסה שלחה דוח קריסה לכל קריסה בכלל), אז Crashlytics לא תתייחס לבעיה כשגרה. הנושא יישאר סגור.
- אם הדוח הוא מגרסת אפליקציה ש-Cashlytics לא ידעה עליה כשסגרת את הבעיה (כלומר שהגרסה מעולם לא שלחה דוח קריסה על קריסה כלשהי ), אז Crashlytics מחשיבה את הבעיה כנסגרת ותפתח מחדש את הבעיה .
כאשר בעיה חוזרת, אנו שולחים התראת זיהוי רגרסיה ומוסיפים אות רגרסיה לבעיה כדי ליידע אותך ש-Cashlytics פתחה מחדש את הבעיה. אם אינך רוצה שבעיה תיפתח מחדש בגלל אלגוריתם הרגרסיה שלנו, "השתיק" את הבעיה במקום לסגור אותה.
אם דיווח הוא מגרסת אפליקציה ישנה שמעולם לא שלחה דוחות קריסה בכלל כשסגרת את הבעיה, אז Crashlytics מחשיבה את הבעיה כנסגרה ותפתח את הבעיה מחדש.
מצב זה יכול לקרות במצב הבא: תיקנת באג והוצאת גרסה חדשה של האפליקציה שלך, אך עדיין יש לך משתמשים בגרסאות ישנות יותר ללא תיקון הבאג. אם, במקרה, אחת מאותן גרסאות ישנות יותר מעולם לא שלחה דוחות קריסה בכלל כשסגרת את הבעיה, והמשתמשים האלה מתחילים להיתקל בבאג, אז דוחות קריסה אלה היו מפעילים בעיה שנגרמה.
אם אינך רוצה שבעיה תיפתח מחדש בגלל אלגוריתם הרגרסיה שלנו, "השתיק" את הבעיה במקום לסגור אותה.