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


הפלאגין Crashlytics של Gradle יכול לזהות באופן אוטומטי מתי אתם מבצעים ערפול של הקוד. כשקובץ המיפוי נוצר ב-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 שהוסתרו, אבל חשוב לזכור ששרטוטי הסטאק שייווצרו יופיעו מוסתרים בדף 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
    }
  }
}
}