يمكن أن يرصد المكوّن الإضافي Crashlytics Gradle تلقائيًا حالات تشويش التعليمات البرمجية. عندما يُنشئ الإصدار ملف تعيين، يحمّله المكوّن الإضافي كي تتمكّن خوادم 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 Community للحصول على مساعدة من خبير.
الاحتفاظ بنُسخ الإصدار المشوشة
لمنع المكوّن الإضافي Crashlytics Gradle من تحميل ملف الربط لملف
الإصدارات التي تستخدم التشويش، اضبط
سمة تمديد Gradle firebaseCrashlytics.mappingFileUploadEnabled
على
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 } } } }