| בחירת פלטפורמה: | 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 } } } }