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

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


הפלאגין של 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
    }
  }
}
}