| اختيار المنصة: | +iOS Android Flutter Unity |
يمكن للمكوّن الإضافي Gradle في Crashlytics رصد حالات تشويش الرمز البرمجي تلقائيًا. عندما تنشئ عملية الإنشاء ملف ربط، يحمّله المكوّن الإضافي لتتمكّن خوادم Crashlytics من استخدام الملف لعرض تتبُّع تسلسل استدعاء الدوال البرمجية في تطبيقك كرمز برمجي غير مخفي ويمكن لشخص عادي قراءته.
الإعدادات المطلوبة عند استخدام R8 وProGuard وDexGuard
يمكن لـ "Crashlytics" إزالة التعتيم باستخدام أي ملف ربط متوافق مع ProGuard، وقد تم اختباره أيضًا مع ProGuard وR8 وDexGuard.
إذا كان تطبيقك يستخدم أداة R8 مع تفعيل ميزة "إخفاء الهوية" بالإضافة إلى الإصدار 4.2.0 من Android Gradle أو إصدار أحدث، سيُنشئ "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 للحصول على مساعدة من أحد الخبراء.
الاحتفاظ بتنويعات التصميم المبهمة
لمنع المكوّن الإضافي Crashlytics لنظام Gradle من تحميل ملف الربط
للإصدارات التي تستخدم التعتيم، اضبط سمة
امتداد firebaseCrashlytics.mappingFileUploadEnabled لنظام Gradle على
false في ملف Gradle الخاص بالوحدة (على مستوى التطبيق)
(عادةً <project>/<app-module>/build.gradle.kts أو
<project>/<app-module>/build.gradle). يمكن أن يساعد ذلك في تسريع
أوقات إنشاء الإصدارات التي تم تعتيمها، ولكن يُرجى العِلم أنّ تتبُّع تسلسل استدعاء الدوال البرمجية الناتج
سيظهر معتمًا في صفحة 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 } } } }