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