קבלת דוחות קריסה קריאים בלוח הבקרה של Crashlytics‏ (Android)

בחירת פלטפורמה: ‫iOS+‎ Android Flutter Unity


תוסף Gradle‏ Crashlytics יכול לזהות באופן אוטומטי מתי מבצעים טשטוש של הקוד. כש-build יוצר קובץ מיפוי, הפלאגין מעלה אותו כדי ששרתי Crashlytics יוכלו להשתמש בקובץ כדי להציג את עקבות המחסנית של האפליקציה כקוד לא מעורפל וקריא.

הגדרות נדרשות כשמשתמשים ב-R8, ב-ProGuard וב-DexGuard

‫Crashlytics יכול לבטל את ההסתרה באמצעות כל קובץ מיפוי שתואם ל-ProGuard, ונבדק גם עם ProGuard,‏ R8 ו-DexGuard.

אם האפליקציה משתמשת ב-R8 עם הפעלת טשטוש, יחד עם Android Gradle מגרסה 4.2.0 ואילך,‏ Crashlytics ייצרו דוחות קריסה שניתן לקרוא. הערה: Crashlytics לאחרונה שיפרנו את התמיכה באפליקציות שמשתמשות גם ב-Kotlin וגם ב-R8, מה שיכול להוביל לתיוג לא צפוי של בעיות.

אם האפליקציה שלכם משתמשת בקובץ ההגדרות של ProGuard, אתם צריכים לשמור את המידע שנדרש ל-Crashlytics כדי ליצור דוחות קריסה שניתן לקרוא. כדי לעשות את זה, מוסיפים את השורות הבאות לקובץ התצורה של ProGuard או DexGuard:

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

כדי לקבל עזרה בשאלות או בבעיות שקשורות ל-DexGuard, אפשר לפנות ישירות לצוות התמיכה של Guardsquare. לקבלת עזרה בנושא ProGuard, אפשר להיכנס לפורומים של קהילת Guardsquare כדי לקבל עזרה ממומחה.

שמירה של וריאנטים של build שעברו טשטוש

כדי למנוע מהפלאגין Crashlytics Gradle להעלות את קובץ המיפוי עבור וריאציות שמשתמשות בהסתרת קוד, צריך להגדיר את מאפיין התוסף firebaseCrashlytics.mappingFileUploadEnabled Gradle לערך false בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle). הפעולה הזו יכולה לעזור לקצר את זמני ה-build של גרסאות build עם הסתרת קוד, אבל חשוב לזכור שקורות החיים (stack traces) שיתקבלו יופיעו עם הסתרת קוד בדף Crashlytics במסוף Firebase.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  getByName("debug") {
    minifyEnabled = true
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions += "environment"
productFlavors {
  create("staging") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
  create("prod") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = true
    }
  }
}
}

Groovy

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  debug {
    minifyEnabled true
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions "environment"
productFlavors {
  staging {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
  prod {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled true
    }
  }
}
}