| בחירת פלטפורמה: | 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 כדי לקבל עזרה ממומחה.
שמירה של וריאציות obfuscated build
כדי למנוע מהפלאגין Crashlytics Gradle להעלות את קובץ המיפוי עבור וריאציות שמשתמשות בהסתרת קוד, צריך להגדיר את מאפיין ההרחבה firebaseCrashlytics.mappingFileUploadEnabled Gradle לערך false בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל <project>/<app-module>/build.gradle.kts או <project>/<app-module>/build.gradle). ההגדרה הזו יכולה לעזור לקצר את זמני הבנייה של קובצי build עם הסתרת קוד, אבל חשוב לזכור שקורות המידע (stack traces) שיתקבלו יופיעו עם הסתרת קוד בדף 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 } } } }