קבלת דוחות קריסה קריאים בלוח הבקרה של 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
    }
  }
}
}