קבלת דוחות קריסה קריאים במרכז הבקרה של Crashlytics


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

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

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

אם האפליקציה שלכם משתמשת ב-R8 עם obfuscation מופעל יחד עם 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 עם הסתרת קוד, אבל חשוב לזכור שקורות המידע (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
    }
  }
}
}